国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

javascript輪播圖算法

2019-11-20 08:41:37
字體:
來源:轉載
供稿:網友

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

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)做首尾呼應呢?原因如下圖:

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


一開始布局的時候left: -470px;先處于第2個li也就是第2張圖,當我們圖片陸續向左滾動到第7張圖片的時候,迅速扯回到第2張圖,然后還是繼續向左滾動。這樣看起來就像是假象式的無限向左滾動循環,其實它里面只有7張圖組成。同樣的,如果實現向右滾動,我們一開始布局的時候,先處于第1個li也就是第1張圖,當我們圖片陸續向右滾動到第6張圖片的時候,迅速扯回到第1張圖,然后還是繼續向右滾動。其實上下滾動輪播圖道理是一樣的,只不過少了一個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函數方法

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"按鈕"鼠標經過事件   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); }}   //向左輪播的主函數調用scrollimg1(img1,spannum1);   //向上輪播圖的span"按鈕"鼠標經過事件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); }}    //向上輪播的主函數調用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秒鐘進行函數的回調,實現無限循環的圖片輪播 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秒鐘進行函數的回調,實現無限循環的圖片輪播 scrollimg2(obj,spannum2); },3000); }function Move(obj,target,stylename,average,cycle,continuefunction){參數類型:(對象,目標值,改變的樣式屬性,緩沖系數(速度與大小成反比),周期時間(速度與大小成反比),回調函數(可有可無)) 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){//對象樣式屬性大小獲取函數if(obj.currentStyle){return obj.currentStyle[stylename];}else if(getComputedStyle(obj,false)){return getComputedStyle(obj,false)[stylename];}}

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阜康市| 丰都县| 黄平县| 定兴县| 南丹县| 收藏| 平泉县| 万安县| 呼图壁县| 鸡东县| 伊宁县| 邹平县| 讷河市| 开鲁县| 潜江市| 马公市| 巴林左旗| 宿州市| 东光县| 宁河县| 巴楚县| 阳朔县| 大足县| 土默特左旗| 湘乡市| 嘉兴市| 西昌市| 长沙市| 安乡县| 太保市| 衡阳县| 阿拉善左旗| 甘洛县| 荆州市| 金寨县| 聂荣县| 阳城县| 安图县| 昆山市| 娱乐| 邹平县|