原生js實現手機端導航滑動效果

代碼以下:html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>導航效果</title>
    <style>
      div,
      li,
      ul,
      a {
        margin: 0;
        padding: 0;
      }
      ul,
      li {
        list-style: none;
      }
      ul {
        width: 500px;
        height: 35px;
        display: block;
        white-space: nowrap;
        overflow: hidden;
        overflow-x: auto;
        border-bottom: 1px solid #dd3;
      }
      ul > li {
        width: 60px;
        height: 35px;
        display: inline-block;
        cursor: pointer;
        color: #8d19f3;
        font-size: 18px;
        text-align: center;
        line-height: 35px;
      }
      ul > li:not(:first-child) {
        margin-left: 25px;
      }
      ::-webkit-scrollbar {
        width: 0;
        height: 0;
      }
    </style>
  </head>
  <body>
    <ul class="box">
      <li>導航一</li>
      <li>導航二</li>
      <li>導航三</li>
      <li>導航四</li>
      <li>導航五</li>
      <li>導航六</li>
      <li>導航七</li>
      <li>導航八</li>
      <li>導航九</li>
      <li>導航十</li>
      <li>導航十一</li>
      <li>導航十二</li>
      <li>導航十三</li>
      <li>導航十四</li>
      <li>導航十五</li>
      <li>導航十六</li>
    </ul>
    <script>
      var timer = null,
        parentElement = document.querySelector(".box"),
        childElement = document.querySelectorAll("li");
      for (var i = 0, len = childElement.length; i < len; i++) {
        childElement[i].index = i;
        childElement[i].onclick = function() {
          var offsetLeft = childElement[this.index].offsetLeft,
            scrollX = parentElement.scrollLeft,
            clientX = parentElement.clientWidth,
            childClientX = childElement[this.index].clientWidth;
          var speed = offsetLeft - scrollX + childClientX / 2 - clientX / 2,
            s = speed / 40,
            totalX = speed + scrollX;
          timer = setInterval(function() {
            parentElement.scrollLeft += s;
            if (
              parentElement.scrollLeft <= 0 ||
              parentElement.scrollLeft >= parentElement.scrollWidth - clientX ||
              (speed > 0 && parentElement.scrollLeft > totalX) ||
              (speed < 0 && parentElement.scrollLeft < totalX)
            ) {
              clearInterval(timer);
            }
          }, 10);
        };
      }
    </script>
  </body>
</html>

效果如圖所示:web

圖片描述

鄙人建立了一個QQ羣,供你們學習交流,但願和你們合做愉快,互相幫助,交流學習,如下爲羣二維碼:學習

clipboard.png

相關文章
相關標籤/搜索