用js實現(xiàn)一個簡單的拖拽條

實現(xiàn)思路是:因為能夠拖動,所以是相對于一個盒子定位的,拖動的時候走過的總距離是父盒子的總長度 - 定位盒子的長度。然后走過的距離除以總長可以得到百分比,實現(xiàn)如下:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
       * {
            margin: 0;
            padding: 0;
       }
       .scroll{
         width: 400px;
         height: 8px;
         background-color: #ccc;
         margin: 50px;
         position: relative;
       }
       .bar{
        position: absolute;
        width: 10px;
        height: 20px;
        background: #369;
        top: -50%;
        margin-top: -2px;
        cursor: pointer;
        left: 0;
       }
       .mask{
        width: 0;
        height: 100%;
        position: absolute;
        top: 0;
        left: 0;
        background-color: #369;
       }
    </style>
</head>
<body>
    <div class="scroll" id="scroll">
        <div class="bar"></div>
        <div class="mask"></div>
    </div>
    <div id="demo"></div>
</body>
</html>
<script>
  var scroll = document.getElementById('scroll')
  var demo = document.getElementById("demo");
  var bar = scroll.children[0]
  var mask = scroll.children[1]
  bar.onmousedown = function (e) {
    var e = e || window.event // 標準化event
    var leftVal = e.clientX - this.offsetLeft // 因為當前盒子是bar,bar是相對于scroll定位的,因此得到的offsetLeft是相對于scroll的距離,所以說leftVal是scroll距離瀏覽器左邊的距離
    var that = this
    document.onmousemove = function (e) {
         var e = e || window.event // 標準化event
         var maxLimit = scroll.offsetWidth - 10 // 10為bar的寬度
         that.style.left = event.clientX - leftVal  + 'px'; // 設置滑塊走過的距離,為什么要設置后獲取,因為style是行內樣式,不設置湖區(qū)不到
        var val = parseInt(that.style.left);
         if (val < 0) {
            val = 0
         } else if (val > maxLimit) {
            val = maxLimit
         }
         that.style.left = val + 'px'
         mask.style.width = that.style.left;  // 遮罩盒子的寬度
         // 計算百分比
         demo.innerHTML = "已經(jīng)走了:"+ parseInt(parseInt(that.style.left) / maxLimit * 100) + "%"; // 走過的距離除以總長就得到百分比
         window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty(); // 解決選中出現(xiàn)藍色的一片的bug
    }
    document.onmouseup = function() {
      document.onmousemove = null;   // 彈起鼠標不做任何操作
    }
  }
</script>
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 14,199評論 1 92
  • 1.CSS基本概念 1.1 CSS的定義 CSS(Cascading Style Sheets)層疊樣式表,主要用...
    寥寥十一閱讀 2,082評論 0 6
  • 照顧好你自己,才是在大城市生活的第一步。 所謂的房租房價,工作機會,生活成本,大家面臨的困難或者說挑戰(zhàn)是一樣的。...
    蘋果就是蘋果閱讀 324評論 0 1
  • 文/酸甜只酸不甜 不要期待對等的愛 這樣才不會受傷 我希望你可以平等對待 人人心是肉長的 久了會疼的
    酸甜只酸不甜閱讀 161評論 0 2
  • 爸媽又一次陷入了經(jīng)濟危機里面 心里很不贊同他們的理財方式 可是我不一定能改變他們 這個時候 只想自己多賺點錢 先讓...
    夢想優(yōu)雅的小白閱讀 212評論 0 0

友情鏈接更多精彩內容