日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

原生JS利用transform實現banner的無限滾動示例代碼

瀏覽:264日期:2024-05-04 14:34:18

功能

原生JS利用transform實現banner的無限滾動示例代碼

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

原理

首先說下原理。

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

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

原生JS利用transform實現banner的無限滾動示例代碼

動畫的實現

首先定義一個timestap,這個值記錄每個幀移動多少距離。定義初始step=0,記錄移動的步數。 每次移動的距離moveWidth是timestamp*step,圖片1向右移動增加moveWidth,圖片2從左側進入moveWidth。因此,圖片1的transform是translate(moveWidth), 而圖片2的transform則是translate(moveWidth-圖片寬度)。 step+1 如果moveWidth>圖片寬度,步驟5,否則requestAnimationFrame請求下一次執行,繼續2-4. 圖片1和2都將位置放置在起始位置,圖片2的z-index設置為最高。

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

html代碼

<header> <div class='box'> <img src='http://www.b3g6.com/bcjs/imgs/banner1.jpg'> <img src='http://www.b3g6.com/bcjs/imgs/banner2.jpg'> <img src='http://www.b3g6.com/bcjs/imgs/banner3.jpg'> <img src='http://www.b3g6.com/bcjs/imgs/banner4.jpg'> </div> <div class='buttons'> <div class='active'>1</div> <div>2</div> <div>3</div> <div>4</div> </div> <div class='left'> <div class='arrow'></div> </div> <div class='right'> <div class='arrow'></div> </div></header>

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(); }; // 綁定數字序號事件 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布局樣式

<style> /* 首先設置圖片box的區域,將圖片重疊在一起 */ header { width: 100%; position: relative; overflow: hidden; } .box { width: 100%; height: 300px; } .box img { width: 100%; height: 100%; position: absolute; transform: translateX(0); z-index: 1; } .box img:first-child { z-index: 10; } /* 數字序列按鈕 */ .buttons { position: absolute; right: 10%; bottom: 5%; display: flex; z-index: 100; } .buttons div { width: 30px; height: 30px; background-color: #aaa; border: 1px solid #aaa; text-align: center; margin: 10px; cursor: pointer; opacity: .7; border-radius: 15px; line-height: 30px; } .buttons div.active { background-color: white; } /* 左右切換按鈕 */ .left, .right { position: absolute; width: 80px; height: 80px; background-color: #ccc; z-index: 100; top: 110px; border-radius: 40px; opacity: .5; cursor: pointer; } .left { left: 2%; } .right { right: 2%; } .left .arrow { width: 30px; height: 30px; border-left: solid 5px #666; border-top: solid 5px #666; transform: translate(-5px, 25px) rotate(-45deg) translate(25px, 25px); } .right .arrow { width: 30px; height: 30px; border-left: solid 5px #666; border-top: solid 5px #666; transform: translate(50px, 25px) rotate(135deg) translate(25px, 25px); }</style>

到此這篇關于原生JS利用transform實現banner的無限滾動示例代碼的文章就介紹到這了,更多相關JS banner無限滾動內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费精品国产的网站免费观看| 免费日韩av| 激情综合网址| 日韩电影免费网站| 久久久亚洲欧洲日产| 国产福利资源一区| 国产a久久精品一区二区三区| 精品伊人久久| 岛国av在线播放| 日韩免费久久| 久久三级福利| 欧美日韩国产欧| 亚洲最大av| 国产日韩一区二区三区在线| 国产精品17p| 高清在线一区| 亚洲一级特黄| 亚州精品视频| 免费亚洲婷婷| 国产一区二区三区国产精品| 久久精品亚洲人成影院| 日韩一区二区免费看| 亚洲精品在线二区| 国产精品对白| 欧美freesex黑人又粗又大| 免费不卡中文字幕在线| 免费一级片91| 国产精品巨作av| 樱桃视频成人在线观看| 91精品高清| 日本特黄久久久高潮| 久久精品国产久精国产| 日韩精品免费一区二区三区| 亚洲欧美激情诱惑| 奇米亚洲欧美| 日韩伦理在线一区| 日韩中文字幕亚洲一区二区va在线| 日韩和欧美一区二区三区| 麻豆传媒一区二区三区| 亚洲高清成人| 久久国产精品免费精品3p| 青青青免费在线视频| 久久成人一区| 精品视频在线观看网站| 欧美日韩精品一本二本三本| 国产亚洲精品精品国产亚洲综合| 中文字幕高清在线播放| 蜜臀av性久久久久蜜臀aⅴ流畅 | 日韩视频一区| 日韩极品在线观看| 国模大尺度视频一区二区| 欧美日韩国产精品一区二区亚洲| 欧美日本久久| 欧美日韩激情在线一区二区三区| 日韩va亚洲va欧美va久久| 日韩精品诱惑一区?区三区| 亚洲精品婷婷| 亚洲黄色免费看| 亚洲专区视频| 国产精品精品| 日韩欧美高清一区二区三区| 亚洲天堂一区二区| 欧美一区二区三区久久精品| 久久精品国内一区二区三区水蜜桃| 亚洲精品少妇| 久久精品国语| 国产精品久久久亚洲一区| 一级欧洲+日本+国产| 欧美黑人做爰爽爽爽| 99国产精品| 水蜜桃精品av一区二区| 日韩欧美三区| 婷婷亚洲五月| 国产一区二区三区亚洲| 免费观看在线综合| 激情亚洲影院在线观看| 国产精品丝袜在线播放| 亚洲欧美日韩一区在线观看| 一区二区三区四区日本视频| 国产亚洲久久| 免费看欧美美女黄的网站| 久久久国产亚洲精品| 国产精品v日韩精品v欧美精品网站 | 日韩av在线播放中文字幕| 久久天堂av| 久久99国产精品视频| 亚洲精品无吗| 国产一级一区二区| 91精品在线观看国产| 久久精品国产一区二区| 日韩高清不卡一区| 亚洲欧美日韩一区在线观看| 999国产精品999久久久久久| 国产成人精品亚洲线观看| 欧美日韩亚洲一区在线观看| 久久夜色精品| 午夜欧美在线| 三上悠亚国产精品一区二区三区| 国产精品国码视频| 日本久久一区| 久久成人精品| 在线一区欧美| 久久国产精品成人免费观看的软件| 国产黄色一区| 日韩高清不卡一区二区| 一区二区三区四区精品视频| 亚洲一区二区三区高清不卡| 欧美 日韩 国产精品免费观看| 91亚洲国产成人久久精品| 免费看久久久| 国产极品一区| 欧美精品成人| 国产精品一级在线观看| 91欧美精品| 日韩一区二区三区在线看| 视频在线观看一区| 亚洲一区二区三区四区五区午夜 | 黄色不卡一区| 亚洲天堂1区| 亚洲精品国产嫩草在线观看| 欧美少妇精品| 亚洲成人va| 成人美女视频| 日韩av首页| 亚洲高清二区| 亚洲欧美日韩精品一区二区| 久久性天堂网| 亚洲制服一区| 日韩三级一区| 国产香蕉精品| 欧美激情视频一区二区三区免费 | 92国产精品| 蜜桃精品在线| 激情久久五月| 午夜久久影院| 亚洲中午字幕| 亚洲在线久久| 欧美精品国产一区| 欧美激情91| 国产精品麻豆久久| 久久精品在线| 一区二区视频欧美| 亚洲精品黄色| 国产欧美视频在线| 国产不卡精品在线| se01亚洲视频| 亚洲激情偷拍| 日韩高清不卡一区| 久久影院资源站| 电影天堂国产精品| 中国女人久久久| 日本午夜精品久久久| 鲁大师精品99久久久| 日韩综合在线| 伊人久久大香线蕉av超碰演员| 亚洲三级精品| 免费精品一区| 激情亚洲影院在线观看| 亚洲激情二区| 欧美日韩xxxx| 国产一区二区三区久久久久久久久| 欧美韩日一区| 亚洲欧美日韩一区在线观看| 欧美日韩午夜电影网| 久久亚洲黄色| 国产在线欧美| 97久久超碰| 欧美日韩国产v| 在线观看亚洲精品福利片| 国产精品一区二区av交换| 亚洲精品国产嫩草在线观看| 老司机精品久久| 美女av一区| 亚洲欧洲一区二区天堂久久| 欧美一区二区三区久久精品| 日韩av在线中文字幕| 黄色在线一区| 国产精品一区二区中文字幕| 夜鲁夜鲁夜鲁视频在线播放| 99在线精品视频在线观看| 亚洲天堂av资源在线观看| 麻豆国产欧美一区二区三区| 91精品国产调教在线观看| 亚洲综合日韩| 欧美激情福利| 狠狠爱成人网| 欧美日韩三区| 麻豆国产91在线播放| 影音先锋国产精品| 国产精品成人自拍| 一区久久精品| 国产乱人伦精品一区| 国产二区精品| 久久精品国产在热久久| 免费人成黄页网站在线一区二区| 精品一区二区三区中文字幕在线| 午夜久久tv| 国产精品xxx在线观看| 婷婷精品进入| 精品国产成人|