精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

原生JS利用transform實現banner的無限滾動

開發 前端
原生JS怎樣利用transform實現banner的無限滾動及其功能原理。一起來看看吧。

 功能

[[330208]]

  •  默認情況無限循環向右移動
  •  點擊數字切換到對應圖片
  •  點擊左右切換可切換圖片

原理

首先說下原理。

  1.  在布局上所有的圖片都是重疊的,即只要保證Y方向對齊即可,當前可見的圖z-index層級最高。
  2.  每隔3s中更換一張圖片,使用setTimeout定時。
  3.  使用gIndex記錄當前可視區域的展示的是哪張圖片下標,每次更換,計算下一張圖片的下標。
  4.  通過requestAnimationFrame實現一次圖片切換的動畫。

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

動畫的實現

  1.  首先定義一個timestap,這個值記錄每個幀移動多少距離。定義初始step=0,記錄移動的步數。
  2.  每次移動的距離moveWidth是timestamp*step,圖片1向右移動增加moveWidth,圖片2從左側進入moveWidth。因此,圖片1的transform是translate(moveWidth), 而圖片2的transform則是translate(moveWidth-圖片寬度)。

      3.  step+1

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

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

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

html代碼 

  1. <header>  
  2.     <div class="box">  
  3.         <img src="imgs/banner1.jpg">  
  4.         <img src="imgs/banner2.jpg">  
  5.         <img src="imgs/banner3.jpg">  
  6.         <img src="imgs/banner4.jpg">  
  7.     </div>  
  8.     <div class="buttons">  
  9.         <div class="active">1</div>  
  10.         <div>2</div>  
  11.         <div>3</div>  
  12.         <div>4</div>  
  13.     </div>  
  14.     <div class="left">  
  15.         <div class="arrow"></div>  
  16.     </div>  
  17.     <div class="right">  
  18.         <div class="arrow"></div>  
  19.     </div>  
  20. </header> 

JS代碼 

  1. var timeout = null 
  2. window.onload = function () {  
  3.     var oLeft = document.querySelector('.left');  
  4.     var oRight = document.querySelector('.right');  
  5.     var oButton = document.querySelector('.buttons');  
  6.     var oButtons = document.querySelectorAll('.buttons div');  
  7.     var oImgs = document.querySelectorAll('.box img');  
  8.     var imgWidth = oImgs[0].width;  
  9.     var gIndex = 0 
  10.     begainAnimate();  
  11.     // 綁定左右點擊事件  
  12.     oLeft.onclick = function () {  
  13.         clearTimeout(timeout);  
  14.         leftMove();  
  15.         begainAnimate();  
  16.     };  
  17.     oRight.onclick = function () {  
  18.         clearTimeout(timeout);  
  19.         rightMove();  
  20.         begainAnimate();  
  21.     };  
  22.     // 綁定數字序號事件  
  23.     oButton.onclick = function (event) {  
  24.         clearTimeout(timeout);  
  25.         var targetEl = event.target;  
  26.         var nextIndex = (+targetEl.innerText) - 1;  
  27.         console.log(nextIndex);  
  28.         rightMove(nextIndex);  
  29.         begainAnimate();  
  30.     }  
  31.     // 默認初始動畫朝右邊  
  32.     function begainAnimate() {  
  33.         clearTimeout(timeout);  
  34.         timeout = setTimeout(function () {  
  35.             rightMove();  
  36.             begainAnimate();  
  37.         }, 3000);  
  38.     }  
  39.     // 向左移動動畫  
  40.     function leftMove() {  
  41.         var nextIndex = (gIndex - 1 < 0) ? oImgs.length - 1 : gIndex - 1;  
  42.         animateSteps(nextIndex, -50);  
  43.     }  
  44.     // 向右移動動畫  
  45.     function rightMove(nextIndex) {  
  46.         if (nextIndex == undefined) {  
  47.             nextIndex = (gIndex + 1 >= oImgs.length) ? 0 : gIndex + 1;  
  48.         }  
  49.         animateSteps(nextIndex, 50);  
  50.     }  
  51.     // 一次動畫  
  52.     function animateSteps(nextIndex, timestamp) {  
  53.         var currentImg = oImgs[gIndex];  
  54.         var nextImg = oImgs[nextIndex];  
  55.         nextImg.style.zIndex = 10 
  56.         var step = 0 
  57.         requestAnimationFrame(goStep);  
  58.         // 走一幀的動畫,移動timestamp  
  59.         function goStep() {  
  60.             var moveWidth = timestamp * step++;  
  61.             if (Math.abs(moveWidth) < imgWidth) {  
  62.                 currentImg.style.transform = `translate(${moveWidth}px)`;  
  63.                 nextImg.style.transform = `translate(${moveWidth > 0 ? (moveWidth - imgWidth) : (imgWidth + moveWidth)}px)`;  
  64.                 requestAnimationFrame(goStep);  
  65.             } else {  
  66.                 currentImg.style.zIndex = 1 
  67.                 currentImg.style.transform = `translate(0px)`;  
  68.                 nextImg.style.transform = `translate(0px)`;  
  69.                 oButtons[gIndex].setAttribute('class', '');  
  70.                 oButtons[nextIndex].setAttribute('class', 'active');  
  71.                 gIndex = nextIndex 
  72.             }  
  73.         }  
  74.     }  
  75.  
  76. window.onclose = function () {  
  77.     clearTimeout(timeout);  

css布局樣式 

  1. <style>  
  2.     /* 首先設置圖片box的區域,將圖片重疊在一起  */  
  3.     header {  
  4.         width: 100%;  
  5.         position: relative;  
  6.         overflow: hidden;  
  7.     }  
  8.     .box {  
  9.         width: 100%;  
  10.         height: 300px;  
  11.     }  
  12.     .box img {  
  13.         width: 100%;  
  14.         height: 100%;  
  15.         position: absolute;  
  16.         transform: translateX(0);  
  17.         z-index: 1; 
  18.      }  
  19.     .box img:first-child {  
  20.         z-index: 10;  
  21.     }    
  22.     /* 數字序列按鈕 */  
  23.     .buttons {  
  24.         position: absolute;  
  25.         right: 10%;  
  26.         bottom: 5%;  
  27.         display: flex;  
  28.         z-index: 100;  
  29.     }  
  30.     .buttons div {  
  31.         width: 30px;  
  32.         height: 30px;  
  33.         background-color: #aaa;  
  34.         border: 1px solid #aaa;  
  35.         text-align: center;  
  36.         margin: 10px;  
  37.         cursor: pointer;  
  38.         opacity: .7;  
  39.         border-radius: 15px;  
  40.         line-height: 30px;  
  41.     }  
  42.     .buttons div.active {  
  43.         background-color: white;  
  44.     }  
  45.     /* 左右切換按鈕 */  
  46.     .left,  
  47.     .right {  
  48.         position: absolute;  
  49.         width: 80px;  
  50.         height: 80px;  
  51.         background-color: #ccc;  
  52.         z-index: 100;  
  53.         top: 110px;  
  54.         border-radius: 40px;  
  55.         opacity: .5;  
  56.         cursor: pointer;  
  57.     }  
  58.     .left {  
  59.         left: 2%;  
  60.     } 
  61.     .right {  
  62.         right: 2%;  
  63.     }  
  64.     .left .arrow {  
  65.         width: 30px;  
  66.         height: 30px;  
  67.         border-left: solid 5px #666;  
  68.         border-top: solid 5px #666;  
  69.         transform: translate(-5px, 25px) rotate(-45deg) translate(25px, 25px); 
  70.      }  
  71.     .right .arrow {  
  72.         width: 30px;  
  73.         height: 30px;  
  74.         border-left: solid 5px #666;  
  75.         border-top: solid 5px #666;  
  76.         transform: translate(50px, 25px) rotate(135deg) translate(25px, 25px);  
  77.     }  
  78. </style>  

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2012-05-10 14:02:46

jQuery

2015-07-17 13:15:40

Swift版幻燈無限滾動

2012-05-02 13:53:00

JavaScript

2023-09-07 07:35:59

JS操作網頁

2024-06-20 08:42:45

2025-09-19 08:13:42

2015-05-28 10:20:34

js相冊翻頁

2015-05-07 15:13:22

JS實現JQueryJQuery

2025-07-02 03:00:00

2022-09-20 11:00:14

Vue3滾動組件

2019-12-11 10:50:06

JS圖片前端

2013-04-02 13:04:07

ListView平滑滾

2021-06-18 10:12:09

JS代碼前端

2022-07-12 08:32:17

transition跑馬燈

2011-09-02 10:14:10

JQuery滾動Xslider

2012-08-10 09:46:53

jQuery

2022-04-06 18:29:58

CSSJS輸入框

2021-02-11 13:56:21

JSweb插件

2023-11-22 07:47:34

2025-03-19 09:00:00

JavaScript代碼無限滾動
點贊
收藏

51CTO技術棧公眾號

欧美一区二区久久| 久久久www成人免费毛片麻豆 | 亚洲国产精品精华液网站| 国产精品一区视频| 日韩国产成人在线| 国产精品福利在线观看播放| 精品粉嫩超白一线天av| 欧美成人精品欧美一级乱| 欧美69xxx| 粉嫩蜜臀av国产精品网站| 日韩免费在线播放| 91高清免费观看| 欧美激情极品| 欧美人牲a欧美精品| 999在线观看视频| 午夜视频成人| 久久久一区二区| 91国产在线播放| 综合久久中文字幕| 雨宫琴音一区二区在线| 色狠狠av一区二区三区香蕉蜜桃| 免费看91视频| 亚洲男男av| 色综合欧美在线| 2018中文字幕第一页| 欧美精品hd| 国产亚洲一区二区在线观看| 成人综合色站| 国产男男gay体育生网站| 久久aⅴ国产紧身牛仔裤| 欧美激情视频播放| 黄色录像二级片| 精品美女在线视频| 亚洲精品福利视频| 精品人妻无码中文字幕18禁| 日韩电影精品| 欧美在线制服丝袜| 久久久久狠狠高潮亚洲精品| 国内小视频在线看| 国产精品电影院| 日韩欧美电影一区二区| 亚洲第一精品网站| 99成人在线| 欧美精品在线看| 69夜色精品国产69乱| 精品国产一区二区三区噜噜噜| 精品久久五月天| 欧美性猛交xx| 成人豆花视频| 欧美一区日韩一区| 亚洲理论中文字幕| 亚洲精品大片| 91麻豆精品国产| 亚洲黄色片免费| 综合久久av| 日韩一区二区三区视频在线| 在线视频一二区| 996久久国产精品线观看| 欧美日韩激情一区二区| 亚洲黄色av网址| 高清亚洲高清| 7777女厕盗摄久久久| 亚洲国产高清av| 四虎精品永久免费| 欧美一区二区私人影院日本| www午夜视频| 色综合久久久| 欧美一级免费观看| 中文字幕第3页| 亚洲精品小区久久久久久| 精品中文字幕久久久久久| 91精品人妻一区二区| 久久99精品久久久久久园产越南| 亚洲天堂男人天堂| 国产精品久久国产精麻豆96堂| 奇米影视亚洲| 欧美理论电影在线播放| 国产污片在线观看| 制服诱惑一区二区| 国产精品久久久久久久9999| 91精品中文字幕| 成人一区在线观看| 欧美二区在线看| 在线a免费看| 亚洲精品菠萝久久久久久久| 农民人伦一区二区三区| 午夜精品成人av| 欧美喷潮久久久xxxxx| 国产a√精品区二区三区四区| 欧美精品中文字幕亚洲专区| 亚洲欧美中文另类| 日本福利片在线观看| aⅴ色国产欧美| 国产精品无码专区在线观看| 国产www免费观看| 久久色中文字幕| youjizz.com亚洲| 岛国av在线播放| 欧美午夜精品久久久久久超碰 | 深夜福利日韩在线看| 毛片aaaaa| 青青草91视频| 国产伦精品一区二区三区四区视频 | 国产成a人亚洲精品| 欧美日韩一区二区三区在线视频 | 青青操视频在线| 亚洲欧洲www| a√天堂在线观看| 欧美经典影片视频网站| 亚洲天堂免费观看| 国产亚洲精品av| 久久精品国产亚洲aⅴ| 精品国产一区二区三区四区vr| 午夜视频在线观看免费视频| 精品成人国产在线观看男人呻吟| 午夜不卡福利视频| 国产一区网站| 午夜精品在线视频| 国产精品久久久午夜夜伦鲁鲁| 26uuu色噜噜精品一区二区| 天堂а√在线中文在线| 国模私拍国内精品国内av| 日韩风俗一区 二区| 中文字幕手机在线观看| 久久精品久久99精品久久| 日韩精品第一页| 精品众筹模特私拍视频| 在线综合视频播放| 国产黄色录像视频| 久热re这里精品视频在线6| 国产一区二区三区黄| av片在线观看免费| 欧美日韩精品福利| 国产精品一区二区亚洲| 日韩精品亚洲专区| 欧美日韩亚洲在线 | 午夜精品剧场| 91久久精品美女高潮| 97最新国自产拍视频在线完整在线看| 欧美日韩一区二区三区| 老司机免费视频| 激情综合亚洲| 国产精品一区二区免费看| 天堂av资源在线观看| 欧美一区二区三区影视| 日韩在线观看免| 久久国产精品99精品国产| 亚洲国产成人不卡| 日本午夜免费一区二区| 最近2019年手机中文字幕| 少妇又紧又色又爽又刺激视频| 久久精品一区二区| 苍井空浴缸大战猛男120分钟| 自拍偷拍精品| 国产成人精品免费久久久久| 激情福利在线| 在线免费一区三区| 精品人妻中文无码av在线| 日韩电影在线免费| 亚洲欧美日韩精品久久久| 激情久久一区二区| 超在线视频97| 亚洲精品字幕在线| 午夜av一区二区| 黑人巨大精品欧美| 日韩精品一级中文字幕精品视频免费观看| 天堂精品视频| 一区二区三区| 久久久久久亚洲精品中文字幕| 亚洲乱色熟女一区二区三区| 天天影视网天天综合色在线播放| 女同毛片一区二区三区| 视频一区在线视频| 中文字幕一区综合| 日韩三级网址| 9.1国产丝袜在线观看| 久久精品蜜桃| 欧美精品vⅰdeose4hd| 欧美xxxx黑人xyx性爽| 成人av在线资源网| av五月天在线| 欧美久久一区| 蜜桃av噜噜一区二区三区| 日本在线视频一区二区| 久久大大胆人体| 亚洲欧美综合一区二区| 欧美又粗又大又爽| 久久久久久久久久久97| 久久无码av三级| 91av免费观看| 久久综合图片| 国产精品igao激情视频| 九一精品国产| 成人在线视频电影| 成人久久网站| 国内精品伊人久久| 日韩黄色影院| 日韩毛片在线观看| 国产欧美久久久| 色综合久久综合| 岛国毛片在线观看| 国产欧美精品国产国产专区| 日本一本在线视频| 三级影片在线观看欧美日韩一区二区 | 国产成人精品一区二区在线小狼 | 一区二区欧美精品| 高潮毛片无遮挡| 福利一区二区在线| 三级av免费观看| 午夜在线视频观看日韩17c| 在线观看欧美激情| 九九久久成人| 国产精品9999久久久久仙踪林| 2019年精品视频自拍| 欧美性受xxxx白人性爽| 午夜羞羞小视频在线观看| 欲色天天网综合久久| 成人观看高清在线观看免费| 日本精品www| 日韩中文在线电影| 欧美精品亚洲| 老牛国内精品亚洲成av人片| 成人免费福利在线| 国模视频一区| 欧美一区二区三区图| 日韩少妇视频| 久久国产精品电影| 欧美日韩视频在线播放| 中文日韩电影网站| 久久这里精品| 日韩国产精品亚洲а∨天堂免| 午夜精品久久久久久久96蜜桃 | 欧美成人黑人猛交| 尤物精品在线| 给我免费播放片在线观看| 午夜精品电影| 国产欧美自拍视频| 91成人影院| 好吊色这里只有精品| 国产精品久久久久9999赢消| 无遮挡亚洲一区| 国产日产精品_国产精品毛片| 久久久久久久久久码影片| av在线亚洲色图| 国产一区二区三区四区hd| 粉嫩的18在线观看极品精品| 高清不卡一区二区三区| ccyy激情综合| 国严精品久久久久久亚洲影视| aaa国产精品视频| 国产乱码一区| 色爱av综合网| 欧美日韩综合久久| 欧美亚洲国产精品久久| 午夜一区二区三区| 欧美hentaied在线观看| 艳母动漫在线观看| 欧美人成网站| 久在线观看视频| 久久久久久久高潮| 日本肉体xxxx裸体xxx免费| 老司机午夜精品| 欧美一级特黄aaa| 国产盗摄女厕一区二区三区| 欧美丰满熟妇bbb久久久| 成人a免费在线看| 爱爱免费小视频| 国产精品午夜在线| www.av免费| 亚洲国产精品一区二区www在线| 日韩手机在线观看| 在线精品观看国产| 国产男女无套免费网站| 亚洲第一男人天堂| 九色在线观看| 久久亚洲精品一区二区| 888av在线视频| 国产97在线视频| 日韩激情欧美| 麻豆成人av| 亚洲欧美在线专区| 黄色成人在线看| 日本中文在线一区| 男生和女生一起差差差视频| 99这里都是精品| 最新日韩免费视频| 午夜精品久久久久久久 | 精品国产一区二区国模嫣然| 男人天堂综合| 欧美尺度大的性做爰视频| 伊人久久av| 亚洲最大成人网色| 制服丝袜日韩| 日产精品久久久久久久蜜臀| 天堂成人国产精品一区| 老司机av网站| 国产色产综合色产在线视频 | 四季av一区二区三区免费观看 | 蜜臀av性久久久久蜜臀av麻豆| 成人高清在线观看视频| 久久精品一区八戒影视| 久草视频在线资源| 欧美军同video69gay| 亚洲av成人精品日韩在线播放| 久久精品中文字幕电影| 午夜影院一区| 99国精产品一二二线| 国产欧美一区二区三区精品观看| 日韩xxxx视频| 精品一区二区免费| 最近中文字幕免费| 图片区小说区区亚洲影院| 国产美女无遮挡永久免费| 亚洲美女久久久| 91超碰在线免费| 99电影网电视剧在线观看| 日韩免费久久| 免费黄色特级片| 99久久婷婷国产综合精品电影| 91在线播放观看| 欧美日韩一区二区三区四区五区| 深夜福利视频在线免费观看| 欧美成人小视频| 色综合视频一区二区三区日韩| 欧洲精品久久| 性欧美长视频| 亚洲国产精品无码久久久久高潮| 亚洲综合在线第一页| 国产黄色片免费观看| 久久国产精品久久久久| 四虎影视精品永久在线观看| 亚洲欧美国产精品桃花| 日韩精品乱码免费| 西西444www无码大胆| 日韩欧美在线视频观看| 日本成人一区| 欧洲精品久久久| 嫩草影视亚洲| 精品久久久久久久免费人妻| 久久久久国产精品厨房| 天码人妻一区二区三区在线看| 亚洲精品自在久久| 波多野结衣久久精品| 欧美日韩一区二区视频在线| 亚洲尤物在线| 国产又大又粗又爽的毛片| 欧美综合欧美视频| 午夜免费视频在线国产| 成人国产精品一区| 中文视频一区| 逼特逼视频在线观看| 天天操天天色综合| 欧美亚洲日本| 国产精品久久久久久久久久ktv| 成人女性视频| 999久久久精品视频| 亚洲自拍欧美精品| 视频一区二区三区在线看免费看| 日韩免费在线播放| 99久久综合狠狠综合久久aⅴ| 中文字幕日韩久久| 亚洲一区二区精品3399| 先锋av资源站| 国产精品海角社区在线观看| 国产韩日影视精品| 亚洲av午夜精品一区二区三区| 亚洲电影一区二区三区| 五月婷婷丁香花| 国产精品第七十二页| 青草国产精品| 亚洲少妇一区二区| 午夜日韩在线电影| 成人18在线| 成人国产精品av| 亚洲欧洲一级| 91中文字幕永久在线| 欧美日韩和欧美的一区二区| 国产精品剧情| 久久精品二区| 天堂久久一区二区三区| 丁香花五月激情| 亚洲国产91精品在线观看| 日韩一区二区三区在线免费观看 | 欧美视频一区二区三区…| caoporn国产精品免费视频| 成人精品久久一区二区三区| 亚洲欧洲一区| 91麻豆精品国产91久久综合| 日韩欧美国产成人一区二区| 岛国在线视频网站| 免费久久久一本精品久久区| 美女性感视频久久| 亚洲激情图片网| 欧美xxxx老人做受| 成人影院网站| av一区二区三区免费观看| 91伊人久久大香线蕉| 国产偷拍一区二区| 国产91精品久久久久久久| 欧美精品国产|