非常漂亮的相冊(cè)集 使用jquery制作相冊(cè)集
一、簡(jiǎn)單的圖像翻滾
image-rollover常被用在交互式導(dǎo)航欄上,當(dāng)我們的鼠標(biāo)移動(dòng)到導(dǎo)航欄時(shí),按鈕的外觀改變。例如我們以如下幾幅黑白縮略圖作為導(dǎo)航圖表,當(dāng)鼠標(biāo)移動(dòng)到指定圖標(biāo)時(shí),圖標(biāo)變?yōu)槊髁恋牟噬珗D片。預(yù)覽如下:
該頁(yè)面的代碼十分簡(jiǎn)單,我們以此為例逐步實(shí)現(xiàn)圖像的翻滾:
img-rollover.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Rollover Images</title> <style> html , body{ line-height: 1; background-color: #334873; } h1 { font-family: 'ColaborateRegular', Arial, sans-serif; } p { font-family: 'ColaborateRegular', Arial, sans-serif; color: white; } .logo { letter-spacing: -1px; color: rgb(195,151,51); text-shadow: 2px 2px 1px rgba(0,0,0,.25); font: normal 54px 'ColaborateThinRegular', Arial, sans-serif; } #gallery img { display: inline-block; margin: 10px; border: 1px solid rgb(0,0,0); } </style> <script src="js/jquery-1.7.2.min.js"></script> <script> $(ducument).ready( );//end ready </script> </head> <body> <div class="wrapper"> <div class="header"> <p class="logo">Easy Sir</p> </div> <div class="content"> <div class="main"> <h1>Rollover Images</h1> <p>Mouse over the images below</p> <div id="gallery"> <a href="images/blue.jpg"><img src="images/blue.jpg" width="70" height="70" alt="blue"> </a> <a href="images/green.jpg"><img src="images/green.jpg" width="70" height="70" alt="green"> </a> <a href="images/orange.jpg"><img src="images/orange.jpg" width="70" height="70" alt="orange"> </a> <a href="images/purple.jpg"><img src="images/purple.jpg" width="70" height="70" alt="purple"> </a> <a href="images/red.jpg"><img src="images/red.jpg" width="70" height="70" alt="red"> </a> <a href="images/yellow.jpg"><img src="images/yellow.jpg" width="70" height="70" alt="yellow"></a> </div> </div> </div> </div> </body> </html>
這段代碼十分簡(jiǎn)單。主要就是包含一個(gè)Logo部分,一個(gè)標(biāo)題和6個(gè)<a>鏈接。中間我們省略了38行中的jQuery代碼部分,下面我們逐步在其中添加代碼實(shí)現(xiàn)圖像翻滾的效果。
1、改變圖像的src屬性
我們知道顯示在Web頁(yè)面的每一個(gè)圖像都有一個(gè)src屬性,該屬性表示文件的路徑,它指向服務(wù)器上的一幅圖片。如果我們更改了該屬性的值,瀏覽器將會(huì)顯示新的圖片。對(duì)于以上代碼,我們首先可以通過(guò)each()函數(shù)獲取所有img元素的遍歷,在對(duì)應(yīng)位置添加如下代碼:
<script> $(document).ready(function(){ $('#gallery img').each(); });//end ready </script>
我們可以通過(guò)jQuery的arrt()方法來(lái)獲取img的src屬性。然后,我們將以上img的src屬性值替換為新圖片的路徑,方法如下:
<script> $(document).ready(function(){ $('#gallery img').each(function(){ var oldSrc = $(this).attr('src'); var newPic = new Image(); var imgExt = /(\.\w{3,4}$)/; newPic.src = oldSrc.replace(imgExt, '_h$1'); }); });//end ready </script>
后面的圖像預(yù)載入中會(huì)有這段代碼的簡(jiǎn)單分析,這里首先復(fù)習(xí)一下,attr()函數(shù)允許讀取一個(gè)標(biāo)簽的指定html屬性值,如上例中傳入的'src'參數(shù)即讀取圖片的src屬性。如果給attr()方法傳入第二個(gè)參數(shù),則可以重設(shè)該屬性的值。比如:
$('#pic1').attr('src', 'images/newImg.jpg');
另外,attr()函數(shù)也允許我們一次修改多個(gè)HTML屬性值。比如,當(dāng)我們需要載入的newImg和oldImg尺寸不符的時(shí)候,為了避免新圖片的扭曲,我們可以同時(shí)更改img元素的寬、高屬性。方法如下,傳入一個(gè)對(duì)象直接量作為參數(shù):
var newImg = new Image(); newImg.src = 'images/newImage.jpg'; $('#pic1').attr({ src: newImg.src, width: newImg.width, height: newImg.height });
2、圖像預(yù)載入
如果我們不加”心機(jī)”地在鼠標(biāo)移動(dòng)到指定圖片時(shí)改變圖像的src屬性來(lái)實(shí)現(xiàn)image-rollover,會(huì)有一個(gè)小問(wèn)題。當(dāng)我們把鼠標(biāo)移動(dòng)到指定圖標(biāo)上時(shí),該圖像的src屬性被改變,此時(shí)瀏覽器會(huì)去新的src路徑下載資源圖片,現(xiàn)場(chǎng)下載圖片往往會(huì)給用戶一個(gè)明顯的延遲感。為了克服這個(gè)惱人的問(wèn)題,我們可以預(yù)先將圖片下載到瀏覽器的緩存中。
實(shí)際上,在代碼2中,我們便實(shí)現(xiàn)了圖片的預(yù)載入。代碼2中的第4行,首先獲取每幅圖片的src屬性;第5行創(chuàng)建一個(gè)新圖像;第6~7行,使用正則表達(dá)式,在舊圖像src末尾添加_h后賦給新創(chuàng)建圖像的src。例如舊圖片src為'images/blue.jpg',將'images/blue_h.jpg'賦給新創(chuàng)建的newPic的src屬性。
代碼執(zhí)行到'newPic.src = oldSrc.replace(imgExt, ‘_h$1');'時(shí),瀏覽器便會(huì)到指定的src去下載新圖片放在瀏覽器緩存中。此時(shí)尚未觸發(fā)鼠標(biāo)事件,我們通過(guò)在腳本開(kāi)始處將需要的圖片逐一下載實(shí)現(xiàn)圖像的預(yù)載入。
3、添加hover()事件實(shí)現(xiàn)圖像rollover
在完成圖像預(yù)載入后,接下來(lái)就是給需要翻滾的圖片添加一個(gè)hover事件了。當(dāng)鼠標(biāo)移動(dòng)到指定的圖片時(shí),圖片變?yōu)榻k麗的彩色,移走時(shí)變回黑白。我們?cè)诖a2的基礎(chǔ)上,作如下添加:
$(document).ready(function(){ $('#gallery img').each(function(){ var oldSrc = $(this).attr('src'); var newPic = new Image(); var imgExt = /(\.\w{3,4}$)/; newPic.src = oldSrc.replace(imgExt, '_h$1'); $(this).hover( function(){ $(this).attr('src', newPic.src); }, function(){ $(this).attr('src', oldSrc); } );//end hover }); });//end ready
代碼十分簡(jiǎn)單,只不過(guò)在7~14行通過(guò)this給當(dāng)前圖片添加了一個(gè)hover事件,鼠標(biāo)移入移出時(shí)改變圖片的src。此時(shí),保存添加后的img-rollover.html,注意將需要包含的js/jquery-1.7.2.min.js以及圖片資源按照代碼中指定的路徑放置完好。大功告成,可以像預(yù)覽圖片那樣測(cè)試圖片導(dǎo)航圖片翻滾的效果了。
二、漂亮的相冊(cè)集
在實(shí)現(xiàn)圖像的翻滾之后,我們希望進(jìn)一步,當(dāng)我們點(diǎn)擊小的縮略圖的時(shí)候,能夠展現(xiàn)圖片的大圖,像一個(gè)可以翻看的相冊(cè)一樣。預(yù)覽如下:
接下來(lái)我們?cè)趯?shí)現(xiàn)了小圖翻滾的代碼1的基礎(chǔ)上,增添相冊(cè)集的功能。
1、為什么要把img放在鏈接中
可能有人不理解,為什么要把img分別包含在<a>鏈接中。實(shí)際上這是一種無(wú)干擾的JavaScript技術(shù),如果你的瀏覽器關(guān)閉了JavaScript,這里將圖像包含在一個(gè)鏈接中,當(dāng)用戶點(diǎn)擊小圖的時(shí)候,同樣會(huì)訪問(wèn)到大圖文件。只不過(guò)是通過(guò)鏈接的方式,單擊鏈接時(shí)會(huì)退出當(dāng)前Web頁(yè)面并根據(jù)鏈接載入大圖文件。如下圖所示:
以上是為關(guān)閉了JavaScript的用戶準(zhǔn)備的。然而在通常情況下,對(duì)于使用JS的訪問(wèn)者,我們希望單擊小的縮略圖的時(shí)候在頁(yè)面上呈現(xiàn)該圖的大圖,而不是鏈接到另一個(gè)頁(yè)面。一般情況下,單擊一個(gè)鏈接會(huì)使Web瀏覽器載入鏈接指向的內(nèi)容,所以此處第一步我們需要做的就是阻止瀏覽器在單擊圖片鏈接的時(shí)候跳轉(zhuǎn)頁(yè)面。我們使用事件的preventDefault()方法來(lái)阻止事件的常規(guī)行為,添加如下代碼:
$(document).ready(function(){ ...//省略未改動(dòng)部分 $('#gallery a').click(function(evt){ evt.preventDefault(); });//end click });//end ready
添加的代碼為鏈接添加單擊事件,單擊鏈接時(shí),通過(guò)事件的preventDefault()方法阻止了事件的常規(guī)行為。此時(shí)我們?cè)僭陧?yè)面單擊圖片鏈接的時(shí)候,瀏覽器便不會(huì)跳轉(zhuǎn)到大圖頁(yè)面了。當(dāng)然,對(duì)于沒(méi)有JavaScript的瀏覽器依然會(huì)實(shí)現(xiàn)跳轉(zhuǎn),因?yàn)殛P(guān)閉是通過(guò)JavaScript來(lái)完成的。
2、單擊縮略圖在頁(yè)面呈現(xiàn)大圖
為了顯示大圖,我們?cè)谏厦娲a基礎(chǔ)上添加一個(gè)id為bigImg的div,如代碼4第9行:
<div id="gallery"> <a href="images/blue.jpg"><img src="images/blue.jpg" width="70" height="70" alt="blue"></a> <a href="images/green.jpg"><img src="images/green.jpg" width="70" height="70" alt="green"></a> <a href="images/orange.jpg"><img src="images/orange.jpg" width="70" height="70" alt="orange"></a> <a href="images/purple.jpg"><img src="images/purple.jpg" width="70" height="70" alt="purple"></a> <a href="images/red.jpg"><img src="images/red.jpg" width="70" height="70" alt="red"></a> <a href="images/yellow.jpg"><img src="images/yellow.jpg" width="70" height="70" alt="yellow"></a> </div> <div id="bigImg"><div>
接下來(lái),我們通過(guò)jQuery為要顯示的大圖創(chuàng)建一個(gè)img標(biāo)簽,在代碼3中添加如下代碼:
...//省略未改動(dòng)部分 $('#gallery a').click(function(evt){ evt.preventDefault(); var imgPath = $(this).attr('href'); var newImg = $('<img src="' + imgPath + '">'); newImg.hide(); $('#bigImg').prepend(newImg); newImg.fadeIn(1000); });//end click
在代碼5的第5行,首先通過(guò)attr()函數(shù)獲取<a>的href屬性,即鏈接地址imgPath;第6行根據(jù)該連接地址創(chuàng)建一個(gè)img標(biāo)簽,將該標(biāo)簽的src屬性賦值為imgPath;第7行,首先將圖片隱藏,后面將通過(guò)淡入的方式華麗出現(xiàn);第8行將img標(biāo)簽添加到<div id="bigImg"></div>中,如果沒(méi)有第7行的隱藏操作,此時(shí)圖像會(huì)立即出現(xiàn);第9行,使用淡入的方式顯示圖像。OK,保存代碼,在瀏覽器中打開(kāi),點(diǎn)擊縮略圖,發(fā)現(xiàn)已經(jīng)有了相冊(cè)查看效果了,但是,當(dāng)我們連續(xù)點(diǎn)擊相冊(cè)圖片的時(shí)候,歷史圖片并不會(huì)消失,如果我們一直點(diǎn)擊下去,圖片會(huì)一直羅列。如下圖所示:
實(shí)際上,每當(dāng)我們點(diǎn)擊一個(gè)縮略圖的時(shí)候,代碼都會(huì)為我們創(chuàng)建一個(gè)新的img并添加到<div id="bigImg"></div>中,從DOM的角度看,會(huì)不停地增加子節(jié)點(diǎn):
為了實(shí)現(xiàn)”相冊(cè)”翻閱的效果,我們?cè)陲@示新的相片的時(shí)候同時(shí)要把之前的圖片刪掉。繼續(xù)在代碼5中作如下添加:
...//省略未改動(dòng)部分 $('#gallery a').click(function(evt){ evt.preventDefault(); var imgPath = $(this).attr('href'); var oldImg = $('#bigImg img'); var newImg = $('<img src="' + imgPath + '">'); newImg.hide(); $('#bigImg').prepend(newImg); newImg.fadeIn(1000); oldImg.fadeOut(1000, function(){ $(this).remove(); }); });//end click
代碼第6行首先獲取當(dāng)前存在的圖像oldImg,在新的圖片淡入的時(shí)候,此圖應(yīng)該進(jìn)行淡出處理。11~13行,在新的圖片淡入之后,oldImg淡出。同時(shí)給fadeOut函數(shù)傳入一個(gè)回調(diào)函數(shù),在oldImg淡出之后一并移除該圖像的img標(biāo)簽。這樣我們就保證在DOM樹(shù)中<div id="bigImg"></div>始終只有一個(gè)img節(jié)點(diǎn),而不會(huì)無(wú)限地增長(zhǎng)下去。
接下來(lái)進(jìn)行一些細(xì)節(jié)的調(diào)整,當(dāng)我們點(diǎn)入這個(gè)頁(yè)面的時(shí)候,希望默認(rèn)顯示第一幅圖片,為了實(shí)現(xiàn)這個(gè)小功能,我們只需要在代碼6后面添加一行代碼:
...//省略未改動(dòng)部分 $('#gallery a').click(function(evt){ evt.preventDefault(); var imgPath = $(this).attr('href'); var oldImg = $('#bigImg img'); var newImg = $('<img src="' + imgPath + '">'); newImg.hide(); $('#bigImg').prepend(newImg); newImg.fadeIn(1000); oldImg.fadeOut(1000, function(){ $(this).remove(); }); });//end click $('#gallery a:first').click();
我們?cè)诤竺嫣砑恿?('#gallery a:first').click();,在jQuery中,如果沒(méi)有給事件函數(shù)傳遞任何參數(shù),jQuery便會(huì)觸發(fā)一次該事件。保存代碼,重新用瀏覽器打開(kāi),第一幅圖片已經(jīng)默認(rèn)顯示了:
3、css絕對(duì)定位實(shí)現(xiàn)圖片的重疊
漂亮的相冊(cè)集基本上已經(jīng)完成了,但是吹毛求疵地看,當(dāng)我們更換要查看的照片的時(shí)候,舊圖片的淡出會(huì)在新圖的后面完成,給人一種贅余不利落的感覺(jué):
為了解決這個(gè)問(wèn)題,我們讓新圖的淡入和舊圖的淡出重疊顯示。為了實(shí)現(xiàn)圖片的重疊顯示我們需要用到css的絕對(duì)定位。
通常情況下,在隱藏或者添加一個(gè)新的元素的時(shí)候,其他元素會(huì)像流一樣自動(dòng)移動(dòng)來(lái)填補(bǔ)空白或者給新的元素騰位置。但是像我們本文的示例,如果我們不希望看到這樣的效果,我們可以使用css的絕對(duì)定位。css的絕對(duì)定位會(huì)把一個(gè)元素放置在常規(guī)頁(yè)面內(nèi)容流之外,這樣就不會(huì)在內(nèi)容流中出現(xiàn)填補(bǔ)移動(dòng)等操作了。如果我們使用絕對(duì)定位將元素定位在相同的位置,那么元素將會(huì)重疊在一起。本例中,這恰恰是我們想要的。實(shí)現(xiàn)起來(lái)其實(shí)十分簡(jiǎn)單,只需要在css中將<div id="bigImg"></div>中的img指定為絕對(duì)定位就可以了。我們?cè)诖a1的</style>前添加以下代碼:
#bigImg img { position: absolute; }
保存,重新用瀏覽器打開(kāi),大功告成!漂亮的相冊(cè)已經(jīng)做好了。
jquery文件下載
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)jquery程序設(shè)計(jì)有所幫助。
- jquery+html仿翻頁(yè)相冊(cè)功能
- jquery+CSS3實(shí)現(xiàn)3D拖拽相冊(cè)效果
- Jquery全屏相冊(cè)插件zoomvisualizer具有調(diào)節(jié)放大與縮小功能
- jQuery實(shí)現(xiàn)帶滾動(dòng)導(dǎo)航效果的全屏滾動(dòng)相冊(cè)實(shí)例
- jQuery插件實(shí)現(xiàn)大圖全屏圖片相冊(cè)
- jquery實(shí)現(xiàn)相冊(cè)一下滑動(dòng)兩次的方法
- 基于spring+hibernate+JQuery開(kāi)發(fā)之電子相冊(cè)(附源碼下載)
- jQuery 網(wǎng)易相冊(cè)鼠標(biāo)移動(dòng)顯示隱藏效果實(shí)現(xiàn)代碼
- 收集的10個(gè)免費(fèi)的jQuery相冊(cè)
- Html5+jQuery+CSS制作相冊(cè)小記錄
相關(guān)文章
jquery輕量級(jí)數(shù)字動(dòng)畫(huà)插件countUp.js使用詳解
這篇文章主要為大家詳細(xì)介紹了jquery鼠標(biāo)滾動(dòng)數(shù)字增加插件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10一個(gè)基于jQuery的樹(shù)型插件(OrangeTree)使用介紹
這個(gè)樣式大家就將就一下吧!我將這個(gè)無(wú)限級(jí)樹(shù)型插件命名為桔子樹(shù),需要的朋友可以參考下2012-05-05將鼠標(biāo)焦點(diǎn)定位到文本框最后(代碼分享)
本文主要分享了將鼠標(biāo)焦點(diǎn)定位到文本框最后的實(shí)例代碼。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01基于JQuery和原生JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)定位導(dǎo)航特效
本文通過(guò)實(shí)例代碼給大家介紹了基于JQuery和原生JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)定位導(dǎo)航特效,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-04-04jQuery插件bxSlider實(shí)現(xiàn)響應(yīng)式焦點(diǎn)圖
bxSlider特性1.充分響應(yīng)各種設(shè)備,適應(yīng)各種屏幕;2.支持多種滑動(dòng)模式,水平、垂直以及淡入淡出效果;3.支持圖片、視頻以及任意html內(nèi)容;4.支持觸摸滑動(dòng);5.支持Firefox,Chrome,Safari,iOS,Android,IE7+,下面我們就來(lái)詳細(xì)探討下吧。2015-04-04jQuery實(shí)現(xiàn)根據(jù)滾動(dòng)條位置加載相應(yīng)內(nèi)容功能
這篇文章主要實(shí)現(xiàn)了jQuery根據(jù)滾動(dòng)條位置加載相應(yīng)內(nèi)容的操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07