欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

原生js實現(xiàn)可兼容PC和移動端的拖動滑塊功能詳解【測試可用】

 更新時間:2019年08月15日 10:22:28   作者:最騷的就是你  
這篇文章主要介紹了原生js實現(xiàn)可兼容PC和移動端的拖動滑塊功能,結(jié)合實例形式詳細分析了javascript事件響應(yīng)及頁面元素屬性動態(tài)操作實現(xiàn)滑塊拖動功能的相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了原生js實現(xiàn)可兼容PC和移動端的拖動滑塊功能。分享給大家供大家參考,具體如下:

廢話少說:

在PC端可以用mousedown來觸發(fā)一個滑塊滑動的效果,但在手機上,貌似無法識別這個事件,但手機上有touchstart事件,可以通過一系列“touch”事件來替代PC端的“mouse”事件。

移動端觸屏滑動的效果其實就是圖片輪播,在PC的頁面上很好實現(xiàn),綁定click和mouseover等事件來完成。但是在移動設(shè)備上,要實現(xiàn)這種輪播的效果,就需要用到核心的touch事件。處理touch事件能跟蹤到屏幕滑動的每根手指。

以下是四種touch事件

  • touchstart:     //手指放到屏幕上時觸發(fā)
  • touchmove:      //手指在屏幕上滑動式觸發(fā)
  • touchend:    //手指離開屏幕時觸發(fā)
  • touchcancel:     //系統(tǒng)取消touch事件的時候觸發(fā),這個好像比較少用

每個觸摸事件被觸發(fā)后,會生成一個event對象,event對象里額外包括以下三個觸摸列表

  • touches:     //當前屏幕上所有手指的列表
  • targetTouches:      //當前dom元素上手指的列表,盡量使用這個代替touches
  • changedTouches:     //涉及當前事件的手指的列表,盡量使用這個代替touches

這些列表里的每次觸摸由touch對象組成,touch對象里包含著觸摸信息,主要屬性如下:

  • clientX / clientY:      //觸摸點相對瀏覽器窗口的位置
  • pageX / pageY:       //觸摸點相對于頁面的位置
  • screenX  /  screenY:    //觸摸點相對于屏幕的位置
  • identifier:        //touch對象的ID
  • target:       //當前的DOM元素
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title>鼠標拖動小方塊</title>
    <style type="text/css">
      .lineDiv {
        position: relative;
        height: 5px;
        background: red;
        width: 300px;
        margin: 50px auto;
      }
      .lineDiv .minDiv {
        position: absolute;
        top: -5px;
        left: 0;
        width: 15px;
        height: 15px;
        background: green;
        cursor: pointer
      }
      .lineDiv .minDiv .vals {
        position: absolute;
        font-size: 20px;
        top: -45px;
        left: -10px;
        width: 35px;
        height: 35px;
        line-height: 35px;
        text-align: center;
        background: blue;
      }
      .lineDiv .minDiv .vals:after {
        content: "";
        width: 0px;
        height: 0px;
        border-top: 6px solid blue;
        border-left: 6px solid transparent;
        border-right: 6px solid transparent;
        border-bottom: 6px solid transparent;
        display: block;
        margin-left: 11px;
      }
    </style>
  </head>
  <body>
    <center>
      <h3>用鼠標拖動小方塊<span id="msg">0</span>%</h3>
    </center>
    <div id="lineDiv" class="lineDiv">
      <div id="minDiv" class="minDiv">
        <div id="vals" class="vals">0</div>
      </div>
    </div>
    <script>
      window.onload = function() {
        var lineDiv = document.getElementById('lineDiv'); //長線條
        var minDiv = document.getElementById('minDiv'); //小方塊
        var msg = document.getElementById("msg");
        var vals = document.getElementById("vals");
        var ifBool = false; //判斷鼠標是否按下
        //鼠標按下方塊
        minDiv.addEventListener("touchstart", function(e) {
          e.stopPropagation();
          ifBool = true;
          console.log("鼠標按下")
        });
        //拖動
        window.addEventListener("touchmove", function(e) {
          console.log("鼠標拖動")
          if(ifBool) {
            var x = e.touches[0].pageX || e.touches[0].clientX; //鼠標橫坐標var x
            var lineDiv_left = getPosition(lineDiv).left; //長線條的橫坐標
            var minDiv_left = x - lineDiv_left; //小方塊相對于父元素(長線條)的left值
            if(minDiv_left >= lineDiv.offsetWidth - 15) {
              minDiv_left = lineDiv.offsetWidth - 15;
            }
            if(minDiv_left < 0) {
              minDiv_left = 0;
            }
            //設(shè)置拖動后小方塊的left值
            minDiv.style.left = minDiv_left + "px";
            msg.innerText = parseInt((minDiv_left / (lineDiv.offsetWidth - 15)) * 100);
            vals.innerText = parseInt((minDiv_left / (lineDiv.offsetWidth - 15)) * 100);
          }
        });
        //鼠標松開
        window.addEventListener("touchend", function(e) {
          console.log("鼠標彈起")
          ifBool = false;
        });
        //獲取元素的絕對位置
        function getPosition(node) {
          var left = node.offsetLeft; //獲取元素相對于其父元素的left值var left
          var top = node.offsetTop;
          current = node.offsetParent; // 取得元素的offsetParent
           // 一直循環(huán)直到根元素
          while(current != null) {
            left += current.offsetLeft;
            top += current.offsetTop;
            current = current.offsetParent;
          }
          return {
            "left": left,
            "top": top
          };
        }
      }
    </script>
  </body>
</html>

兼容PC端和移動端:

<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title>鼠標拖動小方塊</title>
    <style type="text/css">
      .lineDiv {
        position: relative;
        height: 5px;
        background: red;
        width: 300px;
        margin: 50px auto;
      }
      .lineDiv .minDiv {
        position: absolute;
        top: -5px;
        left: 0;
        width: 15px;
        height: 15px;
        background: green;
        cursor: pointer
      }
      .lineDiv .minDiv .vals {
        position: absolute;
        font-size: 20px;
        top: -45px;
        left: -10px;
        width: 35px;
        height: 35px;
        line-height: 35px;
        text-align: center;
        background: blue;
      }
      .lineDiv .minDiv .vals:after {
        content: "";
        width: 0px;
        height: 0px;
        border-top: 6px solid blue;
        border-left: 6px solid transparent;
        border-right: 6px solid transparent;
        border-bottom: 6px solid transparent;
        display: block;
        margin-left: 11px;
      }
    </style>
  </head>
  <body>
    <center>
      <h3>用鼠標拖動小方塊<span id="msg">0</span>%</h3>
    </center>
    <div id="lineDiv" class="lineDiv">
      <div id="minDiv" class="minDiv">
        <div id="vals" class="vals">0</div>
      </div>
    </div>
    <script>
      window.onload = function() {
        var lineDiv = document.getElementById('lineDiv'); //長線條
        var minDiv = document.getElementById('minDiv'); //小方塊
        var msg = document.getElementById("msg");
        var vals = document.getElementById("vals");
        var ifBool = false; //判斷鼠標是否按下
        //事件
        var start = function(e) {
          e.stopPropagation();
          ifBool = true;
          console.log("鼠標按下")
        }
        var move = function(e) {
          console.log("鼠標拖動")
          if(ifBool) {
            if(!e.touches) {  //兼容移動端
              var x = e.clientX;
            } else {   //兼容PC端
              var x = e.touches[0].pageX;
            }
            //var x = e.touches[0].pageX || e.clientX; //鼠標橫坐標var x
            var lineDiv_left = getPosition(lineDiv).left; //長線條的橫坐標
            var minDiv_left = x - lineDiv_left; //小方塊相對于父元素(長線條)的left值
            if(minDiv_left >= lineDiv.offsetWidth - 15) {
              minDiv_left = lineDiv.offsetWidth - 15;
            }
            if(minDiv_left < 0) {
              minDiv_left = 0;
            }
            //設(shè)置拖動后小方塊的left值
            minDiv.style.left = minDiv_left + "px";
            msg.innerText = parseInt((minDiv_left / (lineDiv.offsetWidth - 15)) * 100);
            vals.innerText = parseInt((minDiv_left / (lineDiv.offsetWidth - 15)) * 100);
          }
        }
        var end = function(e) {
            console.log("鼠標彈起")
            ifBool = false;
          }
          //鼠標按下方塊
        minDiv.addEventListener("touchstart", start);
        minDiv.addEventListener("mousedown", start);
        //拖動
        window.addEventListener("touchmove", move);
        window.addEventListener("mousemove", move);
        //鼠標松開
        window.addEventListener("touchend", end);
        window.addEventListener("mouseup", end);
        //獲取元素的絕對位置
        function getPosition(node) {
          var left = node.offsetLeft; //獲取元素相對于其父元素的left值var left
          var top = node.offsetTop;
          current = node.offsetParent; // 取得元素的offsetParent
           // 一直循環(huán)直到根元素
          
          while(current != null) {
            left += current.offsetLeft;
            top += current.offsetTop;
            current = current.offsetParent;
          }
          return {
            "left": left,
            "top": top
          };
        }
      }
    </script>
  </body>
</html>

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript頁面元素操作技巧總結(jié)》、《JavaScript操作DOM技巧總結(jié)》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript動畫特效與技巧匯總》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript數(shù)學運算用法總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

相關(guān)文章

  • 輕松學習Javascript閉包函數(shù)

    輕松學習Javascript閉包函數(shù)

    這篇文章主要幫助大家輕松學習掌握Javascript閉包函數(shù),從閉包的含義出發(fā),由淺入深學習Javascript閉包函數(shù),感興趣的小伙伴們可以參考一下
    2015-12-12
  • js函數(shù)返回多個返回值的示例代碼

    js函數(shù)返回多個返回值的示例代碼

    js函數(shù)一般都是返回一個值,在本例教程中將為大家介紹下如何返回多個返回值,喜歡的朋友可以了解下
    2013-11-11
  • Mozilla 表達式 __noSuchMethod__

    Mozilla 表達式 __noSuchMethod__

    這是一個很特殊的方法,但是其存在的意義很大。不過很可惜只有firefox支持了。一個簡單的例子解釋一下它的用處
    2009-04-04
  • js將json格式的對象拼接成復(fù)雜的url參數(shù)方法

    js將json格式的對象拼接成復(fù)雜的url參數(shù)方法

    下面小編就為大家?guī)硪黄猨s將json格式的對象拼接成復(fù)雜的url參數(shù)方法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • JavaScript登錄記住密碼操作(超簡單代碼)

    JavaScript登錄記住密碼操作(超簡單代碼)

    本文給大家分享一段簡單的js代碼實現(xiàn)用戶登錄記住密碼操作,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-03-03
  • 摘自啟點的main.js

    摘自啟點的main.js

    來自啟點的js,主要包括字符串的trim,cookies設(shè)置等
    2008-04-04
  • 微信小程序開發(fā)之實現(xiàn)選項卡(窗口頂部TabBar)頁面切換

    微信小程序開發(fā)之實現(xiàn)選項卡(窗口頂部TabBar)頁面切換

    本篇文章主要介紹了微信小程序開發(fā)之選項卡(窗口頂部TabBar)頁面切換,具有一定的參考價值,有需要的可以了解一下。
    2016-11-11
  • 簡單通過settimeout看javascript的運行機制

    簡單通過settimeout看javascript的運行機制

    這篇文章主要給大家介紹了關(guān)于如何通過settimeout看javascript的運行機制的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用javascript具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • JS+css3實現(xiàn)幻燈片輪播圖

    JS+css3實現(xiàn)幻燈片輪播圖

    這篇文章主要為大家詳細介紹了JS+css3實現(xiàn)幻燈片輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • JavaScript生成一個不重復(fù)的ID的方法示例

    JavaScript生成一個不重復(fù)的ID的方法示例

    這篇文章主要介紹了JavaScript生成一個不重復(fù)的ID的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09

最新評論