音量滑块制作

  • css部分

<style>
        main{
            padding: 10px;
            display: inline-block;
            border: 1px solid black;
        }
        .line{
            box-sizing: border-box;
            background-color: #1B6D85;
            position: relative;
            border-radius: 2px;
        }
        .point{
            box-sizing: border-box;
            background-color: #1B6D85;
            border-radius: 50%;
            position: absolute;
        }
    </style>
  • body部分

<body>
    <div id="app">
        <input type="text" v-model.number.lazy="number">
        <br>
        <br>
        <v-slider v-model="number"></v-slider>
    </div>
</body>
  • 组件模板部分

<script id="v-slider" type="text/html">
    <main>
        <!--@click = "mousedown"  点击的时候调用自定义mousedown方法-->
        <section @mousedown="md" class="line" :style="lineStyle">
            <div class="point" :style="pointStyle"></div>
        </section>
    </main>
</script>
  • Vue部分

<script>
    Vue.component("v-slider",{
        template:"#v-slider",
        props:{
            length:{
                default:400
            },
            height:{
                default:5
            },
            size:{
                default:10
            },
            value:{}
        },
        computed:{
            lineStyle:function () {
                return{
                    width:this.length + "px",
                    height:this.height + "px"
                }
            },
            pointStyle:function () {
                return{
                    width:this.size + "px",
                    height:this.size + "px",
                    top:-this.size / 4 + "px",
                    left:(this.length - 10) / 100 * this.value + "px"
                }
            }
        },
        methods:{

            md:function () {
                var _this = this
                var mv = function (e) {
                    // 坐标的更新
                    _this.pointUpdate(e)
                }
                document.addEventListener("mousemove",mv)
                // 当监听到鼠标松开的时候,移除mousemove事件
                document.addEventListener("mouseup",function () {
                    document.removeEventListener("mousemove",mv)
                })
            },
            pointUpdate:function (e) {
                // 兼容火狐和谷歌
                e=event || window.event
                var pointX = e.pageX
                if(pointX < 0){
                    pointX = 0
                }
                if(pointX > this.length){
                    pointX = this.length
                }
                var rate = pointX / this.length * 100
                if(rate > 100){
                    rate = 100
                }
                this.$emit("input",rate)
                console.log(pointX)
            }
        }
    })
    var vue = new Vue({
        el:"#app",
        data:{
            number:0
        }
    })
  • 效果图

在输入框输入1-100的数,下面的滑块会自动到相应的位置,拖动滑块,输入框内的值也会改变

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38269004/article/details/84110114