原生JS【移动端全屏滑动】功能实现

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 原生JS【移动端全屏滑动】功能实现,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

  1. touchstart事件:当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发。

  2. touchmove事件:当手指在屏幕上滑动的时候连续地触发。在这个事件发生期间,调用preventDefault()事件可以阻止滚动。

  3. touchend事件:当手指从屏幕上离开的时候触发。

首先设置rem自适应布局

// 1rem = 10px
    document.documentElement.style.fontSize =
    document.documentElement.clientWidth / 37.5 + "px";

html代码

	<div id="app">
	  <divclass="wrap">
	    <div class="wrap-slider">
	      <div class="slider-item">page-1</div>
	      <div class="slider-item">page-2</div>
	      <div class="slider-item">page-3</div>
	      <div class="slider-item">page-4</div>
	      <div class="slider-item">page-5</div>
	    </div>
	  </div>
	</div>

css代码

	body {
      margin: 0;
    }
    html,
    body,
    #app {
      height: 100%;
    }
    .wrap {
      position: relative;
      height: 100%;
      overflow: hidden;
    }
    .wrap-slider {
      display: flex;
      position: absolute;
      flex-direction: row;
      width: 187.5rem;
      height: 100%;
    }
    .slider-item {
      display: flex;
      justify-content: center;
      align-items: center;
      font-size: 5rem;
      flex: 1;
    }
    .slider-item:nth-child(1) {
      background-color: aqua;
    }
    .slider-item:nth-child(2) {
      background-color: red;
    }
    .slider-item:nth-child(3) {
      background-color: yellow;
    }
    .slider-item:nth-child(4) {
      background-color: blue;
    }
    .slider-item:nth-child(5) {
      background-color: rgb(132, 126, 126);
    }

js代码

	  const wrap = document.querySelector(".wrap");
      const wrapSlider = document.querySelector(".wrap-slider");
      const sliderItem = document.querySelectorAll(".slider-item");
      const pageWidth = wrap.offsetWidth;
      console.log(pageWidth, "pageWidth");
      let startX = 0;
      let moveX = 0;
      let distanceX = 0;
      let slidePageIndex = 0;
      let isMove = false;

      const init = () => {
        bindEvent();
      };
      function bindEvent() {
        wrapSlider.addEventListener("touchstart", handleTouchStart);
        wrapSlider.addEventListener("touchmove", handleTouchMove);
        wrapSlider.addEventListener("touchend", handleTouchEnd);
      }
      function handleTouchStart(e) {
        startX = e.touches[0].clientX;
        console.log(startX);
      }
      function handleTouchMove(e) {
        moveX = e.touches[0].clientX;
        distanceX = moveX - startX;
        if (
          (slidePageIndex === 0 && distanceX > 0) ||
          (slidePageIndex === sliderItem.length - 1 && distanceX < 0)
        )
          return;
        console.log(distanceX);
        isMove = true;
        setTranslateX(-slidePageIndex * pageWidth + distanceX);
      }
      function handleTouchEnd(e) {
        if (isMove) {
          if (Math.abs(distanceX) >= pageWidth / 3) {
            if (distanceX > 0) {
              slidePageIndex--;
            }
            if (distanceX < 0) {
              slidePageIndex++;
            }
          }
          setTranslateX(-slidePageIndex * pageWidth);
        }
        startX = 0;
        moveX = 0;
        distanceX = 0;
        isMove = false;
      }
      function setTranslateX(transX) {
        wrapSlider.style.transition = "all 0.1s";
        wrapSlider.style.transform = `translateX(${transX}px)`;
      }
      init();

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/137348.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!