亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用JavaScript怎么實現一個移動端的輪播圖效果

發布時間:2020-12-21 15:28:52 來源:億速云 閱讀:176 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關使用JavaScript怎么實現一個移動端的輪播圖效果,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

移動端手勢

輪播圖分析

1、自動輪播且無縫 [定時器、過渡動畫]
2、分頁器要隨著圖片的輪播而改變 [根據索引切換]
3、滑動效果 [touch事件]
4、圖片隨著分頁器變化
5、滑動結束的時候,如果滑動的距離不超過屏幕的1/3,就恢復回去 [過渡]
6、滑動結束的時候,如果滑動的距離超過屏幕的1/3,就切換 [滑動方向 + 過渡]]

html頁面結構

<!--輪播圖-->
  <div class="jd_banner">
   <ul class="clearfix">
    <li><a href="#" ><img src="images/l8.jpg" alt=""></a></li>
    <li><a href="#" ><img src="images/l1.jpg" alt=""></a></li>
    <li><a href="#" ><img src="images/l2.jpg" alt=""></a></li>
    <li><a href="#" ><img src="images/l3.jpg" alt=""></a></li>
    <li><a href="#" ><img src="images/l4.jpg" alt=""></a></li>
    <li><a href="#" ><img src="images/l5.jpg" alt=""></a></li>
    <li><a href="#" ><img src="images/l6.jpg" alt=""></a></li>
    <li><a href="#" ><img src="images/l7.jpg" alt=""></a></li>
    <li><a href="#" ><img src="images/l8.jpg" alt=""></a></li>
    <li><a href="#" ><img src="images/l1.jpg" alt=""></a></li>
   </ul>
   <ul class="clearfix">
    <li class="now"></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
   </ul>
</div>

js部分

/* 動態設置過渡 */
var addTransition = function (ele) {
 ele.style.transition = "all .6s";
 ele.style.webkitTransition = "all .6s";
};
/* 移除過渡效果 */
var removeTransition = function (ele) {
 ele.style.transition = "none";
 ele.style.webkitTransition = "none";
};
/* 設置容器平移 -- 也就是滑動動畫 
 ele:當前元素
 xwidth:平移的距離
*/
var setTranslateX = function (ele, xwidth) {
 ele.style.transform = "translateX(" + xwidth + "px)";
 ele.style.webkitTransform = "translateX(" + xwidth + "px)";
}
var banner = function () {
 /** 輪播圖分析 */
 /** 1 自動輪播且無縫 [定時器、過渡動畫]
  * 2 點要隨著圖片的輪播而改變 [根據索引切換]
  * 3 滑動效果 [touch事件]
  * 4 圖片隨著點而變化
  * 5 滑動結束的時候,如果滑動的距離不超過屏幕的1/3,就恢復回去 [過渡]
  * 6 滑動結束的時候,如果滑動的距離超過屏幕的1/3,就切換 [滑動方向 + 過渡]]
  */
 var timer = ''
 /* 封裝定時器函數 */
 var startInterval = function () {
  timer = setInterval(function () {
   index++;// 基于索引 做位移
   addTransition(imgBox); // 為輪播圖片組的ul設置過渡函數
   setTranslateX(imgBox, -index * width);// 根據當前索引值計算平移的距離
  }, 2000);
 }
 var banner = document.querySelector(".jd_banner");
 var width = banner.offsetWidth; // 屏幕的寬度
 var imgBox = banner.querySelector("ul:first-child"); // 輪播圖片ul
 var length = imgBox.querySelectorAll("li").length; // 圖片的個數
 var pointBox = banner.querySelector("ul:last-child");// 分頁器ul
 var points = pointBox.querySelectorAll("li");// 分頁器集合

 var index = 1; // 初始化索引,由于要無縫銜接,索引從1開始
 startInterval();
 
 /* transitionend事件:當元素過渡動畫結束后執行
 每次輪播動畫結束后,判斷當前索引值
 */
 imgBox.addEventListener("transitionend", function () {
  if (index >= length - 1) {
   index = 1;
   // 清過渡,瞬間定位imgBox 
   removeTransition(imgBox);
   setTranslateX(imgBox, -index * width);
  }
  // 滑動的時候也需要無縫
  else if (index <= 0) {
   index = 8;
   removeTransition(imgBox);
   setTranslateX(imgBox, -index * width);
  }
  showPoint(index - 1); // 改變分頁器狀態
 });

 var showPoint = function (index) {
  for (var i = 0; i < points.length; i++) {
   points[i].className = '';
  }
  points[index].className = "now";
 };
 /* 滑動切換 (touch事件) */
 var startX = 0; // 觸摸起始點
 imgBox.addEventListener("touchstart", function (e) {
  // 記錄起始位置的X坐標
  clearInterval(timer);
  startX = e.touches[0].clientX;
 });
 var distanceX = 0;
 var translateX = 0;
 // **** 加一個標識,判斷用戶有沒有滑動
 var isMove = false
 imgBox.addEventListener("touchmove", function (e) {
  var moveX = e.touches[0].clientX;
  // 計算位移,有正負方向
  distanceX = moveX - startX;
  // 計算目標元素的位移
  // 元素將要的定位 = 當前定位 + 手指移動的距離
  translateX = -index * width + distanceX;
  // ********** 要想圖片實時地跟著手指走,一定要把過渡清楚掉
  removeTransition(imgBox)
  setTranslateX(imgBox, translateX);
  isMove = true;// 確定用戶有滑動
  e.preventDefault(); // 去除移動端瀏覽器默認的滑動事件
 });

 imgBox.addEventListener("touchend", function (e) {
  if (isMove) {
   if (Math.abs(distanceX) > width / 3) {
    // 切換
    if (distanceX > 0) {
     // 上一張
     index = index - 1;
    } else {
     // 下一張
     index = index + 1;
    }
    addTransition(imgBox); // 設置過渡動畫
    setTranslateX(imgBox, -index * width);
    if (index >= 9) {
     index = 1;
    }
    if (index <= 0) {
     index = 8;
    }
    showPoint(index - 1);

   } else {
    // 不滿足滑動條件,回退到之前的狀態
    addTransition(imgBox);
    setTranslateX(imgBox, -index * width);
    showPoint(index - 1);
   }
  }
  // **** 最好做一次參數的重置
  startX = 0;
  distanceX = 0;
  isMove = false;
  // ****** 為了嚴謹,再清一次定時器
  clearInterval(timer)
  // 加上定時器
  startInterval();
 });
};

總結

原生js實現滑動切換的原理主要還是利用移動端的手勢事件

  • touchstart 當手指觸摸屏幕時觸發

  • touchmove 當手指在屏幕中滑動的時候觸發

  • touchend 當手指離開屏幕時觸發

利用touch相關事件實現移動端常見滑動效果和移動端常見的手勢事件。

而swiper插件的底層實現原理也是這個,因此,為了快速開發,還是使用swiper插件最好

看完上述內容,你們對使用JavaScript怎么實現一個移動端的輪播圖效果有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

柯坪县| 龙州县| 乌拉特前旗| 尚义县| 如皋市| 饶平县| 鄢陵县| 潼南县| 安远县| 昭苏县| 铁力市| 博客| 峨眉山市| 娄底市| 外汇| 枝江市| 泾阳县| 黄浦区| 都江堰市| 固阳县| 南平市| 会同县| 孝昌县| 随州市| 四会市| 仁化县| 泉州市| 禹州市| 双城市| 临安市| 铁力市| 黔西| 定日县| 林芝县| 潜山县| 榆社县| 秀山| 涪陵区| 响水县| 大姚县| 星子县|