vue開發(fā)拖拽進(jìn)度條滑動(dòng)組件
分享一個(gè)最近寫的進(jìn)度條滑動(dòng)組件,以前都是用jq寫,學(xué)會(huì)了vue,嘗試著拿vue來寫覺得非常簡(jiǎn)單,代碼復(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 對(duì)當(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值 // 對(duì)應(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>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Nuxt如何實(shí)現(xiàn)將服務(wù)測(cè)數(shù)據(jù)存儲(chǔ)到Vuex中
這篇文章主要介紹了Nuxt如何實(shí)現(xiàn)將服務(wù)測(cè)數(shù)據(jù)存儲(chǔ)到Vuex中的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10vue 如何實(shí)現(xiàn)配置@絕對(duì)路徑
這篇文章主要介紹了vue 如何實(shí)現(xiàn)配置@絕對(duì)路徑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09使用webpack打包后的vue項(xiàng)目如何正確運(yùn)行(express)
這篇文章主要介紹了使用webpack打包后的vue項(xiàng)目如何正確運(yùn)行(express) ,接下來通過本文給大家詳細(xì)介紹,需要的朋友可以參考下2018-10-10vue element 中的table動(dòng)態(tài)渲染實(shí)現(xiàn)(動(dòng)態(tài)表頭)
這篇文章主要介紹了vue element 中的table動(dòng)態(tài)渲染實(shí)現(xiàn)(動(dòng)態(tài)表頭),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11如何利用VUE監(jiān)聽網(wǎng)頁關(guān)閉并執(zhí)行退出操作
這篇文章主要給大家介紹了關(guān)于如何利用VUE監(jiān)聽網(wǎng)頁關(guān)閉并執(zhí)行退出操作的相關(guān)資料,因?yàn)轫?xiàng)目中需求,瀏覽器關(guān)閉時(shí)進(jìn)行一些操作處理,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08vue項(xiàng)目使用cdn加速減少webpack打包體積
通過壓縮代碼的手段可減小網(wǎng)絡(luò)傳輸?shù)拇笮?但實(shí)際上最影響用戶體驗(yàn)的還是網(wǎng)頁首次打開時(shí)的加載等待,其根本原因是網(wǎng)絡(luò)傳輸過程耗時(shí)較大,這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目使用cdn加速減少webpack打包體積的相關(guān)資料,需要的朋友可以參考下2022-08-08Vue + AnimeJS實(shí)現(xiàn)3d輪播圖的詳細(xì)代碼
輪播圖在開發(fā)中是經(jīng)常用到的,3D輪播圖是其中最常用的一種,所以在這篇文章中將給大家介紹Vue + AnimeJS實(shí)現(xiàn)3d輪播圖,文中有詳細(xì)的代碼示例供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下2024-01-01Vue實(shí)現(xiàn)簡(jiǎn)單基礎(chǔ)的圖片裁剪功能
這篇文章主要為大家詳細(xì)介紹了如何利用Vue2實(shí)現(xiàn)簡(jiǎn)單基礎(chǔ)的圖片裁剪功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-09-09atom-design(Vue.js移動(dòng)端組件庫)手勢(shì)組件使用教程
這篇文章主要介紹了atom-design(Vue.js移動(dòng)端組件庫)手勢(shì)組件使用教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05