JS仿京東移動(dòng)端手指撥動(dòng)切換輪播圖效果
如今,移動(dòng)端web頁(yè)面在市場(chǎng)上也是占有相當(dāng)大的比例,而移動(dòng)端的輪播圖效果也是很常見(jiàn)的,今天我就來(lái)記錄下關(guān)于實(shí)現(xiàn)一組適用于移動(dòng)端的可用手指進(jìn)行撥動(dòng)切換輪播圖的效果。
這個(gè)效果的主要技術(shù)點(diǎn)依托于觸屏設(shè)備特有的touch事件;好了,接下來(lái)就進(jìn)入主題吧。
首先是html布局:
1. 這里強(qiáng)調(diào)的是記得給html加上viewport這個(gè)適口屬性。
2. 由于在撥動(dòng)第一張圖片以及最后一張圖片的時(shí)候需要切換到最后一張以及第一張,要想達(dá)到理想效果,需要給第一張圖片前面加上最后一張圖片,而在最后一張圖片后加上第一張圖片。
3. f_l代表的是左浮動(dòng)
**html代碼如下:**
<ul class='banner_imgs clearfix'> <li class='f_l'> <a href="#"><img src="image/l8.jpg" alt="" /></a> </li> <li class='f_l'> <a href="#"><img src="image/l1.jpg" alt="" /></a> </li> <li class='f_l'> <a href="#"><img src="image/l2.jpg" alt="" /></a> </li> <li class='f_l'> <a href="#"><img src="image/l3.jpg" alt="" /></a> </li> <li class='f_l'> <a href="#"><img src="image/l4.jpg" alt="" /></a> </li> <li class='f_l'> <a href="#"><img src="image/l5.jpg" alt="" /></a> </li> <li class='f_l'> <a href="#"><img src="image/l6.jpg" alt="" /></a> </li> <li class='f_l'> <a href="#"><img src="image/l7.jpg" alt="" /></a> </li> <li class='f_l'> <a href="#"><img src="image/l8.jpg" alt="" /></a> </li> <li class='f_l'> <a href="#"><img src="image/l1.jpg" alt="" /></a> </li> </ul> <!-- 輪播圖的 索引 --> <ul class="banner_index clearfix"> <li class="current"></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul>
接下來(lái)是css樣式:
注意,此處并沒(méi)有加上常規(guī)的reset樣式代碼
.jd_banner .banner_imgs { /* 10倍屏幕寬度 */ width: 1000%; } .jd_banner .banner_imgs li { /* 一倍的屏幕寬度 */ width: 10%; } .jd_banner .banner_imgs li a { display: block; width: 100%; } .jd_banner .banner_imgs li a img { display: block; width: 100%; } .jd_banner .banner_index { position: absolute; bottom: 15px; left: 50%; margin-left: -64px; } .jd_banner .banner_index li { float: left; width: 6px; height: 6px; border: 1px solid white; border-radius: 50%; margin: 0 5px; } .jd_banner .banner_index li.current { background-color: #fff; }
最后是最最重要的js代碼啦
1. transitionend 過(guò)渡結(jié)束后觸發(fā)的效果,在這兒主要是保證圖片切換到最后一張我們手動(dòng)增加的圖片完成的瞬間,切換回到真正的第一張圖片處;
2. touch事件的三要素: touchstart--手指按上時(shí),touchmove--手指移動(dòng)時(shí),touchend--手指松開(kāi)屏幕時(shí);
3. event.touches[0].clientX獲取按下一個(gè)手指時(shí)的位置,可以打印出event查看其包含有哪些屬性方法;
window.onload = function() { slide(); } function slide() { var bannerImgs = document.querySelector(".banner_imgs"); var Indexs = document.querySelectorAll(".banner_index li"); var imgLis = document.querySelectorAll(".banner_imgs li"); //屏幕寬度 var screenWidth = document.body.offsetWidth; var index = 1; //默認(rèn)顯示的應(yīng)該是第二張圖片 bannerImgs.style.transform = "translateX(" + screenWidth * index * -1 + "px)"; //添加過(guò)渡效果 function setTransition() { bannerImgs.style.webkitTransition = "all .2s"; bannerImgs.style.transition = "all .2s"; } //清除過(guò)渡效果 function clearTransition() { bannerImgs.style.webkitTransition = "none"; bannerImgs.style.transition = "none"; } //設(shè)置移動(dòng)距離 function setTranslateX(distance) { bannerImgs.style.webkitTransform = "translateX(" + distance + "px)"; bannerImgs.style.transform = "translateX(" + distance + "px)"; } //控制小圓點(diǎn) function setPoint() { for (var i = 0; i < Indexs.length; i++) { Indexs[i].className = ""; } Indexs[index - 1].className = "current"; } //設(shè)置定時(shí)器 var timer = setInterval(function() { index++; setTransition(); setTranslateX(screenWidth * index * -1); }, 1000); //添加過(guò)渡動(dòng)畫(huà)結(jié)束事件 bannerImgs.addEventListener("transitionend", function() { if (index > 8) { index = 1; } else if (index < 1) { index = 8; } clearTransition(); setTranslateX(screenWidth * index * -1); setPoint(); }) //添加touch事件 var startX = 0; var moveX = 0; var isMove = false; bannerImgs.addEventListener("touchstart", function(event) { isMove = false; clearInterval(timer); startX = event.touches[0].clientX; }) bannerImgs.addEventListener("touchmove", function(event) { isMove = true; moveX = event.touches[0].clientX - startX; setTranslateX(moveX + index * screenWidth * -1); }) bannerImgs.addEventListener("touchend", function(event) { if(isMove && Math.abs(moveX) > screenWidth/3){ if (moveX < 0) { index++; } else if (moveX > 0) { index--; } } setTransition(); setTranslateX(index * screenWidth * -1); timer = setInterval(function() { index++; setTransition(); setTranslateX(screenWidth * index * -1); }, 1000); }) }
精彩專(zhuān)題分享:jQuery圖片輪播 JavaScript圖片輪播 Bootstrap圖片輪播
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js實(shí)現(xiàn)支持手機(jī)滑動(dòng)切換的輪播圖片效果實(shí)例
- js圖片輪播手動(dòng)切換效果
- vue.js+elementUI實(shí)現(xiàn)點(diǎn)擊左右箭頭切換頭像功能(類(lèi)似輪播圖效果)
- 原生js實(shí)現(xiàn)圖片層疊輪播切換效果
- javascript實(shí)現(xiàn)圖片自動(dòng)和可控的輪播切換特效
- Bootstrap 最常用的JS插件系列總結(jié)(圖片輪播、標(biāo)簽切換等)
- 原生JS實(shí)現(xiàn)圖片輪播切換效果
- js實(shí)現(xiàn)淡入淡出輪播切換功能
- javascript五圖輪播切換實(shí)用版
- js實(shí)現(xiàn)圖片輪播切換效果
相關(guān)文章
JS前端知識(shí)點(diǎn)offset,scroll,client,冒泡,事件對(duì)象的應(yīng)用整理總結(jié)
這篇文章主要介紹了JS前端知識(shí)點(diǎn)offset,scroll,client,冒泡,事件對(duì)象的應(yīng)用,結(jié)合實(shí)例形式總結(jié)分析了offset,scroll,client,冒泡,事件對(duì)象相關(guān)功能、原理及操作注意事項(xiàng),需要的朋友可以參考下2019-06-06簡(jiǎn)單談?wù)刯avascript高級(jí)特性
看過(guò)很多關(guān)于js高級(jí)特性介紹的文章,本文是個(gè)人感覺(jué)最通俗易懂的,這里分享給大家,希望大家能夠喜歡2019-09-09Object.keys() 和 Object.getOwnPropertyNames() 的區(qū)別詳解
這篇文章主要介紹了Object.keys() 和 Object.getOwnPropertyNames() 的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05uniapp使用uni-imei插件獲取手機(jī)的設(shè)備號(hào)
uniapp框架是一款開(kāi)發(fā)跨平臺(tái)應(yīng)用的工具,它支持iOS、Android以及Web等多個(gè)平臺(tái),在這些平臺(tái)中,uniapp可以訪(fǎng)問(wèn)某些設(shè)備的硬件信息,這篇文章主要給大家介紹了關(guān)于uniapp使用uni-imei插件獲取手機(jī)設(shè)備號(hào)的相關(guān)資料,需要的朋友可以參考下2024-01-01用javascript關(guān)閉本窗口技巧小結(jié)
window.close()是用來(lái)關(guān)閉窗口的,而且ie和firefox都是支持的,下面通過(guò)示例為大家介紹下用javascript關(guān)閉本窗口2014-09-09JS實(shí)現(xiàn)簡(jiǎn)單Tab欄切換案例
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)簡(jiǎn)單Tab欄切換案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03js阻止瀏覽器默認(rèn)行為觸發(fā)的通用方法(推薦)
下面小編就為大家?guī)?lái)一篇js阻止瀏覽器默認(rèn)行為觸發(fā)的通用方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05