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

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

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

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

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

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

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

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

HTML部分

<div id='box'> <ul id='lilist'> <li><img src='http://m.b3g6.com/bcjs/5.jpg' alt=''></li> <li><img src='http://m.b3g6.com/bcjs/1.jpg' alt=''></li> <li><img src='http://m.b3g6.com/bcjs/2.jpg' alt=''></li> <li><img src='http://m.b3g6.com/bcjs/3.jpg' alt=''></li> <li><img src='http://m.b3g6.com/bcjs/4.jpg' alt=''></li> <li><img src='http://m.b3g6.com/bcjs/5.jpg' alt=''></li> <li><img src='http://m.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久久,三上悠亚国产精品一区二区三区
玖玖精品视频| 国产欧美日韩一区二区三区在线| 国产一区国产二区国产三区| 成人在线视频中文字幕| 欧美freesex黑人又粗又大| 久久久久国产精品一区二区| 99国产精品99久久久久久粉嫩| 亚州国产精品| 国际精品欧美精品| 亚洲91视频| 亚洲精品在线二区| 精品香蕉视频| 国产99久久| 亚洲精品动态| 精品一区视频| 免费观看久久av| 亚洲香蕉视频| 久久影视三级福利片| 国产中文一区| 日韩激情精品| 成人av三级| 少妇精品久久久一区二区| 97精品国产| 亚洲一区有码| 不卡福利视频| 欧美影院视频| 欧美va天堂在线| 国产高清精品二区| 亚洲欧美日韩在线观看a三区| 国产精品亚洲综合久久| 99免费精品| 国产 日韩 欧美 综合 一区| 奇米亚洲欧美| 成人在线丰满少妇av| 尤物在线精品| 亚洲精选成人| 欧美亚洲三区| 色婷婷亚洲mv天堂mv在影片| 国产综合亚洲精品一区二| 亚洲香蕉视频| 日韩成人精品一区| 午夜一级在线看亚洲| 国产私拍福利精品视频二区| 日本高清不卡一区二区三区视频| 蜜桃久久久久久久| 久久精品国产久精国产| 日韩欧美午夜| 国产精品自拍区| 尹人成人综合网| 国产999精品在线观看| 日韩高清成人在线| 久久成人国产| 久久精品影视| 日本久久黄色| 国产精品66| 综合欧美精品| 91久久亚洲| 日韩av一级| 久久av超碰| 91精品国产自产在线丝袜啪| 视频一区视频二区中文| 日韩国产一区| 精品久久影院| 国产精品久久久免费| 四虎成人精品一区二区免费网站| 欧美在线亚洲| 日韩高清欧美| 伊人久久av| 色网在线免费观看| 精品国产一级| 欧美激情aⅴ一区二区三区 | 国产精品丝袜xxxxxxx| 日韩免费小视频| 国产成人免费| 国产精品一区免费在线| 91精品一区| 欧美一区不卡| 日韩精品视频在线看| 综合在线一区| 亚洲精品美女91| 在线一区二区三区视频| 亚洲综合婷婷| 亚洲精品视频一二三区| 综合在线一区| 日韩黄色免费网站| 日本在线视频一区二区| 亚洲精品免费观看| 五月亚洲婷婷 | 成人亚洲精品| 国产成人久久精品一区二区三区| 久久久久亚洲精品中文字幕| 麻豆精品久久| 麻豆精品少妇| 精品欧美日韩精品| 国产h片在线观看| 精品国产精品国产偷麻豆 | 国产盗摄——sm在线视频| 久久精品一本| 韩国女主播一区二区三区| 国产一区二区三区日韩精品| 精品国产精品国产偷麻豆| 国产精品精品国产一区二区| 91免费精品| 日韩av免费| 最新日韩欧美| 三级久久三级久久久| 日韩av一区二区在线影视| 91精品国产一区二区在线观看| 国产精品欧美在线观看| 久久精品国产在热久久| 成人一区不卡| 91精品一区国产高清在线gif | 日韩午夜av| 视频一区视频二区在线观看| 日韩有吗在线观看| 国产欧美69| 国产成人精品一区二区三区视频 | 亚洲男女av一区二区| 一区在线视频观看| 蜜桃传媒麻豆第一区在线观看| 亚洲三级毛片| 国产日韩欧美一区二区三区在线观看| 国产精品亚洲综合色区韩国| 91亚洲人成网污www| 五月婷婷亚洲| 色狠狠一区二区三区| 国产精品theporn| 免费观看亚洲| 天堂成人国产精品一区| 国产探花在线精品一区二区| 中文字幕高清在线播放| 狠狠久久婷婷| 青草综合视频| 日韩一区二区在线免费| 亚洲视频www| 欧美视频精品全部免费观看| 高清精品久久| 一本色道久久精品| 国产日韩欧美三区| 久久美女性网| 日韩综合小视频| 成人精品国产亚洲| 亚洲一区二区成人| 国产精品15p| 日产精品一区| 婷婷精品在线观看| 首页国产精品| 蜜臀精品一区二区三区在线观看 | 日韩av成人高清| 黄在线观看免费网站ktv| 国产精品日韩| 久久精品国产99| 国产亚洲午夜| 精品一区二区三区亚洲| 91久久久久| 国产一区调教| 蜜臀av一区二区在线免费观看 | 美女高潮久久久| 一区在线免费| 成人一二三区| 日韩精品免费一区二区夜夜嗨| 天堂中文av在线资源库| 日韩av中文字幕一区二区三区| 91精品啪在线观看国产18 | 日韩av电影一区| 久久久久午夜电影| 国产精品久久久久毛片大屁完整版| 精品亚洲美女网站| 亚洲区欧美区| se01亚洲视频| 国产精品一级| 蜜臀精品一区二区三区在线观看| 国产999精品在线观看| 亚州国产精品| 黄色不卡一区| 国产一区二区三区不卡视频网站 | 欧美三级网址| 国产精品手机在线播放| 国产精品嫩草99av在线| а√在线中文在线新版| 日本不卡中文字幕| 欧美日韩精品一本二本三本 | 深夜福利一区| 蜜臀91精品国产高清在线观看| 精品视频97| 青青青国产精品| 最新日韩欧美| 99视频精品全国免费| 精品视频在线观看网站| 欧美亚洲二区| 亚洲毛片在线| 男女精品网站| 欧美影院三区| 日韩成人a**站| 久久99影视| 91精品日本| 亚洲精品第一| 免费的成人av| 免费久久99精品国产自在现线| 久久激情中文|