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

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

JavaScript實現移動端帶transition動畫的輪播效果

瀏覽:158日期:2023-06-23 11:58:35

JavaScript實現輪播的方式多種多樣,桌面的移動端的實現方式都是大同小異的,具體的核心實現原理不外乎下面幾個要點。即:

1. 確定播放方向。一般都是橫向輪播,當然不排除縱向的需求可能。當然還有反向播放情況,這個自定義。2. 對第一張圖片的處理。如果當前是第一張了,那么如果繼續往前面(就是你播放方向的反向)滑動,那么就會出現留白(如果你允許繼續滑動的話,不過不允許滑動也沒有啥意思了,除非你想來回輪播,這個我在另一篇用jQuery也說明過),此時應該讓你的左邊顯示應該輪播圖片的最后一張,實現無縫連接。3. 對最后一張圖片的處理。跟第一張一樣,你需要在繼續滑動的時候顯示第一張圖片,實現無縫連接。4. 對標記跟隨原點的處理。這個需要對原點的排列方式和下標進行嚴謹的邏輯判斷。

我這里是在移動端的一個輪播效果,純JavaScript原生實現,應該說很接近工作實際了。請諸位爺上眼。

注意:如果您想實現跟我一樣的效果,請務必按我的樣式和架構來寫

HTML部分

<div id='box'> <ul id='lilist'> <li><img src='http://www.b3g6.com/bcjs/5.jpg' alt=''></li> <li><img src='http://www.b3g6.com/bcjs/1.jpg' alt=''></li> <li><img src='http://www.b3g6.com/bcjs/2.jpg' alt=''></li> <li><img src='http://www.b3g6.com/bcjs/3.jpg' alt=''></li> <li><img src='http://www.b3g6.com/bcjs/4.jpg' alt=''></li> <li><img src='http://www.b3g6.com/bcjs/5.jpg' alt=''></li> <li><img src='http://www.b3g6.com/bcjs/1.jpg' alt=''></li> </ul> <ul id='items'> <li class='active'></li> <li></li> <li></li> <li></li> <li></li> </ul></div>

CSS部分

*{ margin: 0;padding: 0; } html,body{ height: 100%;} #box{ width: 100%; overflow: hidden; position: relative; } #box #lilist{ /* 寬度根據子元素個數動態確定 */ /*width: 500%;*/ position: relative; float: left; white-space: nowrap; list-style: none; overflow: hidden; } #box #lilist li{ float: left; height: 200px; } #box #lilist li img{ display: block; width: 100%; height: 100%; object-fit: fill; } #box #items{ position: absolute; list-style: none; width: 30%; bottom: 10px; left: 35%; display: flex; flex-flow: row nowrap; justify-content: space-between; } #box #items li{ float: left; width: 10px; height: 10px; border-radius: 50%; background-color: black; } #box #items .active{ background-color: red; }

重點來啦,JavaScript原生代碼:

window.onload = function(){var totalli1 = document.querySelectorAll('#box>#lilist>li'); var totalli2 = document.querySelectorAll('#box>#items>li'); // 動態改變輪播圖寬度 changewidth(); function changewidth(){ var newstyle = document.createElement('style'); var mycss = '#lilist{ width : '+totalli1.length+'00% }'; mycss += '#lilist li{ width : '+(100/totalli1.length)+'% }' newstyle.innerHTML = mycss; document.head.appendChild(newstyle); } var getbox = document.getElementById('box'); var getlist = document.getElementById('lilist'); var startx = 0, endx = 0, disx = 0; var listleft = 0, finalx = 0; var windowx = document.documentElement.offsetWidth; var listx = getlist.offsetWidth; var moveindex = 0; // 自動輪播控制變量 var num = 1, index = 0; // 先讓他左滑 transforms(getlist,'translateX',-windowx); getbox.addEventListener('touchstart',function(event){ let touch = event.changedTouches[0]; startx = touch.clientX; // 首位位置判斷,并重新定位.鼠標剛放上去就要改變位置,不然move移動再改的話會和移動的transform沖突,也不能在鼠標離開時切換,會影響到移動的滑動效果。這個過程中是瞬間完成的,不允許過渡或動畫,顯得平滑。 let lastx = Math.round(-transforms(getlist,'translateX')/windowx); if(lastx<1){ lastx = totalli1.length-2; }else if(lastx>totalli1.length-2){ lastx = 1; } // 移動到指定位置 transforms(getlist,'translateX',-lastx*windowx); // 給 listleft 賦值 listleft = transforms(getlist,'translateX'); // 清除過度緩沖 getlist.style.transition = 'none'; // 清除計時器 window.clearInterval(timer); }) getbox.addEventListener('touchmove',function(event){ let touch = event.changedTouches[0]; endx = touch.clientX; disx = endx - startx; finalx = disx+listleft; transforms(getlist,'translateX',finalx) }) getbox.addEventListener('touchend',function(event){ let touch = event.changedTouches[0]; // 滑動的屏寬個數。 let lastx = 0; // ul 距屏幕左側的距離與屏寬的比例 lastx = Math.round(-transforms(getlist,'translateX')/windowx); if(lastx<=0){ lastx = 0; }else if(lastx>totalli1.length-1){ lastx = totalli1.length-1; } transforms(getlist,'translateX',-lastx*windowx); getlist.style.transition = 'transform 0.3s'; // 下部紅點跟隨,獲取下標。諸位請注意下面幾個數字的含義,4,5,6的意思你們自己思考一下 moveindex = lastx-1; if(lastx==1||lastx==6){ moveindex = 0; }else if(lastx==0||lastx==5){ moveindex = 4; } movecircle(moveindex); // 重新添加計時器,自動輪播 timer = window.setInterval(playself,3000); // 改變num和index的值,以確定計時器開始位置 console.log(moveindex+'。。。'+lastx) index = moveindex; num = lastx; }) // 自動輪播 var timer = window.setInterval(playself,3000); function playself(){ // 清除過渡殘留 getlist.style.transition = 'none'; if(num==totalli1.length-1){ transforms(getlist,'translateX',-windowx); num = 1; } // 再添加一個一次性計時器即可分開與 interval 的沖突 setTimeout(function(){ transforms(getlist,'translateX',-windowx*(++num)); getlist.style.transition = 'transform 0.5s'; // 原點跟隨移動 index++; if(index==totalli2.length){ index = 0; totalli2[index].classList.add('active'); } movecircle(index); },1) } // 紅點移動函數 function movecircle(getindex){ for(let i=0;i<totalli2.length;i++){ totalli2[i].classList.remove('active'); if(getindex==i){ totalli2[getindex].classList.add('active'); } } }}

代碼還有一些算法部分的瑕疵,本人愚鈍,目前只能想到這種方式了,有些變量可能會占用太多內存,希望各位僅作參考,如有大神指出問題所在,萬分感謝。最后,誠心感謝有緣人的觀看!祝你生活愉快,工作順利!

總結

到此這篇關于JavaScript實現移動端帶transition動畫的輪播效果的文章就介紹到這了,更多相關js transition 輪播內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
99精品一区| 日韩伦理福利| 天堂av在线| 国产高清日韩| 欧美激情日韩| 99精品视频在线| 欧美日韩国产欧| 亚洲精品国模| 92国产精品| 久久亚洲精品中文字幕蜜潮电影| 视频一区中文字幕国产| 免费视频一区二区三区在线观看 | 国产一区二区三区视频在线| 好吊日精品视频 | 国产精品巨作av| 午夜精品一区二区三区国产| 日韩大片免费观看| 91精品99| 免费一级欧美片在线观看网站| 蜜桃成人av| 免费在线观看一区| 亚洲欧美日本视频在线观看| 日韩在线黄色| 伊人久久亚洲美女图片| 国产精品久久久久av蜜臀 | 国产 日韩 欧美 综合 一区| 香蕉成人av| 国产精品亚洲欧美| 日韩不卡一区二区三区| 久久免费精品| 久久国产三级精品| 蜜臀va亚洲va欧美va天堂| 日韩电影二区| 99国产精品久久久久久久| 日产精品一区| 韩日一区二区| 国产精品久久久久久久久久齐齐| 红桃视频国产一区| 国产精品亚洲产品| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲一级网站| 久久精品国产网站| 国产日本久久| 久久久久国产| 黄色网一区二区| 国产精品tv| 国产精一区二区| 久久香蕉国产| 视频小说一区二区| 精品国产鲁一鲁****| 亚洲免费观看高清完整版在线观| 日韩精品网站| 国产精品三级| 久久国产精品99国产| 欧美三级精品| 国产精品s色| 99视频精品免费观看| 国产亚洲一区二区手机在线观看| 精品久久久久中文字幕小说| 欧美一区二区三区久久| 欧美久久一区二区三区| 欧美在线首页| 青草国产精品久久久久久| 日本不卡中文字幕| 国产欧美精品| 欧美黑人巨大videos精品| 国产福利亚洲| 国模大尺度视频一区二区| 日日摸夜夜添夜夜添国产精品| 在线视频日韩| 1000部精品久久久久久久久| 欧美亚洲激情| 亚洲91久久| 久久久精品国产**网站| 精品日韩在线| 免费污视频在线一区| 精品国产中文字幕第一页| 欧美成a人片免费观看久久五月天| 久久亚洲一区| 国产欧美日韩视频在线| 成人污污视频| 美女久久久久| 日韩av一二三| 精品国产欧美日韩一区二区三区| 国产a久久精品一区二区三区| 日韩88av| 激情久久久久久| 成人羞羞视频播放网站| 在线一区欧美| 91亚洲无吗| 国产成人久久精品一区二区三区| 97人人精品| 国产毛片久久| 国产精品va| 在线一区二区三区视频| 日韩高清一级| 欧美日韩一区二区三区在线电影| 国产视频欧美| 久久激情综合网| 亚洲精品国产嫩草在线观看 | 亚洲欧美日韩国产| 欧美激情麻豆| 精品在线99| 日韩精品91亚洲二区在线观看| 91p九色成人| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 日韩在线看片| 欧美午夜不卡| 久久国产欧美日韩精品| 肉色欧美久久久久久久免费看| 国产精品超碰| 久久中文字幕av一区二区不卡| 99在线精品免费视频九九视| 久久国产尿小便嘘嘘| 日韩精品欧美| 国模 一区 二区 三区| 老司机久久99久久精品播放免费| 久久国产精品色av免费看| 欧美国产美女| 日韩在线短视频| 日精品一区二区三区| 免费在线小视频| 91成人在线网站| 亚洲免费福利| 国产精品99免费看| 日韩高清中文字幕一区| 亚洲欧洲美洲av| 日韩av一二三| 国产剧情一区| 欧美+日本+国产+在线a∨观看| 国产精品久久久网站| 99香蕉国产精品偷在线观看| 亚洲欧美日韩国产一区二区| 久久亚洲欧美| 亚洲成人国产| 久久福利在线| 日韩中文字幕无砖| 国产精品久久久久蜜臀| 日本成人在线视频网站| 91精品婷婷色在线观看| 免费精品视频最新在线| 国产成人精品亚洲线观看| 欧美亚洲国产精品久久| 国产成人精品一区二区三区免费| 久久福利一区| 天堂av在线| 欧美亚洲国产精品久久| 日本v片在线高清不卡在线观看| 91精品啪在线观看国产18| 美女毛片一区二区三区四区最新中文字幕亚洲| 在线 亚洲欧美在线综合一区| 成人在线丰满少妇av| 亚洲免费成人| 亚洲视频综合| а√天堂8资源在线| 六月天综合网| 国产精品久久国产愉拍| 日韩不卡视频在线观看| 国产精品久久久久久久久久妞妞 | 精品欧美久久| 91精品国产自产精品男人的天堂| 日韩不卡视频在线观看| 久久亚洲欧洲| 成人免费一区| 日韩一区二区三区四区五区| 91看片一区| 国产精品一国产精品| 亚洲专区欧美专区| 国产va免费精品观看精品视频| 少妇精品久久久一区二区| 国产91精品对白在线播放| 欧美激情久久久久久久久久久| 日韩综合精品| 国产精品xxx在线观看| 免费亚洲婷婷| 日韩毛片在线| 久久亚洲国产| 欧美亚洲专区| 久久久久99| 国产乱子精品一区二区在线观看| 999久久久精品国产| 麻豆精品一区二区综合av| 亚洲色图国产| 久久九九精品| 国产夫妻在线| 国产伦精品一区二区三区在线播放| 精品一区欧美| se01亚洲视频| 国产精品yjizz视频网| 国产乱码精品一区二区亚洲| 一区二区三区四区日韩| 亚洲精品国产嫩草在线观看| 国产精品一区二区三区av| 欧美日韩一二三四| 成人一区不卡| 精品一区二区三区亚洲| 国产精品亚洲成在人线| 日韩欧美中文字幕在线视频| 9色精品在线| 91成人超碰|