真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JS怎么用transform實現(xiàn)banner的無限滾動

本篇內(nèi)容介紹了“JS怎么用transform實現(xiàn)banner的無限滾動”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

仙居網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),仙居網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為仙居上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的仙居做網(wǎng)站的公司定做!

 功能

JS怎么用transform實現(xiàn)banner的無限滾動

  •  默認情況無限循環(huán)向右移動

  •  點擊數(shù)字切換到對應圖片

  •  點擊左右切換可切換圖片

原理

首先說下原理。

  1.  在布局上所有的圖片都是重疊的,即只要保證Y方向?qū)R即可,當前可見的圖z-index層級最高。

  2.  每隔3s中更換一張圖片,使用setTimeout定時。

  3.  使用gIndex記錄當前可視區(qū)域的展示的是哪張圖片下標,每次更換,計算下一張圖片的下標。

  4.  通過requestAnimationFrame實現(xiàn)一次圖片切換的動畫。

這種方法也可以做到整個頁面始終只有2個img標簽,而不必把所有的img節(jié)點全部創(chuàng)建出來,要點是每次更換不可見img的src。

JS怎么用transform實現(xiàn)banner的無限滾動

動畫的實現(xiàn)

  1.  首先定義一個timestap,這個值記錄每個幀移動多少距離。定義初始step=0,記錄移動的步數(shù)。

  2.  每次移動的距離moveWidth是timestamp*step,圖片1向右移動增加moveWidth,圖片2從左側(cè)進入moveWidth。因此,圖片1的transform是translate(moveWidth), 而圖片2的transform則是translate(moveWidth-圖片寬度)。

    3.  step+1

    4.  如果moveWidth>圖片寬度,步驟5,否則requestAnimationFrame請求下一次執(zhí)行,繼續(xù)2-4.

    5.  圖片1和2都將位置放置在起始位置,圖片2的z-index設(shè)置為最高。

這樣就完成了一次移動的動畫。

html代碼

                                                    
                1
          
2
          
3
          
4
      
                                              

JS代碼

var timeout = null;  window.onload = function () {      var oLeft = document.querySelector('.left');      var oRight = document.querySelector('.right');      var oButton = document.querySelector('.buttons');      var oButtons = document.querySelectorAll('.buttons div');      var oImgs = document.querySelectorAll('.box img');      var imgWidth = oImgs[0].width;      var gIndex = 0;      begainAnimate();      // 綁定左右點擊事件      oLeft.onclick = function () {          clearTimeout(timeout);          leftMove();          begainAnimate();      };      oRight.onclick = function () {          clearTimeout(timeout);          rightMove();          begainAnimate();      };      // 綁定數(shù)字序號事件      oButton.onclick = function (event) {          clearTimeout(timeout);          var targetEl = event.target;          var nextIndex = (+targetEl.innerText) - 1;          console.log(nextIndex);          rightMove(nextIndex);          begainAnimate();      }      // 默認初始動畫朝右邊      function begainAnimate() {          clearTimeout(timeout);          timeout = setTimeout(function () {              rightMove();              begainAnimate();          }, 3000);      }      // 向左移動動畫      function leftMove() {          var nextIndex = (gIndex - 1 < 0) ? oImgs.length - 1 : gIndex - 1;          animateSteps(nextIndex, -50);      }      // 向右移動動畫      function rightMove(nextIndex) {          if (nextIndex == undefined) {              nextIndex = (gIndex + 1 >= oImgs.length) ? 0 : gIndex + 1;          }          animateSteps(nextIndex, 50);      }      // 一次動畫      function animateSteps(nextIndex, timestamp) {          var currentImg = oImgs[gIndex];          var nextImg = oImgs[nextIndex];          nextImg.style.zIndex = 10;          var step = 0;          requestAnimationFrame(goStep);          // 走一幀的動畫,移動timestamp          function goStep() {              var moveWidth = timestamp * step++;              if (Math.abs(moveWidth) < imgWidth) {                  currentImg.style.transform = `translate(${moveWidth}px)`;                  nextImg.style.transform = `translate(${moveWidth > 0 ? (moveWidth - imgWidth) : (imgWidth + moveWidth)}px)`;                  requestAnimationFrame(goStep);              } else {                  currentImg.style.zIndex = 1;                  currentImg.style.transform = `translate(0px)`;                  nextImg.style.transform = `translate(0px)`;                  oButtons[gIndex].setAttribute('class', '');                  oButtons[nextIndex].setAttribute('class', 'active');                  gIndex = nextIndex;              }          }      }  }  window.onclose = function () {      clearTimeout(timeout);  }

css布局樣式

“JS怎么用transform實現(xiàn)banner的無限滾動”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


文章標題:JS怎么用transform實現(xiàn)banner的無限滾動
新聞來源:http://weahome.cn/article/jchsoj.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部