JavaScript 圖片庫優(yōu)化版

在之前的版本上進行修改和優(yōu)化。

需要考慮的幾點:

1迈倍、引入了檢測和測試嗎伤靠?代碼能平穩(wěn)退化嗎?
2啼染、向后兼容
3宴合、分離JavaScript
4、優(yōu)化迹鹅、簡潔代碼

代碼:

gallery.html代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8"/>
    <title>Image Gallery</title>
    <link rel="stylesheet" type="text/css" href="styles/layout.css" media="screen"/>
</head>
<body>
    <h1>Snapshots</h1>
    <ul id="imagegallery">
        <li>
            <a href="images/fire.jpg"  title="fire1">
                ![](images/fire.jpg)
            </a>
        </li>
        <li>
            <a href="images/coffee.jpg"  title="fire2">
                ![](images/coffee.jpg)
            </a>
        </li>
        <li>
            <a href="images/rose.jpg"  title="fire3">
                ![](images/rose.jpg)
            </a>
        </li>
        <li>
            <a href="images/bigben.jpg"  title="fire4">
                ![](images/bigben.jpg)
            </a>
        </li>
    </ul>
    ![](images/placeholder.jpg)
    <p id="description">Choose an image.</p>
    <script type="text/javascript" src="scripts/showPic.js"></script>
</body>
</html>

showPic.js代碼:

//調用addLoadEvent()函數卦洽,同時加載多個函數,適用于函數數量過多的情況
function addLoadEvent(func) {
    var oldonload = window.onload;
    if(typeof window.onload != 'function'){
        window.onload = func;
    }else {
        window.onload = function () {
            oldonload();
            func();
        }
    }
}
addLoadEvent(prepareGallery);
/*由于需要調用的函數較少斜棚,可以使用以下簡單的方法:
window.onload = function(){
    countBodyChildren();
    prepareGallery();
}
 */
function showPic(whichpic){
    if(!document.getElementById("placeholder")) return false;//檢測是否存在id為placeholder的元素
    var source = whichpic.getAttribute("href");
    var placeholder = document.getElementById("placeholder");
    if(placeholder.nodeName != "IMG") return false;//判斷元素placeholder是否是圖片
    placeholder.setAttribute("src",source);
    if(document.getElementById("description")){//檢查元素description是否存在
        var text = whichpic.getAttribute("title") ? whichpic.getAttribute("title") : "";//如果getAttribute("title")返回的值不是null阀蒂,text將被賦予第一個值;如果返回值是null弟蚀,text將被賦予第二個值蚤霞。
        var description = document.getElementById("description");
        if(description.firstChild.nodeType == 3){//檢查description元素的第一個子元素是不是文本節(jié)點
            description.firstChild.nodeValue = text;
        }
    }
    return true;
}
function prepareGallery() {
    //method1
    // if(!document.getElementsByTagName || !document.getElementById || !document.getElementById("imagegallery")) return false;
    /*method2
    if(!document.getElementsByTagName){
        return false;
    }
    if(!document.getElementById){
        return false;
    }
    if(!document.getElementById("imagegallery")){
        return false;
    }*/
    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) ? false : true;
        }
    }
}

layout.css代碼:

body {
    font-family: "Helvetica","Arial",serif;
    color: #333;
    background-color: #ccc;
    margin: 1em 10%;
}
h1 {
    color: #333;
    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;
}
#imagegallery {
    list-style: none;
}
#imagegallery li {
    display: inline;
}
#imagegallery li a img {
    border: 0;
}

學習筆記

 1.如果想要在將在時同時執(zhí)行兩個函數:
  window.onload = firstFunction;
  window.onload = secondFunction;
  如果把它們逐一綁定到onload事件上,它們當中將只有最后那個才會被實際執(zhí)行义钉,secondFunction將取代firstFunction昧绣。想要實現可以參照上面的方法。
 2.三元操作符——捶闸?夜畴,是if/else語句的一種變體形式。這個問號的后面是變量的兩種取值删壮。
  variable = condition ? if true : if false;
 3.nodeName屬性總是返回一個大寫字母的值贪绘,即使元素在HTML文檔里是小寫字母。
 4.在考慮了并非所有用戶都是使用鼠標的情況下央碟,此處還是并未使用onkeypress事件函數税灌,因為用戶每按下一個鍵都會觸發(fā)它。即使是Tab鍵!而onclick事件處理函數比我們想象的更聰明:在幾乎所有的瀏覽器里垄琐,用Tab鍵移動到某個鏈接后按下回車鍵的動作也會觸發(fā)onclick事件边酒。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市狸窘,隨后出現的幾起案子墩朦,更是在濱河造成了極大的恐慌,老刑警劉巖翻擒,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氓涣,死亡現場離奇詭異,居然都是意外死亡陋气,警方通過查閱死者的電腦和手機劳吠,發(fā)現死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巩趁,“玉大人痒玩,你說我怎么就攤上這事∫槲浚” “怎么了蠢古?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長别凹。 經常有香客問我草讶,道長,這世上最難降的妖魔是什么炉菲? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任堕战,我火速辦了婚禮,結果婚禮上拍霜,老公的妹妹穿的比我還像新娘嘱丢。我一直安慰自己,他們只是感情好祠饺,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布屿讽。 她就那樣靜靜地躺著,像睡著了一般吠裆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上烂完,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天试疙,我揣著相機與錄音,去河邊找鬼抠蚣。 笑死祝旷,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播怀跛,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼距贷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吻谋?” 一聲冷哼從身側響起忠蝗,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤伴网,失蹤者是張志新(化名)和其女友劉穎覆糟,沒想到半個月后祭陷,有當地人在樹林里發(fā)現了一具尸體踪蹬,經...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡姆另,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年寿酌,在試婚紗的時候發(fā)現自己被綠了根灯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哭当。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡低千,死狀恐怖配阵,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情示血,我是刑警寧澤棋傍,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站矾芙,受9級特大地震影響舍沙,放射性物質發(fā)生泄漏。R本人自食惡果不足惜剔宪,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一拂铡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧葱绒,春花似錦感帅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至帮毁,卻和暖如春实苞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烈疚。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工黔牵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爷肝。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓猾浦,卻偏偏與公主長得像陆错,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子金赦,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內容

  • 勤于思考是每位有創(chuàng)新精神的網頁設計人員都應該具備的特質音瓷。 平穩(wěn)退化 第一個問題,如果JS功能被禁用夹抗,會怎么樣绳慎?把h...
    fumier閱讀 275評論 0 0
  • ¥開啟¥ 【iAPP實現進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,444評論 0 17
  • 前言 歸根結底兔朦,代碼都是思想和概念的體現偷线。沒人能把一種程序設計語言的所有語法和關鍵字都記住,可以查閱參考書來解決沽甥。...
    朱細細閱讀 2,940評論 4 14
  • 木筆未動情未發(fā)声邦,綠苞三五弄人家。 無限春光映日來摆舟,伊人袖口疊繁花亥曹。 后記:庭有玉蘭花,每逢春即綻滿樹恨诱,花意盈盈媳瞪,莫...
    凌霄love閱讀 295評論 1 1
  • 為信仰而執(zhí)著著蛇受,為夢想而堅持著。是故事厕鹃,是傳奇兢仰,更是一種精神〖敛辏《大唐玄奘》把将,雖然沒有第一時間去看這部電影,但如今看...
    風雨之夕閱讀 835評論 0 1