摘要:自定義可拖動的進度條,如下圖效果代碼分三部分到這步就基本實現了自定義的樣式,只需改變的就能顯示不同的進度接下來給進度條加上拖動事件
自定義可拖動的進度條,如下圖效果:
代碼分三部分
HTML
1 <body> 2 <div id="demo"> 3 4 <div class="progress"> 5 <div class="progress-bar"> 6 <div class="progress-thumb">div> 7 div> 8 div> 9 10 div> 11 body>
CSS
1 #demo { 2 width: 600px; height: 100px; margin: 100px auto; 3 display: flex; align-items: center; 4 } 5 6 #demo .progress { 7 width: 100%; height: 6px; border-radius: 3px; 8 background: #F1F5FD; 9 } 10 11 #demo .progress .progress-bar { 12 width: 40%; height: 100%; border-radius: 3px; 13 background: #0072FF; 14 } 15 16 #demo .progress .progress-bar .progress-thumb { 17 width: 14px; height: 14px; border-radius: 50%; 18 background: #FFFFFF; box-shadow: 0 0 15px 5px #0072FF; 19 float: right; 20 position: relative; left: 7px; top: -5px; 21 }
到這步就基本實現了自定義的樣式,只需改變 .progress-bar 的 width 就能顯示不同的進度;接下來給進度條加上拖動事件
JavaScript
1 <script> 2 3 var slider = { 4 use: function(id) { 5 var self = this; 6 self.slider = document.getElementById(id); 7 self.bar = self.slider.querySelector(.progress-bar); 8 self.thumb = self.slider.querySelector(.progress-thumb); 9 self.slider.addEventListener(mousedown, function(e) { 10 if (e.button == 0) { // 判斷點擊左鍵 11 self.mDown = true; 12 self.beginX = e.offsetX; 13 self.positionX = e.offsetX; 14 self.beginClientX = e.clientX; 15 self.sliderLong = parseInt(self.getStyle(self.slider, width)); 16 var per = parseInt(self.positionX / self.sliderLong * 100); 17 self.bar.style.width = per + %; 18 } 19 }); 20 document.addEventListener(mousemove, function(e) { 21 if (self.mDown) { 22 var moveX = e.clientX - self.beginClientX; 23 self.positionX = (self.beginX + moveX > self.sliderLong) ? self.sliderLong : (self.beginX + moveX < 0) ? 0 : self.beginX + moveX; 24 var per = parseInt(self.positionX / self.sliderLong * 100); 25 self.bar.style.width = per + %; 26 } 27 }); 28 document.addEventListener(mouseup, function(e) { 29 if (e.button == 0) { 30 self.mDown = false; 31 } 32 }); 33 }, 34 getStyle: function(obj,styleName){ // 獲取元素樣式的方法 35 if(obj.currentStyle){ 36 return obj.currentStyle[styleName]; 37 }else{ 38 return getComputedStyle(obj,null)[styleName]; 39 } 40 } 41 }; 42 slider.use(demo); 43 44 script>
關于本篇隨筆,作者的考慮:
1. 將 mousedown 事件綁定在進度條的包裹層而非進度條本身,這是參考了主流視頻播放器的效果后的設計,為了優化用戶體驗;
2. JS 用純原生語法書寫,如果用 JQuery 可以簡化選擇器和 CSS 樣式的獲取;
3. 鼠標在滾動條外的移動,本文使用 clientX 來計算,如果有其他想法歡迎留言探討
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/1800.html
摘要:事件響應式進度條的應用場景主要是自定義播放器的進度條。效果圖以上就是可以利用本組件實現的一些效果,他們都能響應和兩種事件。部分對現在就有需求使用這個帶事件的進度條的同學來說,看看這部分,可以幫助你自己修改完善它。 寫在前面 找了很多vue進度條組件,都不包含拖拽和點擊事件,input range倒是原生包含input和change事件,但是直接基于input range做進度條的...
摘要:步驟設置控件監聽事件,重新生成驗證區域在文件中添加控件在文件中添加控件,用于顯示旋轉驗證的動態效果。先實例化一個隨機數對象,用于后續計算隨機生成的旋轉驗證塊角度值。 前言基于安卓平臺的滑動拼## 二級標題圖驗證組件SwipeCaptcha(https://github.com/mcxtzhang/SwipeCa...
摘要:先看一下效果點擊這里查看當然源代碼也都在這個文件里啦功能播放暫停音頻軌跡隨意拖動播放時間及總時間靜音實現邏輯當然最終還是使用的的的相關實現的首先寫好播放器相關的樣式并且隱藏默認的播放器然后就是一步步實現邏輯啦播放暫停播放音頻暫停音頻音頻的播 先看一下效果: 點擊這里查看DEMO, 當然源代碼也都在這個文件里啦; showImg(https://segmentfault.com/img/...
閱讀 730·2023-04-25 19:43
閱讀 3975·2021-11-30 14:52
閱讀 3801·2021-11-30 14:52
閱讀 3865·2021-11-29 11:00
閱讀 3796·2021-11-29 11:00
閱讀 3894·2021-11-29 11:00
閱讀 3572·2021-11-29 11:00
閱讀 6157·2021-11-29 11:00