完美實(shí)現(xiàn)js焦點(diǎn)輪播效果(二)(圖片可滾動(dòng))
本文在前一篇js焦點(diǎn)輪播效果的基礎(chǔ)上,使用函數(shù)遞歸實(shí)現(xiàn)圖片滑動(dòng)切換,采用輔助圖片實(shí)現(xiàn)圖片無限滾動(dòng)等技巧,具體內(nèi)容如下
假如前后不加一張圖片的話,圖片順序?yàn)閇1,2,3,4,5],當(dāng)你點(diǎn)到第 5 張圖時(shí),再點(diǎn)“下一張”(就是要回到第 1 張圖那里),這時(shí)候,你想象下那個(gè)畫面,會一瞬間“刷刷刷”地閃過中間那幾張圖片才能到第 1 張圖那里,這樣,太難看了吧。
為了解決這個(gè)問題,所以要在第 5 張那里加多一張 1 圖,圖片順序?yàn)?[1,2,3,4,5,1]。當(dāng)你在第 5 張圖點(diǎn)下一張時(shí),圖片滾動(dòng)順序是這樣的:5 ----> (1) ----> 1,(注:中間的那個(gè) 1 是指后面多加的 1 圖),一旦到了那個(gè)“多加的 1 圖”,輪播就會瞬間回到 前面的 1 圖那里。
因?yàn)槎际恰? 圖”,所以視覺上不會有那個(gè)一次“刷刷刷”閃過好幾張圖片的效果。
效果如圖:
實(shí)現(xiàn)代碼:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{ margin: 0; padding: 0; list-style: none; text-decoration: none; } .wrap{ width: 490px; height: 170px; margin: 100px auto; border: 1px solid #000000; position: relative; overflow: hidden; } #pic{ width: 3430px; position: absolute; } #pic li{ float: left; height: 170px; } #list{ position: absolute; bottom: 10px; left:150px ; } #list li{ float: left; width: 15px; height: 15px; background: #fff; margin: 0 10px; border-radius: 50%; cursor: pointer; } #list .on{ background: #e27a00; } .Prev{ top: 30px; left: 0; } .Next{ top: 30px; right: 0; } .Prev,.Next{ position: absolute; font-size: 80px; font-weight: bold; color:#fff ; -webkit-transition: all 0.35s ease-in-out } .Next:hover, .Prev:hover{ background: #ccc; background: rgba(204, 204, 204, 0.4); } </style> <script type="text/javascript"> window.onload=function(){ var wrap=document.getElementById('wrap'); var pic=document.getElementById('pic'); var Li=document.getElementById('list').getElementsByTagName('li'); var prev=document.getElementById('Prev'); var next=document.getElementById('Next'); var animated=false; var index=0; var timer=null; next.onclick=function(){ if(animated){//如果圖片正在滾動(dòng)時(shí)要返回,否則index會變化 return; } else{ index++; if(index>=Li.length){ index=0; } } showlist(); if(animated == false){//if(!animated) animate(-490); } } prev.onclick=function(){ if(animated){ return; } else{ index--; if(index<=0){ index=Li.length-1; } } showlist(); if(!animated){//判斷其是否滾動(dòng)完 animate(490); } } for(var i=0;i<Li.length;i++){ Li[i].num=i; Li[i].onclick=function(){ if(this.className=="on"){ return; } var offset = -490*(this.num-index); if(!animated){ animate(offset); } index=this.num; showlist(); } } //圖片變換 function animate(offset){ animated=true; var newLeft=parseInt(pic.style.left) + offset; var time=300//位移總時(shí)間 var interval=10;//位移間隔時(shí)間 var speed=offset/(time/interval);//每次位移量 function go(){ if((speed < 0 && parseInt(pic.style.left) > newLeft )|| (speed > 0 && parseInt(pic.style.left) < newLeft)){ pic.style.left = parseInt(pic.style.left) + speed + 'px'; setTimeout(go,interval); }else{ animated=false; pic.style.left= newLeft + 'px'; if(newLeft > -490){ pic.style.left = -2450 + 'px'; } if(newLeft < -2450){ pic.style.left = -490 + 'px'; } } } go(); } //圓點(diǎn)變換 function showlist(){ for(var i=0;i<Li.length;i++){ Li[i].className=""; } Li[index].className="on"; } //自動(dòng)播放 function play(){ timer=setInterval(function(){ next.onclick(); },2000); } function stop(){ clearInterval(timer); } wrap.onmouseover=stop; wrap.onmouseout=play; play(); } </script> </head> <body> <div class="wrap" id="wrap"> <ul id="pic" style="left: -490px;"> <li><a href="#"><img src="/54111d7d00018ba604900170.jpg" alt="5"/></a></li> <li><a href="#"><img src="/54111cd9000174cd04900170.jpg" alt="1"/></a></li> <li><a href="#"><img src="/54111dac000118af04900170.jpg" alt="2"/></a></li> <li><a href="#"><img src="/54111d9c0001998204900170.jpg" alt="3"/></a></li> <li><a href="#"><img src="/54111d8a0001f41704900170.jpg" alt="4"/></a></li> <li><a href="#"><img src="/54111d7d00018ba604900170.jpg" alt="5"/></a></li> <li><a href="#"><img src="/54111cd9000174cd04900170.jpg" alt="1"/></a></li> </ul> <ul id="list"> <li class="on"></li> <li></li> <li></li> <li></li> <li></li> </ul> <a href="javascript:;" class="Prev" id="Prev"><</a> <a href="javascript:;" class="Next" id="Next">></a> </div> </body> </html>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 原生Js 實(shí)現(xiàn)的簡單無縫滾動(dòng)輪播圖的示例代碼
- 如何使用JavaScript實(shí)現(xiàn)無縫滾動(dòng)自動(dòng)播放輪播圖效果
- JavaScript基于面向?qū)ο髮?shí)現(xiàn)的無縫滾動(dòng)輪播示例
- javascript實(shí)現(xiàn)異形滾動(dòng)輪播
- JS實(shí)現(xiàn)排行榜文字向上滾動(dòng)輪播效果
- js輪播圖無縫滾動(dòng)效果
- JavaScript 輪播圖和自定義滾動(dòng)條配合鼠標(biāo)滾輪分享代碼貼
- JS簡單的輪播的圖片滾動(dòng)實(shí)例
- 原生js實(shí)現(xiàn)輪播圖的示例代碼
- JavaScript滾動(dòng)輪播圖制作原理詳解
相關(guān)文章
JavaScript查看代碼運(yùn)行效率console.time()與console.timeEnd()用法
今天小編就為大家分享一篇關(guān)于JavaScript查看代碼運(yùn)行效率console.time()與console.timeEnd()用法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01JS實(shí)現(xiàn)動(dòng)態(tài)星空背景效果
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)動(dòng)態(tài)星空背景效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11超出JavaScript安全整數(shù)限制的數(shù)字計(jì)算BigInt詳解
這篇文章給大家分享了超出JavaScript安全整數(shù)限制的數(shù)字計(jì)算BigInt的相關(guān)知識點(diǎn),有興趣的朋友參考學(xué)習(xí)下。2018-06-06用JavaScript實(shí)現(xiàn)簡單網(wǎng)頁時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了用JavaScript實(shí)現(xiàn)簡單網(wǎng)頁時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08javascript實(shí)現(xiàn)一款好看的秒表計(jì)時(shí)器
這篇文章主要為大家詳細(xì)介紹了一款好看的秒表計(jì)時(shí)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09JavaScript復(fù)制變量三種方法實(shí)例詳解
這篇文章主要介紹了JavaScript復(fù)制變量三種方法實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01IE6/7中g(shù)etAttribute獲取href/src 屬性(相對路徑0值與其它瀏覽器不同
IE6/7中g(shù)etAttribute獲取href/src 屬性(相對路徑0值與其它瀏覽器不同的解決方法2011-08-08JavaScript之Date_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
在JavaScript中,Date對象用來表示日期和時(shí)間。下面給大家介紹js中的date,需要的朋友參考下吧2017-06-06