五派敷、優(yōu)化我的圖片庫

我的圖片庫完成了嫡霞。但根據(jù)上一章節(jié)的內(nèi)容,在平穩(wěn)退化捞挥、漸進(jìn)增強(qiáng)浮创、可訪問性、向后兼容等方面做得不夠好砌函。需要進(jìn)一步優(yōu)化我的js代碼斩披。
1、添加事件處理函數(shù)
1.檢查當(dāng)前瀏覽器是否理解js代碼:getElementsByTagName等方法讹俊;
if(!document.getElemensByTagName) return false;
2.使用變量垦沉,簡化代碼;
exp: var gallery = document.getElementById("imagegallery");
var links = gallery.getElementsByTagName("a");
3.遍歷
4.改變行為
links[i].onclick = function(){statements;} Tips:這里的function是匿名函數(shù)

2劣像、共享onload事件
假如在文檔加載完畢之后需要綁定多個(gè)事件乡话,
window.onload = fristFunction;
window.onload = secondFunction; 如果使用這種方式的話,最終只會(huì)最后一個(gè)才會(huì)被實(shí)際執(zhí)行耳奕。因此這種使用方式是錯(cuò)誤的绑青。
正確做法:
window.onload = function(){
fristFunction();
secondFunction();
}
最佳解決方案:使用addLoadEvent函數(shù):
function addLoadEvent(func){
var oldonload = window.onload;
if(typeof window.onload != 'function'){
window.onload = func;
}else{
oldonload();
func();
}
}
這將把頁面加載完畢時(shí)執(zhí)行的函數(shù)創(chuàng)建一個(gè)隊(duì)列诬像。如果要把函數(shù)添加到這個(gè)隊(duì)列中,這樣使用:
addLoadEvent(fristFunction);
addLoadEvent(secondFunction);

代碼區(qū):
HTML代碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test</title>
<link rel="stylesheet" href="../css/layout.css" />
</head>
<body>

<h3>SHOW PICTURE</h3>
<ul id="imagegallery">
<li>
<a href="../img/1.jpg" >Picture1</a>
</li>
<li>
<a href="../img/2.jpg" title="2">Picture2</a>
</li>
<li>
<a href="../img/3.jpg" title="3">Picture3</a>
</li>
<li>
<a href="../img/4.jpg" title="4">Picture4</a>
</li>
</ul>

            <script type="text/javascript" src="../js/showPic.js"></script>
    </body>

</html>

js代碼:
//共享onload事件
function addLoadEvent(func) {
var oldonload = window.onload;
if(typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}

//通用函數(shù):insertAfter在指定元素的后面添加新的元素節(jié)點(diǎn)
function insertAfter(newElement, targetElement) {
var parent = targetElement.parentNode;
if(parent.lastChild == targetElement) {
parent.appendChild(newElement);
} else {
parent.insertBefore(newElement, targetElement.nextSibling());
}
}

function preparePlaceholder() {
if(!document.createElement) return false;
if(!document.createTextNode) return false;
if(!document.getElementById) return false;

    var placeholder = document.createElement("img");
    placeholder.setAttribute("id", "placeholder");
    placeholder.setAttribute("src", "../img/6.jpg");
    placeholder.setAttribute("alt", "my image gallery");

    var description = document.createElement("p");
    discription.setAttribute("id", "discription");
    var desctext = document.createTextNode("Choose an image");
    description.appendChild(desctext);
    var gallery = document.getElementById("imagegallery");
    insertAfter(placeholder, gallery);
    insertAfter(description, placeholder);

}

function prepareGallery() {
if(!document.getElementById || !document.getElementsByTagName) 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;
}
}

function showPic(whichpic) {
//檢查是否包含placeholder元素
if(!document.getElementById("placeholder")) return false;
var source = whichpic.getAttribute("href");
var placeholder = document.getElementById("placeholder");
//檢查placeholder的節(jié)點(diǎn)元素名稱是否等于img闸婴,注釋:nodeName返回值總是大寫的
if(placeholder.nodeName != "IMG") return false;
placeholder.setAttribute("src", source);
//檢查是否包含description
if(document.getElementById("description")) {
//檢查title屬性值是否為null值坏挠,如果為null值,則賦值為空值
var text = whichpic.getAttribute("title") ? whichpic.getAttribute("title") : "";
var description = document.getElementById("description");
//nodeValue屬性
description.firstChild.nodeValue = text;
}
return true;
}
addLoadEvent(prepareGallery);
addLoadEvent(preparePlaceholder);

CSS樣式:
body{
font-family: "微軟雅黑";
color: #333;
background-color: #ccc;
margin: 1em 10%;
}
h3{
color: #333333;
background-color: transparent;
}
a{
color: #c60;
background-color: transparent;
font-weight: bold;
text-decoration: none;
}
ul{
padding: 0;
}
li{
float: left;
padding: 1em;
list-style: none;
}
img{
display: block;
clear: both;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邪乍,一起剝皮案震驚了整個(gè)濱河市降狠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌庇楞,老刑警劉巖榜配,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吕晌,居然都是意外死亡蛋褥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門睛驳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烙心,“玉大人,你說我怎么就攤上這事乏沸∫穑” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵蹬跃,是天一觀的道長匙瘪。 經(jīng)常有香客問我,道長炬转,這世上最難降的妖魔是什么辆苔? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任算灸,我火速辦了婚禮扼劈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘菲驴。我一直安慰自己荐吵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布赊瞬。 她就那樣靜靜地躺著先煎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪巧涧。 梳的紋絲不亂的頭發(fā)上薯蝎,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音谤绳,去河邊找鬼占锯。 笑死袒哥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的消略。 我是一名探鬼主播堡称,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼艺演!你這毒婦竟也來了却紧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤胎撤,失蹤者是張志新(化名)和其女友劉穎晓殊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伤提,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挺物,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了飘弧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片识藤。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖次伶,靈堂內(nèi)的尸體忽然破棺而出痴昧,到底是詐尸還是另有隱情,我是刑警寧澤冠王,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布赶撰,位于F島的核電站,受9級(jí)特大地震影響柱彻,放射性物質(zhì)發(fā)生泄漏豪娜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一哟楷、第九天 我趴在偏房一處隱蔽的房頂上張望瘤载。 院中可真熱鬧,春花似錦卖擅、人聲如沸鸣奔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挎狸。三九已至,卻和暖如春断楷,著一層夾襖步出監(jiān)牢的瞬間锨匆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國打工冬筒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恐锣,地道東北人紊遵。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像侥蒙,于是被迫代替她去往敵國和親暗膜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 單例模式 適用場景:可能會(huì)在場景中使用到對(duì)象鞭衩,但只有一個(gè)實(shí)例学搜,加載時(shí)并不主動(dòng)創(chuàng)建,需要時(shí)才創(chuàng)建 最常見的單例模式论衍,...
    Obeing閱讀 2,058評(píng)論 1 10
  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品瑞佩,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式坯台。簡單...
    舟漁行舟閱讀 7,724評(píng)論 2 17
  • 三炬丸、閉包和高階函數(shù) 3.1 閉包 3.1.1 變量的作用域 所謂變量的作用域,就是變量的有效范圍蜒蕾。通過作用域的劃分...
    梁同學(xué)de自言自語閱讀 1,448評(píng)論 0 6
  • 1. tab列表折疊效果 html: 能源系統(tǒng)事業(yè)部 崗位名稱: 工作地點(diǎn) 崗位名...
    lilyping閱讀 1,843評(píng)論 0 1
  • 前言 歸根結(jié)底稠炬,代碼都是思想和概念的體現(xiàn)。沒人能把一種程序設(shè)計(jì)語言的所有語法和關(guān)鍵字都記住咪啡,可以查閱參考書來解決首启。...
    朱細(xì)細(xì)閱讀 2,920評(píng)論 4 14