vue開發(fā)拖拽進(jìn)度條滑動(dòng)組件
分享一個(gè)最近寫的進(jìn)度條滑動(dòng)組件,以前都是用jq寫,學(xué)會(huì)了vue,嘗試著拿vue來寫覺得非常簡單,代碼復(fù)用性很強(qiáng)!
效果圖如下:


調(diào)用組件如下:
<slider :min=0 :max=100 v-model = "per"></slider>
<template>
<div class="slider" ref="slider">
<div class="process" :style="{width}"></div>
<div class="thunk" ref="trunk" :style="{left}">
<div class="block"></div>
<div class="tips">
<span>{{scale*100}}</span>
<i class="fas fa-caret-down" ></i>
</div>
</div>
</div>
</template>
<script>
/*
* min 進(jìn)度條最小值
* max 進(jìn)度條最大值
* v-model 對當(dāng)前值進(jìn)行雙向綁定實(shí)時(shí)顯示拖拽進(jìn)度
* */
export default{
props:['min','max','value'],
data(){
return{
slider:null, //滾動(dòng)條DOM元素
thunk:null, //拖拽DOM元素
per:this.value, //當(dāng)前值
}
},
//渲染到頁面的時(shí)候
mounted () {
this.slider = this.$refs.slider;
this.thunk = this.$refs.trunk;
var _this = this;
this.thunk.onmousedown = function (e) {
var width = parseInt(_this.width);
var disX = e.clientX;
document.onmousemove = function(e){
// value, left, width
// 當(dāng)value變化的時(shí)候,會(huì)通過計(jì)算屬性修改left,width
// 拖拽的時(shí)候獲取的新width
var newWidth = e.clientX - disX + width;
// 拖拽的時(shí)候得到新的百分比
var scale = newWidth / _this.slider.offsetWidth;
_this.per = Math.ceil((_this.max - _this.min) * scale + _this.min);
_this.per = Math.max(_this.per,_this.min);
_this.per = Math.min(_this.per,_this.max);
}
document.onmouseup = function(){
document.onmousemove = document.onmouseup = null;
}
return false;
}
},
computed:{
// 設(shè)置一個(gè)百分比,提供計(jì)算slider進(jìn)度寬度和trunk的left值
// 對應(yīng)公式為 當(dāng)前值-最小值/最大值-最小值 = slider進(jìn)度width / slider總width
// trunk left = slider進(jìn)度width + trunk寬度/2
scale(){
return (this.per - this.min) / (this.max - this.min);
},
width(){
if(this.slider){
return this.slider.offsetWidth * this.scale + 'px';
}else{
return 0 + 'px'
}
},
left(){
if(this.slider){
return this.slider.offsetWidth * this.scale - this.thunk.offsetWidth/2 + 'px';
}else{
return 0 + 'px'
}
}
},
}
</script>
<style>
.box{margin:100px auto 0;width:80%}
.clear:after{content:'';display:block;clear:both}
.slider{position:relative;margin:20px 0;width:400px;height:10px;background:#e4e7ed;border-radius:5px;cursor:pointer}
.slider .process{position:absolute;left:0;top:0;width:112px;height:10px;border-radius:5px;background:#409eff}
.slider .thunk{position:absolute;left:100px;top:-7px;width:20px;height:20px}
.slider .block{width:20px;height:20px;border-radius:50%;border:2px solid #409eff;background:rgba(255,255,255,1);transition:.2s all}
.slider .tips{position:absolute;left:-7px;bottom:30px;min-width:15px;text-align:center;padding:4px 8px;background:#000;border-radius:5px;height:24px;color:#fff}
.slider .tips i{position:absolute;margin-left:-5px;left:50%;bottom:-9px;font-size:16px;color:#000}
.slider .block:hover{transform:scale(1.1);opacity:.6}
</style>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue 子組件與數(shù)據(jù)傳遞問題及注意事項(xiàng)
這篇文章主要介紹了Vue子組件與數(shù)據(jù)傳遞問題及需要注意事項(xiàng),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
vue中實(shí)現(xiàn)methods一個(gè)方法調(diào)用另外一個(gè)方法
下面小編就為大家分享一篇vue中實(shí)現(xiàn)methods一個(gè)方法調(diào)用另外一個(gè)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02
Vue ECharts餅圖實(shí)現(xiàn)方法詳解
這篇文章主要介紹了在vue.js中,使用echarts組件,創(chuàng)建一個(gè)餅圖,并且獲取餅圖的數(shù)據(jù)和屬性,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12
Vue中keyup.enter和blur事件沖突的問題及解決
這篇文章主要介紹了Vue中keyup.enter和blur事件沖突的問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Avue和Element-UI動(dòng)態(tài)三級表頭的實(shí)現(xiàn)
本文主要介紹了Avue和Element-UI動(dòng)態(tài)三級表頭的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
前端利用vue實(shí)現(xiàn)導(dǎo)入和導(dǎo)出功能詳細(xì)代碼
最近項(xiàng)目中讓實(shí)現(xiàn)一個(gè)導(dǎo)入導(dǎo)出Excel的功能,下面這篇文章主要給大家介紹了關(guān)于前端利用vue實(shí)現(xiàn)導(dǎo)入和導(dǎo)出功能的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
elementUI中input回車觸發(fā)頁面刷新問題與解決方法
這篇文章主要給大家介紹了關(guān)于elementUI中input回車觸發(fā)頁面刷新問題與解決方法,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用elementUI具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-07-07
Vue實(shí)現(xiàn)登錄保存token并校驗(yàn)實(shí)現(xiàn)保存登錄狀態(tài)的操作代碼
這篇文章主要介紹了Vue實(shí)現(xiàn)登錄保存token并校驗(yàn)實(shí)現(xiàn)保存登錄狀態(tài),本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-02-02

