亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

廢話少說(shuō):

在PC端可以用mousedown來(lái)觸發(fā)一個(gè)滑塊滑動(dòng)的效果,但在手機(jī)上,貌似無(wú)法識(shí)別這個(gè)事件,但手機(jī)上有touchstart事件,可以通過(guò)一系列“touch”事件來(lái)替代PC端的“mouse”事件。

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

以下是四種touch事件

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

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

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

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

  • clientX / clientY:      //觸摸點(diǎn)相對(duì)瀏覽器窗口的位置
  • pageX / pageY:       //觸摸點(diǎn)相對(duì)于頁(yè)面的位置
  • screenX  /  screenY:    //觸摸點(diǎn)相對(duì)于屏幕的位置
  • identifier:        //touch對(duì)象的ID
  • target:       //當(dāng)前的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>鼠標(biāo)拖動(dòng)小方塊</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>用鼠標(biāo)拖動(dòng)小方塊<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'); //長(zhǎng)線條
        var minDiv = document.getElementById('minDiv'); //小方塊
        var msg = document.getElementById("msg");
        var vals = document.getElementById("vals");
        var ifBool = false; //判斷鼠標(biāo)是否按下
        //鼠標(biāo)按下方塊
        minDiv.addEventListener("touchstart", function(e) {
          e.stopPropagation();
          ifBool = true;
          console.log("鼠標(biāo)按下")
        });
        //拖動(dòng)
        window.addEventListener("touchmove", function(e) {
          console.log("鼠標(biāo)拖動(dòng)")
          if(ifBool) {
            var x = e.touches[0].pageX || e.touches[0].clientX; //鼠標(biāo)橫坐標(biāo)var x
            var lineDiv_left = getPosition(lineDiv).left; //長(zhǎng)線條的橫坐標(biāo)
            var minDiv_left = x - lineDiv_left; //小方塊相對(duì)于父元素(長(zhǎng)線條)的left值
            if(minDiv_left >= lineDiv.offsetWidth - 15) {
              minDiv_left = lineDiv.offsetWidth - 15;
            }
            if(minDiv_left < 0) {
              minDiv_left = 0;
            }
            //設(shè)置拖動(dòng)后小方塊的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);
          }
        });
        //鼠標(biāo)松開(kāi)
        window.addEventListener("touchend", function(e) {
          console.log("鼠標(biāo)彈起")
          ifBool = false;
        });
        //獲取元素的絕對(duì)位置
        function getPosition(node) {
          var left = node.offsetLeft; //獲取元素相對(duì)于其父元素的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端和移動(dòng)端:

<!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>鼠標(biāo)拖動(dòng)小方塊</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>用鼠標(biāo)拖動(dòng)小方塊<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'); //長(zhǎng)線條
        var minDiv = document.getElementById('minDiv'); //小方塊
        var msg = document.getElementById("msg");
        var vals = document.getElementById("vals");
        var ifBool = false; //判斷鼠標(biāo)是否按下
        //事件
        var start = function(e) {
          e.stopPropagation();
          ifBool = true;
          console.log("鼠標(biāo)按下")
        }
        var move = function(e) {
          console.log("鼠標(biāo)拖動(dòng)")
          if(ifBool) {
            if(!e.touches) {  //兼容移動(dòng)端
              var x = e.clientX;
            } else {   //兼容PC端
              var x = e.touches[0].pageX;
            }
            //var x = e.touches[0].pageX || e.clientX; //鼠標(biāo)橫坐標(biāo)var x
            var lineDiv_left = getPosition(lineDiv).left; //長(zhǎng)線條的橫坐標(biāo)
            var minDiv_left = x - lineDiv_left; //小方塊相對(duì)于父元素(長(zhǎng)線條)的left值
            if(minDiv_left >= lineDiv.offsetWidth - 15) {
              minDiv_left = lineDiv.offsetWidth - 15;
            }
            if(minDiv_left < 0) {
              minDiv_left = 0;
            }
            //設(shè)置拖動(dòng)后小方塊的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("鼠標(biāo)彈起")
            ifBool = false;
          }
          //鼠標(biāo)按下方塊
        minDiv.addEventListener("touchstart", start);
        minDiv.addEventListener("mousedown", start);
        //拖動(dòng)
        window.addEventListener("touchmove", move);
        window.addEventListener("mousemove", move);
        //鼠標(biāo)松開(kāi)
        window.addEventListener("touchend", end);
        window.addEventListener("mouseup", end);
        //獲取元素的絕對(duì)位置
        function getPosition(node) {
          var left = node.offsetLeft; //獲取元素相對(duì)于其父元素的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代碼運(yùn)行工具http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。

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

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

相關(guān)文章

  • 輕松學(xué)習(xí)Javascript閉包函數(shù)

    輕松學(xué)習(xí)Javascript閉包函數(shù)

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

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

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

    Mozilla 表達(dá)式 __noSuchMethod__

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

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

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

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

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

    摘自啟點(diǎn)的main.js

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

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

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

    簡(jiǎn)單通過(guò)settimeout看javascript的運(yùn)行機(jī)制

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

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

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

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

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

最新評(píng)論