广告位联系
返回顶部
分享到

vue输入框组件开发过程介绍

JavaScript 来源:互联网 作者:秩名 发布时间:2022-03-01 16:50:28 人浏览
摘要

input-number.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

input-number.js

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

function isValueNumber(value) {

    return(/(^-?[0-9]+\.{1}\d+$)|(^-?[1-9]*$)|(^-?0{1}$)/).test(value + '');

}

Vue.component('input-number',{

    template: '\

    <div class=input-number>\

        <input\

            type="text"\

            :value="currentValue"\

            @change="handleChange"\

            @focus="keyControl">\

        <button \

            @click="handleDown" \

            :disabled="currentValue<=min">-</button>\

        <button \

            @click="handleUp" \

            :disabled="currentValue>=max">+</button>\

    </div>',

    data: function (){

        return {

            currentValue: this.value,

            currentStep: this.$parent.step

        }

    },

    watch: {

        currentValue: function (val){

            this.$emit('input',val);

            this.$emit('on-change',val);

        },

        value: function(val){

            this.updateValue(val);

        }

    },

    methods: {

        handleDown: function(){

            if(this.currentValue<=this.min) return;

            this.currentValue-=this.currentStep;

        },

        handleUp: function(){

            if(this.currentValue>=this.max) return;

            this.currentValue+=this.currentStep;

        },

        updateValue: function(val){

            if(val>this.max) val=this.max;

            if(val<this.min) val=this.min;

            this.currentValue=val;

        },

        handleChange: function(event){

            var val = event.target.value.trim();

            var max = this.max;

            var min = this.min;

            if(isValueNumber(val)) {

                val = Number(val);

                this.currentValue = val;

                if(val > max) {

                    this.current = max;

                }

                if(val < min) {

                    this.current = min;

                }

            } else {

                //如果输入的不是数字,将输入的内容重置为之前的currentValue

                event.target.value = this.currentValue;

            }

             

        },

        keyControl: function(){

            var _this=this;

            $(window).keydown(function(e){

                if($('input')){

                    if(e.keyCode==38){

                        _this.handleUp();

                    }

                    else if(e.keyCode==40){

                        _this.handleDown();

                    }

                }

            });

        }

    },

    mounted: function(){

        this.updateValue(this.value);

    },

    props:{

        max:{

            type: Number,

            default: Infinity

        },

        min: {

            type: Number,

            default: -Infinity

        },

        value: {

            type:Number,

            default: 0

        },

        step: {

            type:Number,

            default: 1

        }

    }

})

index.js

1

2

3

4

5

6

7

var app=new Vue({

    el: "#app",

    data: {

        value: 5,

        step: 10

    }

})

index.html

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />

        <title></title>

        <script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>

        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>

    </head>

    <body>

        <div id="app">

            <input-number v-model="value" :max="100" :min="0"></input-number>

        </div>

        <script src="js/input-number.js" type="text/javascript" charset="utf-8"></script>

        <script src="js/index.js" type="text/javascript" charset="utf-8"></script>

    </body>

</html>


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/GlimmerL/article/details/102514495
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计