最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

廢話少說:

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

移動端觸屏滑動的效果其實就是圖片輪播,在PC的頁面上很好實現(xiàn),綁定click和mouseover等事件來完成。但是在移動設備上,要實現(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;
            }
            //設置拖動后小方塊的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;
            }
            //設置拖動后小方塊的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測試上述代碼運行效果。

更多關于JavaScript相關內(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程序設計有所幫助。

相關文章

  • 使用JavaScript獲取Request中參數(shù)的值方法

    使用JavaScript獲取Request中參數(shù)的值方法

    下面小編就為大家?guī)硪黄褂肑avaScript獲取Request中參數(shù)的值方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • document.cookie 使用小結(jié)

    document.cookie 使用小結(jié)

    這篇文章主要介紹了document.cookie 使用,主要包括cookie設置,修改cookie值及獲取cookie值的相關知識,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Javascript removeChild()刪除節(jié)點及刪除子節(jié)點的方法

    Javascript removeChild()刪除節(jié)點及刪除子節(jié)點的方法

    這篇文章主要介紹了Javascript removeChild()刪除節(jié)點及刪除子節(jié)點的方法的相關資料,需要的朋友可以參考下
    2015-12-12
  • JavaScript中幾種時間格式之間的簡單轉(zhuǎn)換

    JavaScript中幾種時間格式之間的簡單轉(zhuǎn)換

    近期在練習或?qū)戫椖繒r經(jīng)常會遇到時間格式的轉(zhuǎn)換問題,今天我就來總結(jié)一下,這篇文章主要給大家介紹了關于JavaScript中幾種時間格式之間的簡單轉(zhuǎn)換,需要的朋友可以參考下
    2024-01-01
  • HTML中事件觸發(fā)列表與解說

    HTML中事件觸發(fā)列表與解說

    HTML中事件觸發(fā)列表與解說...
    2007-07-07
  • js選項卡的實現(xiàn)方法

    js選項卡的實現(xiàn)方法

    這篇文章主要介紹了js選項卡的實現(xiàn)方法,實例分析了js選項卡的實現(xiàn)思路及html+css布局與js功能技巧,非常具有實用價值,需要的朋友可以參考下
    2015-02-02
  • JS在TextArea光標位置插入文字并實現(xiàn)移動光標到文字末尾

    JS在TextArea光標位置插入文字并實現(xiàn)移動光標到文字末尾

    JS在TextArea光標位置插入文字+移動光標到文字末尾,F(xiàn)irefox,Chrome,Safari以及Opera都有selectionStart和selectionEnd屬性,具體實現(xiàn)如下,感興趣的朋友可以參考下哈
    2013-06-06
  • 使用webpack和rollup打包組件庫的方法

    使用webpack和rollup打包組件庫的方法

    這篇文章主要介紹了使用webpack和rollup打包組件庫的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • 詳解PHP后期靜態(tài)綁定分析與應用

    詳解PHP后期靜態(tài)綁定分析與應用

    這篇文章給大家總結(jié)了PHP后期靜態(tài)綁定分析與應用的相關知識點,對此有興趣的朋友可以學習下。
    2018-03-03
  • Javascript BOM學習小結(jié)(六)

    Javascript BOM學習小結(jié)(六)

    BOM:BrowserObjectModel,瀏覽器對象模型,提供JS中對瀏覽器的各種操作的對象,是JS應用中唯一沒有相關標準的部分,這事BOM經(jīng)常出現(xiàn)問題的所在,主要用于處理瀏覽器窗口與框架,瀏覽器特有的JS擴展也被默認為BOM的一部分,而各瀏覽器之間的公有對象就成了默認的標準
    2015-11-11

最新評論

辽阳市| 米脂县| 牟定县| 洛川县| 镇远县| 东光县| 沈阳市| 阜阳市| 资源县| 河北区| 浦县| 阜康市| 无极县| 嘉荫县| 大洼县| 舞钢市| 北辰区| 扎鲁特旗| 林州市| 恩平市| 武胜县| 通州区| 从江县| 卢氏县| 嘉荫县| 乐昌市| 双鸭山市| 香港 | 金华市| 吉林市| 道真| 武宣县| 诸城市| 宁波市| 闵行区| 根河市| 嘉禾县| 白河县| 和平县| 额敏县| 洮南市|