實踐javascript美術館的小案例,學習到的東西還是蠻多的,包括javascript編程中的預留退路、分離javascript、以及實現向後相容等

來源:互聯網
上載者:User

javascript美術館(改進2) 一、javascript編程過程中的好習慣 1、實現預留退路 js被禁掉,圖片也可以顯示出來,href屬性帶有圖片路徑 複製代碼<script src="js/showPic.js"></script>        <h1>Snapshots</h1>        <ul id="imagegallery">            <li><a href="images/01.jpg" title="01 display"><img width="100px" src="images/01.jpg" alt="01"/></a></li>            <li><a href="images/02.jpg" title="01 display"><img width="100px" src="images/02.jpg" alt="01"/></a></li>            <li><a href="images/03.jpg" title="01 display"><img width="100px" src="images/03.jpg" alt="01"/></a></li>        </ul>複製代碼通過專用的id,圖片的點擊顯示在單獨的js檔案中處理。 上面的代碼就做到了我們在編程過程中所說的預留退路。因為在上面的href連結 中,我們寫全了圖片的路徑,這樣即使使用者禁用了javascript,但是我們預留了退路,所以在沒有javascript“幹擾”的情況下,瀏覽器將沿著href屬性給出的串連前進,使用者看到了新圖片而不是“該頁無法顯示”之類的資訊。雖然這樣與javascript在當前頁面上進行切換的顯示效果略差,但是總比什麼都不顯示強很多。 2、實現分離javascript     外部檔案裡完成添加onclick事件處理函數的工作,那樣才能讓我們的html文檔沒有“雜質。 仍然是上面的代碼,把點擊圖片的js代碼全部放到了外部的js檔案中,這樣關聯起來全靠一個獨一無二的id號。  3、實現向後相容      進行必要的檢查,確保老瀏覽器不會因為我們的javascript指令碼而死機, 例如:if (!document.getElementsByTagName) return false                         //對象檢測,如果瀏覽器不支援,就立即退出,不執行。  二、搞懂了的問題 1、return false; <a href="javascript:showPic('images/coffee.jpg'); return false" title="A cup of coffee">Coffee</a>return false這個語句的作用,就是阻止瀏覽器的預設行為不發生 當點擊這個連結時,因為onclick事件處理函數所觸發的javascript代碼返回給它的值是false,所以這個連結 在被點擊時預設行為將不會發生。 同樣,onclick="showPic(this);return false;"加了return false後可以不讓使用者被他們所點擊的連結帶到另一個圖片查看視窗去。 2、document.body(專用記號) 等價於一下: var body_element = document.getElementByTagName("body")[0]; 3、結構化設計原則 每個函數應該只有一個入口和一個出口。 4、如何將多個javascript函數綁定到onload事件處理函數上 法一:匿名函數 window.onload = function(){    firstFun();    secondFun(); } 法二: 自己編寫代碼(寫一個判斷函數) 如果未載入,就載入事件函數;如果已載入,則追加到後面。!!注意:要把window.onload事件處理函數的值放進oldonload中 複製代碼function addLoadEvent(func){    var oldonload = window.onload;    if(typeof window.onload != 'function'){  //判斷頁面是否已載入  ,已載入的話就追加到後面        window.onload = func;              }else{        window.onload = function(){            oldonload();                      //            func();        }    }}複製代碼  三、javascript美術館(改進)全部代碼 gallery.html檔案 複製代碼<!DOCTYPE html><html>    <head>        <meta charset="utf-8" />        <title></title>        <link rel="stylesheet" href="style/css/gallery.css" type="text/css" />        <script src="js/showPic.js"></script>    </head>    <!--        作者:1107989194@qq.com        時間:2014-04-14        描述:javascript美術館        預留位置、動態建立元素、        1、實現預留退路 (js被禁掉,圖片也可以顯示出來,href屬性帶有圖片路徑)        2、實現分離javascript(外部檔案裡完成添加onclick事件處理函數的工作,那樣才能讓我們的html文檔沒有“雜質)        3、實現向後相容(進行必要的檢查,向後相容性if (!document.getElementsByTagName) return false)    -->    <body>        <h1>Snapshots</h1>        <ul id="imagegallery">            <li><a href="images/01.jpg" title="01 display"><img width="100px" src="images/01.jpg" alt="01"/></a></li>            <li><a href="images/02.jpg" title="01 display"><img width="100px" src="images/02.jpg" alt="01"/></a></li>            <li><a href="images/03.jpg" title="01 display"><img width="100px" src="images/03.jpg" alt="01"/></a></li>        </ul>    </body></html>複製代碼css檔案 複製代碼*{    margin: 0;    padding: 0;    border: 0px;    list-style: none;}body{    font-family:"arial, helvetica, sans-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: 0px;}複製代碼js檔案: 複製代碼/***********判斷頁面是否已載入事件的函數********************************/function addLoadEvent(func){    var oldonload = window.onload;    if(typeof window.onload != 'function'){  //判斷頁面是否已載入  ,已載入的話就追加到後面        window.onload = func;              }else{        window.onload = function(){            oldonload();                      //            func();        }    }} /***********自訂函數   將元素插入到一個元素的後面************************/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;      //對象檢測    如果瀏覽器不支援,則停止執行並返回false    if(!document.createTextNode) return false;    if(!document.getElementById) return false;    if(!document.getElementById('imagegallery')) return false;        var placeholder = document.createElement('img');    placeholder.setAttribute('id','placeholder');    placeholder.setAttribute('src','images/placeholder.jpg');    placeholder.setAttribute('width','400px');    placeholder.setAttribute('alt','my image gallery');        var description = document.createElement('p');    description.setAttribute('id','description');    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) return false;      //對象檢測    if(!document.getElementsByTagName) return false;    if(!document.getElementById('imagegallery')) return false;        var gallery = document.getElementById('imagegallery');   //根據它的父級元素,找到所要的a標籤,縮短尋找事件(即使通過tagName可直接找到所有的a標籤)    var links = gallery.getElementsByTagName('a');    for(var i =0; i<links.length; i++){        links[i].onclick = function(){            return showPic(this);        }        links.onkeypress = links[i].onclick;    }} /**************顯示圖片********************************************/function showPic(whichpic){    if(!document.getElementById('placeholder')) return false;  //對象檢測    var source = whichpic.getAttribute('href');    var placeholder = document.getElementById('placeholder');    placeholder.setAttribute('src',source);            if(!document.getElementById('description')) return false;    if(whichpic.getAttribute('title')){        var text = whichpic.getAttribute('title');    }else{        var text = '';    }        var description = document.getElementById('description');    if(description.firstChild.nodeType == 3){        description.firstChild.nodeValue = text;    }    return false;} addLoadEvent(preparePlaceholder);addLoadEvent(prepareGallery);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.