完美實(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è)畫面,會(huì)一瞬間“刷刷刷”地閃過中間那幾張圖片才能到第 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 圖”,輪播就會(huì)瞬間回到 前面的 1 圖那里。
因?yàn)槎际恰? 圖”,所以視覺上不會(huì)有那個(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會(huì)變化
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)容,希望對(duì)大家的學(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 緩沖效果 實(shí)現(xiàn)代碼
非常漂亮的緩沖效果代碼,大家可以看看下。2009-06-06
微信小程序?qū)崿F(xiàn)密碼顯示與隱藏的睜眼閉眼功能
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)密碼顯示與隱藏的睜眼閉眼功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-02-02
微信小程序使用wx.request請(qǐng)求服務(wù)器json數(shù)據(jù)并渲染到頁面操作示例
這篇文章主要介紹了微信小程序使用wx.request請(qǐng)求服務(wù)器json數(shù)據(jù)并渲染到頁面操作,結(jié)合實(shí)例形式分析了微信小程序使用wx.request發(fā)送網(wǎng)絡(luò)請(qǐng)求及返回結(jié)果渲染到wxml界面相關(guān)操作技巧,需要的朋友可以參考下2019-03-03
JS實(shí)現(xiàn)運(yùn)動(dòng)緩沖效果的封裝函數(shù)示例
這篇文章主要介紹了JS實(shí)現(xiàn)運(yùn)動(dòng)緩沖效果的封裝函數(shù),涉及JavaScript時(shí)間函數(shù)與數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
JavaScript Set與Map數(shù)據(jù)結(jié)構(gòu)詳細(xì)分析
大家心里是否產(chǎn)生過這樣的疑問,JS中既然已經(jīng)有對(duì)象這種數(shù)據(jù)結(jié)構(gòu),我們?yōu)槭裁催€要再單獨(dú)去使用Set或者M(jìn)ap呢?下面這篇文章主要給大家介紹了關(guān)于ES6中Set和Map數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下2022-11-11
javascript幀動(dòng)畫(實(shí)例講解)
下面小編就為大家?guī)硪黄猨avascript幀動(dòng)畫(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09

