摘要:最近想自己寫下輪播圖,在網上發現一個網友用屬性實現的輪播,趕腳超簡單哦,自己學習了后整理如下。如果我們用給加上類,的就要變成對吧,由于有屬性,所以要等,才能完全變為,實現了淡入。
最近想自己寫下輪播圖,在網上發現一個網友用CSS transition屬性實現的輪播,趕腳超簡單哦,自己學習了后整理如下。(找不到原網址了-.-...就不貼了...)
(如果不了解transition,先去這里(點我,點我)學習下)
思路
圖片淡入淡出效果是不透明度(CSS opacity屬性)的變換過程。舉例,讓圖片淡出,就是圖片的opacity屬性在一段時間內逐漸從1變為0,淡入呢,則是圖片的opacity屬性在一段時間內逐漸從0變為1,用transition可以輕松實現啊。
我們設置圖片的CSS樣式如下,先不考慮布局和寬高這些。
img{ opacity: 0; transition: opacity 1s; } img.active{ opacity: 1; }
這段CSS能實現什么呢?
一開始,img的opacity為0,所以我們看不見。如果我們用JS給img加上active類,img的opacity就要變成1對吧,由于有transition屬性,所以要等1s,opacity才能完全變為1,實現了淡入。
那淡出呢?你想下,等img淡入完了之后,我又用JS刪掉img的active類會怎么樣?這時候img的opacity應該從1變為0對吧,又由于有transition屬性,所以opacity要等1s才能變為0,這就實現了淡出。
JS的setInterval(code,millisec)(點我學習該函數)可以每隔一段時間就執行指定代碼。如果我每隔1s就更改下img的類名,如果有active類就刪掉,如果沒有就加上,這樣圖片就不斷地淡入 → 淡出 → 淡入 → 淡出。
怎么實現多張圖片輪流淡入淡出呢?
你每次刪掉當前圖片的active類(淡出),然后給下一張圖片加上active類(淡入),這樣就實現了圖片的切換。
剩下的就是每隔固定時間間隔,執行切換圖片函數就行了。
先上兩個效果圖。
點我跳轉CodePen看本文代碼最終效果,打開可能有點慢,耐心等等。這個是圖片自動輪播,也可以通過圖片底部的頁碼選擇圖片。
點我跳轉看稍微變動后的另一種效果(這是仿的京東首頁輪播圖效果,鼠標滑到圖片上時會顯示左右按鈕框,點擊左右按鈕框也可實現圖片切換。)
只有圖片的輪播
HTML比較簡單,就是一個
CSS如下。設置好
*{ padding: 0; margin: 0; } #slideshow{ width: 800px; height: 350px; margin: 0 auto; /*設置在頁面水平居中*/ overflow: hidden; position: relative; } #slideshow img{ width: 800px; position: absolute; /*圖片采取絕對定位,均位于左上角,重疊在一起*/ top: 0; left: 0; opacity: 0; /*初始不透明度為0,圖片都看不見*/ transition: opacity 1s linear; /*--重點--定義一個關于透明度的transition*/ } #slideshow img.active{ opacity: 1; /*有active類的圖片不透明度為1,即顯示圖片*/ }
JS如下。在輪播函數slideshow()里,定義了圖片淡出函數slideOff(),圖片淡入函數slideOn()和切換圖片函數changeSlide()。
//---------主角:輪播圖函數------------- function slideshow() { var slideshow=document.getElementById("slideshow"), imgs=slideshow.getElementsByTagName("img"), //得到圖片們 current=0; //current為當前活躍的圖片編號 function slideOff() { imgs[current].className=""; //圖片淡出 } function slideOn() { imgs[current].className="active"; //圖片淡入 } function changeSlide() { //切換圖片的函數 slideOff(); //圖片淡出 current++; //自增1 if(current>=3) current=0; slideOn(); //圖片淡入 } //每2s調用changeSlide函數進行圖片輪播 var slideon=setInterval(changeSlide,2000); } slideshow();
這里有個問題哦,輪播圖一般鼠標移入圖片后,輪播就停止了,當鼠標移出后,輪播又開始對吧。我們用JS的onmouseover和onmouseout來實現。
在JS的slideshow()函數中加入以下代碼即可。
slideshow.onmouseover=function () { clearInterval(slideon); //當鼠標移入時清除輪播事件 } slideshow.onmouseout=function () { slideon=setInterval(changeSlide,2000); //當鼠標移出時重新開始輪播事件 }
具體效果見CodePen鏈接。
加上頁碼恩,然后我們加上和每張圖片相對應的頁碼,并實現鼠標移上去就會顯示相應圖片這個功能。
在HTML的
1 2 3
第一個我也是已經添加了active類。
然后設置頁碼的樣式,讓它們位于圖片的底部,一字排開。
/* 設置頁碼的樣式 */ #slideshow div{ width: 100%; position: absolute; bottom: 10px; text-align: center; } #slideshow span{ display: inline-block; width: 25px; line-height: 25px; /*當只有一行文本時height等于line-height*/ border-radius: 25px; /*設置頁碼為圓形*/ margin: 0 15px; background: white; font-size: 16px; } #slideshow span.active{ color: white; background: #FFDD55; }
在JS中,slideOff()和slideOn()函數都要更新下,因為淡入淡出時的類名也要進行變更。
function slideOff() { imgs[current].className=""; //圖片淡出 pages[current].className=""; } function slideOn() { imgs[current].className="active"; //圖片淡入 pages[current].className="active"; }
再就是鼠標移入時,需要顯示對應的圖片對吧。我們先把當前圖片淡出,然后得到當前對應的current,再讓圖片淡入就好啦。
for(var i=0; i<pages.length; i++)="" {="" 定義鼠標移入和移出頁碼事件="" pages[i].onmouseover="function(){" slideoff();="" 圖片淡出="" current="this.innerHTML-1;" 得到鼠標停留的頁碼對應的current="" slideon();="" }="" }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/115351.html
摘要:首先,巧妙的使用這一標記,將游覽器從所有情況中分離出來。元素不能用作語義用途以外的其他目的。空白段落元素并非用于跳行。當瀏覽器支持時,它們會自動地呈現出來并發揮作用。Html1、Html5有哪些新特性,移除了哪些元素?如何處理HTML5新標簽的瀏覽器兼容問題?如何區別HTML和HTML5?HTML5 現在已經不是 SGML 的子集,主要是關于圖像,位置,存儲,多任務等功能的增加。拖拽釋放(D...
摘要:網上的淡入淡出效果大多是依照中和的方法使用來控制元素的透明度達到目的,但缺點是有輕微的卡頓感,并且運行效率一般。思路是將淡入,淡出的效果做成預先定義好的樣式類,然后用改變元素的類來達到圖片輪播。 網上的淡入淡出效果大多是依照jquery中fadeIn和fadeOut的方法使用js來控制元素的透明度達到目的,但缺點是有輕微的卡頓感,并且運行效率一般。 這里提供另外一個思路,即通過預先定義...
摘要:起因現在自學前端中,學到移動端,在做一個項目,課程開始用原生的方法寫輪播圖無縫,但是視頻講的是面向過程的方式,現在自己用面向對象的方式寫一下。 ## 起因 ## 現在自學前端中,學到移動端,在做一個項目,課程開始用原生的方法寫輪播圖(無縫),但是視頻講的是面向過程的方式,現在自己用面向對象的方式寫一下。 ## 上代碼 ## html的代碼 分類 ...
閱讀 1102·2021-11-15 18:00
閱讀 2816·2021-09-22 15:18
閱讀 1979·2021-09-04 16:45
閱讀 762·2019-08-30 15:55
閱讀 3872·2019-08-30 13:10
閱讀 1345·2019-08-30 11:06
閱讀 1994·2019-08-29 12:51
閱讀 2303·2019-08-26 13:55