最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript輪播圖算法

 更新時間:2016年10月21日 10:31:28   作者:測試貓  
這篇文章主要為大家詳細介紹了javascript輪播圖算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

輪播圖,是網(wǎng)站首頁中常見的一種圖片切換特效,作為前端開發(fā)者,我相信很多開發(fā)者都直接調(diào)用了Jquery中的封裝好的方法實現(xiàn)圖片輪播,省事簡單。所以我想介紹一下javascript純代碼實現(xiàn)的圖片輪播。

HTML

<div id="content_img1">
<ul id="img1">
<li><img src="img/5.jpg"/></li>
<li><img src="img/1.jpg"/></li>
<li><img src="img/2.jpg"/></li>
<li><img src="img/3.jpg"/></li>
<li><img src="img/4.jpg"/></li>
<li><img src="img/5.jpg"/></li>
<li><img src="img/1.jpg"/></li>
</ul>
<span class="mouseover" style="margin-left: 300px;">1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
</div>
<div id="content_img2">
<ul id="img2">
<li><img src="img/5.jpg"/></li>
<li><img src="img/1.jpg"/></li>
<li><img src="img/2.jpg"/></li>
<li><img src="img/3.jpg"/></li>
<li><img src="img/4.jpg"/></li>
<li><img src="img/5.jpg"/></li>
<li><img src="img/1.jpg"/></li>
</ul>
<span class="mouseover" style="margin-left: 300px;">1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
</div>

這里我相信最多疑惑的是,明明五張圖片為何要在首尾加兩張圖片(li)做首尾呼應(yīng)呢?原因如下圖:

這里以向左滾動的例子為說明


一開始布局的時候left: -470px;先處于第2個li也就是第2張圖,當(dāng)我們圖片陸續(xù)向左滾動到第7張圖片的時候,迅速扯回到第2張圖,然后還是繼續(xù)向左滾動。這樣看起來就像是假象式的無限向左滾動循環(huán),其實它里面只有7張圖組成。同樣的,如果實現(xiàn)向右滾動,我們一開始布局的時候,先處于第1個li也就是第1張圖,當(dāng)我們圖片陸續(xù)向右滾動到第6張圖片的時候,迅速扯回到第1張圖,然后還是繼續(xù)向右滾動。其實上下滾動輪播圖道理是一樣的,只不過少了一個float:left屬性,讓li垂直排列。

CSS

*{
margin: 0;
padding: 0;
list-style: none;
}
span{
width: 20px;
height: 20px;
display: block;
background-color: blanchedalmond;
border: 1px solid black;
float: left;
text-align: center;
line-height: 20px;
z-index: 1;
cursor: pointer;
margin: 120px 8px 0 0;
}
span.mouseover{
background-color: orange;
}
#content_img1{
position: relative;
width: 470px;
height: 150px;
border: 2px black solid;
margin: 30px auto;
overflow: hidden;
}
#img1{
position: absolute;
top: 0px;
left: -470px;
z-index: -1;
width: 700%;
height: 150px;
}
#img1>li{
width: 470px;
height: 150px;
float: left;
}
#content_img2{
position: relative;
width: 470px;
height: 150px;
border: 2px black solid;
margin: 30px auto;
overflow: hidden;
}
#img2{
position: absolute;
top: -150px;
left: 0px;
z-index: -1;
width: 470px;
height: 700%;
}
#img2>li{
width: 470px;
height: 150px;
}

javascript函數(shù)方法

window.onload=function(){
var cont_img1=document.getElementById("content_img1");
var spannum1=cont_img1.getElementsByTagName("span");
var img1=document.getElementById("img1");
var cont_img2=document.getElementById("content_img2");
var spannum2=cont_img2.getElementsByTagName("span");
var img2=document.getElementById("img2");

   //向左輪播圖的span"按鈕"鼠標(biāo)經(jīng)過事件

   for(var i=0;i<spannum1.length;i++){
spannum1[i].index=i;
spannum1[i].onmouseover=function(){
for(var p=0;p<spannum1.length;p++){
if(spannum1[p]==this){
spannum1[p].className="mouseover";
}else{
spannum1[p].className="";
}
}
clearTimeout(img1.timer1);
now=this.index;
scrollimg1(img1,spannum1);
 }
}

   //向左輪播的主函數(shù)調(diào)用
scrollimg1(img1,spannum1);

   //向上輪播圖的span"按鈕"鼠標(biāo)經(jīng)過事件

for(var i=0;i<spannum2.length;i++){
spannum2[i].index=i;
spannum2[i].onmouseover=function(){
for(var p=0;p<spannum2.length;p++){
if(spannum2[p]==this){
spannum2[p].className="mouseover";
}else{
spannum2[p].className="";
}
}
clearTimeout(img2.timer1);
nows=this.index;
scrollimg2(img2,spannum2);
 }
}

    //向上輪播的主函數(shù)調(diào)用
scrollimg2(img2,spannum2);

}

   var now=1;
 function scrollimg1(obj,spannum1){
 if(obj.offsetLeft<=-(obj.children.length-1)*obj.children[0].offsetWidth){//達到極限的計算位置,既是最后一個圖就馬上扯回初始位置
 now=0;
 obj.style.left=-(++now)*obj.children[0].offsetWidth+"px";
 }else{
 Move(obj,-obj.children[0].offsetWidth*(++now),"left",5,30);//否則圖片進行向左運動的緩沖動畫
 }
 for(var i=0;i<spannum1.length;i++){
 
spannum1[i].className="";
 }
 spannum1[(now-1)%spannum1.length].className="mouseover";
 obj.timer1=setTimeout(function(){//每3秒鐘進行函數(shù)的回調(diào),實現(xiàn)無限循環(huán)的圖片輪播
 
scrollimg1(obj,spannum1);
 },3000);
 }
 
 var nows=1;
 function scrollimg2(obj,spannum2){
 if(obj.offsetTop<=-(obj.children.length-1)*obj.children[0].offsetHeight){//達到極限的計算位置,既是最后一個圖就馬上扯回初始位置
 nows=0;
 obj.style.top=-(++nows)*obj.children[0].offsetHeight+"px";
 }else{
 Move(obj,-obj.children[0].offsetHeight*(++nows),"top",5,30);//否則圖片進行向左運動的緩沖動畫
 }
 for(var i=0;i<spannum2.length;i++){
 
spannum2[i].className="";
 }
 spannum2[(nows-1)%spannum2.length].className="mouseover";
 obj.timer1=setTimeout(function(){//每3秒鐘進行函數(shù)的回調(diào),實現(xiàn)無限循環(huán)的圖片輪播
 
scrollimg2(obj,spannum2);
 },3000);
 }



function Move(obj,target,stylename,average,cycle,continuefunction){參數(shù)類型:(對象,目標(biāo)值,改變的樣式屬性,緩沖系數(shù)(速度與大小成反比),周期時間(速度與大小成反比),回調(diào)函數(shù)(可有可無))
 clearInterval(obj.timer);
 obj.timer=setInterval(function(){
if(stylename=="opacity"){
var offvalue=Math.round(parseFloat(getStyle(obj,stylename))*100);
var speed=(target-offvalue)/average;
 speed=speed>0?Math.ceil(speed):Math.floor(speed);
 if(speed==0){
clearInterval(obj.timer);
if(continuefunction) continuefunction();
 }else{
obj.style[stylename]=(offvalue+speed)/100;
obj.style.filter="alpha(opacity:"+(offvalue+speed)+")";
 }
}else{
var offvalue=parseInt(getStyle(obj,stylename));
var speed=(target-offvalue)/average;
 speed=speed>0?Math.ceil(speed):Math.floor(speed);
 if(speed==0){
clearInterval(obj.timer);
if(continuefunction) continuefunction();
 }else{
obj.style[stylename]=offvalue+speed+"px";
 }
}
},cycle);
}
function getStyle(obj,stylename){//對象樣式屬性大小獲取函數(shù)
if(obj.currentStyle){
return obj.currentStyle[stylename];
}else if(getComputedStyle(obj,false)){
return getComputedStyle(obj,false)[stylename];
}
}

這種通過計算位置輪播算法的好處是,可以在我的樣式范圍內(nèi),在HTML的<ul id="img"></ul>內(nèi)無限添加li里的圖片,但是要記得要在首尾加前后呼應(yīng)的li圖片,并且根據(jù)圖片大小來更改樣式,就能實現(xiàn)圖片輪播。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JS+CSS實現(xiàn)炫酷光感效果

    JS+CSS實現(xiàn)炫酷光感效果

    這篇文章主要為大家詳細介紹了JS+CSS實現(xiàn)炫酷光感效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • JS利用window.print()實現(xiàn)網(wǎng)頁打印功能

    JS利用window.print()實現(xiàn)網(wǎng)頁打印功能

    print作為瀏覽已經(jīng)比較成熟的技術(shù)可以經(jīng)常被用來打印頁面的部分內(nèi)容。本文將在JS中調(diào)用window.print()方法實現(xiàn)網(wǎng)頁打印功能,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-04-04
  • webpack5搭建一個簡易的react腳手架項目實踐

    webpack5搭建一個簡易的react腳手架項目實踐

    本文文章主要介紹了webpack5搭建一個簡易的react腳手架項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 關(guān)于promise.all()的使用及說明

    關(guān)于promise.all()的使用及說明

    這篇文章主要介紹了關(guān)于promise.all()的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • js實現(xiàn)把圖片的絕對路徑轉(zhuǎn)為base64字符串、blob對象再上傳

    js實現(xiàn)把圖片的絕對路徑轉(zhuǎn)為base64字符串、blob對象再上傳

    本文主要介紹了JavaScript把項目本地的圖片或者圖片的絕對路徑轉(zhuǎn)為base64字符串、blob對象再上傳的方法,具有一定的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • 超詳細JavaScript深淺拷貝的實現(xiàn)教程

    超詳細JavaScript深淺拷貝的實現(xiàn)教程

    淺拷貝是指,一個新的對象對原始對象的屬性值進行精確地拷貝;深拷貝是指,對于簡單數(shù)據(jù)類型直接拷貝他的值,對于引用數(shù)據(jù)類型,在堆內(nèi)存中開辟一塊內(nèi)存用于存放復(fù)制的對象,并把原有的對象類型數(shù)據(jù)拷貝過來。本文將實現(xiàn)JavaScript深淺拷貝,需要的可以參考一下
    2022-09-09
  • js實現(xiàn)多個倒計時并行 js拼團倒計時

    js實現(xiàn)多個倒計時并行 js拼團倒計時

    這篇文章主要為大家詳細介紹了js實現(xiàn)多個倒計時并行功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • JavaScript設(shè)計模式之單體模式全面解析

    JavaScript設(shè)計模式之單體模式全面解析

    單體模式可以說是javascript中最基本也是最有用的模式之一,接下來通過本文給大家解析js設(shè)計模式之單體模式,非常不錯,感興趣的朋友一起看看吧
    2016-09-09
  • echarts tooltip自適應(yīng)寬高讓提示框適應(yīng)不同屏幕尺寸demo

    echarts tooltip自適應(yīng)寬高讓提示框適應(yīng)不同屏幕尺寸demo

    這篇文章主要為大家介紹了echarts tooltip自適應(yīng)寬高讓提示框適應(yīng)不同屏幕尺寸,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • JS實現(xiàn)判斷對象是否為空對象的5種方法

    JS實現(xiàn)判斷對象是否為空對象的5種方法

    這篇文章主要介紹了JS實現(xiàn)判斷對象是否為空對象的5種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評論

德安县| 阿图什市| 福清市| 佳木斯市| 花垣县| 临泽县| 太白县| 雷波县| 伊川县| 谷城县| 灵璧县| 镇赉县| 凤山市| 德庆县| 四子王旗| 枣强县| 资中县| 屏南县| 龙岩市| 海林市| 石狮市| 五峰| 溆浦县| 武城县| 石屏县| 扶绥县| 延庆县| 洱源县| 宜兰市| 方城县| 黄龙县| 海林市| 大邑县| 西乌珠穆沁旗| 福泉市| 张家口市| 古浪县| 沛县| 团风县| 称多县| 鄂伦春自治旗|