一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

javascript dom代碼應(yīng)用 簡單的相冊[firefox only]

但我覺得這還不行,畢竟什么都是人家封裝好的,得自己深入學(xué)習(xí)下原生的Javascript才踏實。今天看到一篇不錯的博文,介紹了一個基于js dom編程的相冊實例,雖然這個例子很小,但個人認為還是很有學(xué)習(xí)價值的,先給出html和效果圖,這樣有助于后面js的理解。 
    
復(fù)制代碼 代碼如下:
<body>
<div id="content">
<h1>Snapshots</h1>
<ul id="imagegallery">
<li>
<a href="photo/fireworks.jpg" title="A fireworks display">
<img src="photo/thumbnail_fireworks.jpg" alt="Fireworks" />
</a>
</li>
<li>
<a href="photo/coffee.jpg" title="A cup of black coffee">
<img src="photo/thumbnail_coffee.jpg" alt="Coffee" />
</a>
</li>
<li>
<a href="photo/rose.jpg" title="A red, red rose">
<img src="photo/thumbnail_rose.jpg" alt="Rose" />
</a>
</li>
<li>
<a href="photo/bigben.jpg" title="The famous clock">
<img src="photo/thumbnail_bigben.jpg" alt="Big Ben" />
</a>
</li>
</ul>
</div>
</body>

結(jié)構(gòu)還是挺簡單的,這里a元素的href屬性值為要顯示大圖的路徑,img為對應(yīng)的小圖。效果就是點擊下面的小圖,上面顯示對應(yīng)的大圖。
下面給出js實現(xiàn):
復(fù)制代碼 代碼如下:
<script type="text/Javascript">
/*3相冊代碼的關(guān)鍵函數(shù),傳入?yún)?shù)為a元素*/
function showPic(whichpic) {
if(!document.getElementById("placeholder")) return true;
/*取得a元素的href*/
var source = whichpic.getAttribute("href");
var placeholder = document.getElementById("placeholder");
/*顯示圖片:讓img元素的src變?yōu)閍元素的href*/
placeholder.setAttribute("src",source);
if(!document.getElementById("description")) return false;
/*取得a元素的title*/
if(whichpic.getAttribute("title")) {
var text = whichpic.getAttribute("title");
} else {
var text = "";
}
/*將a元素的title賦給描述文字*/
var description = document.getElementById("description");
if(description.firstChild.nodeType == 3) {
description.firstChild.nodeValue = text;
}
return false;
}
/*2給所有的imagegallery的a添加上click事件響應(yīng)函數(shù)*/
function prepareGallery() {
if(!document.getElementsByTagName) return false;
if(!document.getElementById) return false;
if(!document.getElementById("imagegallery")) return false;
var gallery = document.getElementById("imagegallery");
var links = gallery.getElementsByTagName("a");
for(var i=0; i < links.length; i++) {
links[i].onclick = function() {
return showPic(this);
}
links[i].onkeypress = links[i].onclick;
}
}
/*添加load事件響應(yīng)函數(shù)的函數(shù)*/
function addLoadEvent(func) {
var oldonload = window.onload;
if(typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}
/* 1.代碼開始*/
function preparePlaceholder() {
if(!document.createElement) return false;
if(!document.createTextNode) return false;
/*創(chuàng)造一個img元素,設(shè)置它的屬性*/
var placeholder = document.createElement("img");
placeholder.setAttribute("id", "placeholder");
placeholder.setAttribute("src", "photo/placeholder.gif");
placeholder.setAttribute("alt", "my image gallery");
/*創(chuàng)建一個段落,作為描述*/
var description = document.createElement("p");
description.setAttribute("id","description");
var desctext = document.createTextNode("choose an image");
description.appendChild(desctext);
/*imagegallery是文檔里的ul*/
var gallery = document.getElementById("imagegallery");
/*將大圖和描述文字插入文檔*/
gallery.parentNode.insertBefore(placeholder, gallery);
gallery.parentNode.insertBefore(description, gallery);
}
/*為事件初始化*/
addLoadEvent(preparePlaceholder);
addLoadEvent(prepareGallery);
</script>

我們先看preparePlaceholder函數(shù),在這個函數(shù)里創(chuàng)建了一個img元素placeholder,并設(shè)置了它對應(yīng)的屬性(id, src, alt),又創(chuàng)建了一個p元素description,p元素中用appendChild方法插入了一個文本節(jié)點用于給出照片的描述,初始為“choose an image”, 然后通過document.getElementById找到ul,并把生成的img和p插到圖片列表之前。說明下insertBefore的用法,查了下Mozilla developer center:

      var insertedElement = parentElement.insertBefore(newElement, referenceElement);

      insertedElement 其實就是newElement,作為一個返回結(jié)果

      parentElement 是要插入的父級元素即插入哪個元素中

      newElement 當(dāng)然就是那個要插入的新元素啦

      referenceElement 指要在哪個元素之前插入

    我們接著看prepareGallery函數(shù),它的作用是為每個a元素賦予一個單擊事件,其中return showPic(this)默認返回的是false,是為了阻止點擊a元素后的默認行為(直接到新頁面顯示圖片)

    下面是最核心的showPic函數(shù),通過取得包裹對應(yīng)小圖片的a元素中的href 和 title屬性值(href的值為小圖片對應(yīng)的大圖片的路徑),來為preparePlaceholder函數(shù)中生成的img設(shè)置src屬性,和p中的描述文本,形成最終的效果。這里面有個nodeType,具體也可在Mozilla developer center中查到。

    最后還有一個很有意思的函數(shù)就是addLoadEvent,很有意思...有遞歸的感覺,把事件函數(shù)像隊列一樣加了進去,然后順次執(zhí)行。

    呵呵,這個相冊就分析到這,這是我第一次發(fā)表博文,有什么不對或需要提高的地方,希望博友們多多指點,我會虛心接受的,謝謝。
代碼打包下載

JavaScript技術(shù)javascript dom代碼應(yīng)用 簡單的相冊[firefox only],轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: www国产精品com | 日本一区二区三区高清在线观看 | 亚洲五月婷 | 美女免费精品高清毛片在线视 | 九九免费视频 | 在线观看免费精品国产 | 午夜视频福利在线 | 午夜在线观看视频免费 成人 | 韩国午夜理伦三级2020宅男 | 国产在线播放成人免费 | 在线欧美成人 | 欧美人体一区二区三区 | 综合久久久久久中文字幕 | 亚洲香蕉在线 | 久久久网久久久久合久久久久 | 亚洲国产天堂久久综合 | 天天欧美 | 海外毛片 | 精品欧美一区二区三区精品久久 | 午夜在线视频观看版 | 一本大道加勒比久久综合 | 中文字幕久久精品 | 国产愉拍精品视频手机 | 色在线播放 | 国产自产 | 欧美精品黄页在线观看视频 | 狠狠亚洲 | 黄色免费在线视频 | 碰碰碰人人澡人人爱摸 | 欧美亚洲国产成人精品 | 激情国产| 一二三四视频在线社区7 | 亚洲第一se情网站 | 一国产大片在线观看 | 国产精品美女网站 | 免费污视频在线观看 | 一区视频在线 | 国产成人亚洲综合91精品555 | 日本乱中文字幕系列在线观看 | 一级特黄欧美 | 国产玖玖视频 |