這篇文章主要為大家詳細介紹了js實現從左向右滑動式輪播圖效果,具有一定的參考價值,有興趣的小夥伴們可以參考一下
輪播圖就是讓圖片每隔幾秒鐘自動滑動,達到圖片輪流播放的效果。輪播圖從效果來說有滑動式的也有漸入式的,滑動式的輪播圖就是圖片從左向右滑入的效果,漸入式的輪播圖就是圖片根據透明度漸漸顯示的效果,這裡說的是實現第一種效果的方法。
原理
相同大小的圖片並成一列,但只顯示其中一張圖片,其餘的隱藏,透過修改left值來改變顯示的圖片。
點選查看效果
html部分
nav為總容器,第一個ul列表#index為小圓點列表,滑鼠覆蓋哪個小圓點就顯現第幾張圖片,on是一個為小圓點添加背景顏色屬性的類別;第二個ul列表#img為圖片列表。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Carousel Figure</title> <link rel="stylesheet" href="style.css" rel="external nofollow" > </head> <body> <!--从左向右滑动--> <nav> <ul id="index"> <li class="on"></li> <li></li> <li></li> <li></li> <li></li> </ul> <ul id="img"> <li><img src="/static/imghwm/default1.png" data-src="../images/img1.jpg" class="lazy" alt="img1"></li> <li><img src="/static/imghwm/default1.png" data-src="../images/img2.jpg" class="lazy" alt="img2"></li> <li><img src="/static/imghwm/default1.png" data-src="../images/img3.jpg" class="lazy" alt="img3"></li> <li><img src="/static/imghwm/default1.png" data-src="../images/img4.jpg" class="lazy" alt="img4"></li> <li><img src="/static/imghwm/default1.png" data-src="../images/img5.jpg" class="lazy" alt="img5"></li> </ul> </nav> <script src="script.js"></script> </body> </html>
css部分
#圖片尺寸皆為720*405,這裡要注意以下幾點:
ul#img列表相對於nav是絕對定位的,#img的長度必須設定為所有圖片的總寬度,這樣圖片才可以並列一排顯示;
總容器nav的寬度必須設定為圖片的寬度720px,即只能顯示一張圖片,超出寬度的部分隱藏,即overflow: hidden;
小圓點列表應該在圖片列表上面顯示,故設定#img的z-index:-1;
小圓點列表是由一系列的li透過改變邊框樣式構成,故只需改變背景顏色即可達到移動小圓點的效果。
*{ margin:0; padding:0; } nav{ width: 720px; height: 405px; margin:20px auto; overflow: hidden; position: relative; } #index{ position: absolute; left:320px; bottom: 20px; } #index li{ width:8px; height: 8px; border: solid 1px gray; border-radius: 100%; background-color: #eee; display: inline-block; } #img{ width: 3600px;/*不给宽高无法移动*/ height: 405px; position: absolute;/*不定义absolute,js无法设置left和top*/ z-index: -1; } #img li{ width: 720px; height: 405px; float: left; } #index .on{ background-color: black; }
JS部分
#圖片移動函數moveElement()
moveElement函數需要取得圖片現在的位置以及目標位置併計算它們之間的差距進行移動,可以用offsetLeft和offsetTop取得圖片現在的位置。圖片移動時「劃過」的效果是將距離分成好10次進行移動,即利用setTimeOut函數,然而為了防止滑鼠懸停,需呼叫clearTimeout()函數,代碼如下:
function moveElement(ele,x_final,y_final,interval){//ele为元素对象 var x_pos=ele.offsetLeft; var y_pos=ele.offsetTop; var dist=0; if(ele.movement){//防止悬停 clearTimeout(ele.movement); } if(x_pos==x_final&&y_pos==y_final){//先判断是否需要移动 return; } dist=Math.ceil(Math.abs(x_final-x_pos)/10);//分10次移动完成 x_pos = x_pos<x_final ? x_pos+dist : x_pos-dist; dist=Math.ceil(Math.abs(y_final-y_pos)/10);//分10次移动完成 y_pos = y_pos<y_final ? y_pos+dist : y_pos-dist; ele.style.left=x_pos+'px'; ele.style.top=y_pos+'px'; ele.movement=setTimeout(function(){//分10次移动,自调用10次 moveElement(ele,x_final,y_final,interval); },interval) }
小圓點移動函數moveIndex()
# 移動小圓點的實質是移動設定的背景顏色的類on,原理是先判斷哪個li上有背景顏色,有則去掉,讓所有的li都沒有背景,然後在對當前的li添加背景。
function moveIndex(list,num){//移动小圆点 for(var i=0;i<list.length;i++){ if(list[i].className=='on'){//清除li的背景样式 list[i].className=''; } } list[num].className='on'; }
圖片自動輪播
將以下程式碼直接寫在window.onload中即可。
這裡需要定義一個變數index,表示移動到第index(0~n-1,n為li的個數)張圖片。
var img=document.getElementById('img'); var list=document.getElementById('index').getElementsByTagName('li'); var index=0;//这里定义index是变量,不是属性 var nextMove=function(){//一直向右移动,最后一个之后返回 index+=1; if(index>=list.length){ index=0; } moveIndex(list,index); moveElement(img,-720*index,0,20); };
圖片的自動輪播需要用到setInterval()函數,讓程式每隔幾秒鐘自動呼叫nextMove()函數:
var play=function(){ timer=setInterval(function(){ nextMove(); },2500); };
滑鼠覆寫小圓點效果
# 要實作滑鼠覆寫哪個小圓點,就呈現對應的圖片這效果,需要知道滑鼠覆蓋的是哪個小圓點,這裡為每個li都加上一個自定的屬性index,使該屬性的值為對應的小圓點的序號i(0~n-1, n為li的個數),這樣每次滑鼠覆蓋時只需取得index屬性的值即可知道滑鼠覆蓋的是哪個小圓點。注意,該index屬性和變數index沒有絲毫的關係,只有相同的名字。
for(var i=0;i<list.length;i++){//鼠标覆盖上哪个小圆圈,图片就移动到哪个小圆圈,并停止 list[i].index=i;//这里是设置index属性,和index变量没有任何联系 list[i].onmouseover= function () { var clickIndex=parseInt(this.index); moveElement(img,-720*clickIndex,0,20); index=clickIndex; moveIndex(list,index); clearInterval(timer); }; list[i].onmouseout= function () {//移开后继续轮播 play(); }; }
總結
# 輪播圖的實作並不複雜,主要在於將圖片的移動行為和小圓點的移動行為分開,這樣就比較容易實現。這個輪播圖其實還是有點問題的,從最後一幅圖滑向第一個時滑動的距離較長,其實也很好解決,將滑動的方式改一下,這裡是根據-720*index來計算最終的left值,而index是將圖片的移動和小圓點的移動綁在一起,將滑動方式改成現在的offsetLeft+(-720),圖片的移動就可以與index值無關,然後在html檔案增加一圖片:
<li><img src="/static/imghwm/default1.png" data-src="../images/img1.jpg" class="lazy" alt="img1"></li> <li><img src="/static/imghwm/default1.png" data-src="../images/img2.jpg" class="lazy" alt="img2"></li> <li><img src="/static/imghwm/default1.png" data-src="../images/img3.jpg" class="lazy" alt="img3"></li> <li><img src="/static/imghwm/default1.png" data-src="../images/img4.jpg" class="lazy" alt="img4"></li> <li><img src="/static/imghwm/default1.png" data-src="../images/img5.jpg" class="lazy" alt="img5"></li> <li><img src="/static/imghwm/default1.png" data-src="../images/img1.jpg" class="lazy" alt="img1"></li>
然後在滑到最後一幅圖片時,迅速的將偏移量賦值0,變成第一幅,兩幅圖一樣,無法分辨其中變化,即可達到無縫連接。
if(x_pos==-3600){ ele.style.left='0'; ele.style.top='0'; }else{ ele.style.left=x_pos+'px'; ele.style.top=y_pos+'px'; }
以上是js中滑動式輪播圖是怎麼實現的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。