第五步:輕松維護(hù)(Easing Maintenance)
腳本功能齊全,分離式而且無懈可擊。真正的問題是,現(xiàn)在并不方便維護(hù)。
腳本應(yīng)用的最大的問題大概是,并不是所有的維護(hù)者都懂 JavaScript 和愿意在你的腳本中尋找需要修改的部分。
為了避免維護(hù)者做這些,最安全的方法就是把腳本和 CSS 中使用的命名和 ID 從你的腳本功能中分離出來。此外,從使用的腳本中分離出文本標(biāo)簽也是個(gè)好點(diǎn)子,因?yàn)樗麄兛赡軙?huì)改變。例如,當(dāng)腳本使用其他語言本地化時(shí)。
工具方法的復(fù)用
第一件要做的事情就是,從主要腳本中分離出其他腳本也可以再用的工具函數(shù)。這也許是大部分 JavaScript 庫的開始。
tools.js:
/* 輔助方法 */ tools = { addEvent:function( obj, type, fn ) { if ( obj.attachEvent ) { obj['e'+type+fn] = fn; obj[type+fn] = function(){ obj['e'+type+fn]( window.event ); } obj.attachEvent( ‘on’+type, obj[type+fn] ); } else obj.addEventListener( type, fn, false ); }, removeClass:function(o,c){ var rep=o.className.match(’ ‘+c)?’ ‘+c:c; o.className=o.className.replace(rep,”); }, addClass:function(o,c){ var test = new RegExp(”(^|\\s)” + c + “(\\s|$)”).test(o.className); if(!test){o.className+=o.className?’ ‘+c:c;} }, cancelClick:function(e){ if (window.event){ window.event.cancelBubble = true; window.event.returnValue = false; } if (e && e.stopPropagation && e.preventDefault){ e.stopPropagation(); e.preventDefault(); } } }
CSS 的 class 和 ID —— 外觀
下一步要做的是,分離外觀的 class 和 ID 到一個(gè)單獨(dú)的包含文件。保證他們?cè)?slideshow 命名空間里是安全的,因?yàn)槠渌_本不太可能用到他們。也不會(huì)妨礙寫一個(gè)簡短的說明注釋。
slideshow-css.js:
slideshow.css = { /* 這些都是幻燈片效果中使用到的 classe 和 ID。 你可以在這里修改他們中的任何一個(gè)。 務(wù)必請(qǐng)使用引號(hào)包圍名稱,用逗號(hào)結(jié)尾(除了最后一個(gè))。 */
showID :'slideshow', dynamicClass :'js', slideNavigationClass :'slidenav', currentClass :'current' }
文本標(biāo)簽(Text labels)—— 解釋給終端用戶
最后但不是最不重要的,讓我們將文本標(biāo)簽放到一個(gè)單獨(dú)的包含文件,再次使用 slideshow 命名空間。
slideshow-labels.js:
slideshow.labels = { /* 這些都是幻燈片效果中使用到文本標(biāo)簽。 你可以在這里修改他們中的任何一個(gè)。 務(wù)必請(qǐng)使用引號(hào)包圍名稱。 最后一個(gè)結(jié)尾不用逗號(hào)。 */
previous : '<<', next : '>>’, counterDivider : ‘ of ‘ }
改變的主要腳本
然后,我們需要修改主要腳本使用此信息,而不是依賴嵌入式的數(shù)據(jù)。沒有太多的改變,很容易用搜索加替換就能做到。
slideshow.js:
slideshow = { current:0, init:function(){ if(document.getElementById && document.createTextNode){ var list =document.getElementById(slideshow.css.showID); if(list){ slideshow.items = list.getElementsByTagName('li'); slideshow.all = slideshow.items.length; if(slideshow.all > 1){ tools.addClass(list, slideshow.css.dynamicClass); slideshow.createNav(list); } } slideshow.show(); } }, createNav:function(o){ var p = document.createElement('p'); tools.addClass(p, slideshow.css.slideNavigationClass); slideshow.prev = document.createElement('a'); slideshow.prev.setAttribute('href', '#'); var templabel = document.createTextNode(slideshow.labels.previous); slideshow.prev.appendChild(templabel); tools.addEvent(slideshow.prev, 'click', slideshow.show); p.appendChild(slideshow.prev); slideshow.count = document.createElement('span'); templabel =document.createTextNode((slideshow.current+1) + slideshow.labels.counterDivider + slideshow.all); slideshow.count.appendChild(templabel); p.appendChild(slideshow.count); slideshow.next = document.createElement('a'); slideshow.next.setAttribute('href', '#'); var templabel = document.createTextNode( slideshow.labels.next); slideshow.next.appendChild(templabel); tools.addEvent(slideshow.next, 'click', slideshow.show); p.appendChild(slideshow.next); o.parentNode.insertBefore(p, o); }, show:function(e){ if(this === slideshow.next || this === slideshow.prev){ tools.removeClass(slideshow.items[slideshow.current], slideshow.css.currentClass); var addto = this === slideshow.next ? 1 : -1; slideshow.current = slideshow.current + addto; if(slideshow.current < 0){ slideshow.current = (slideshow.all-1); } if(slideshow.current > slideshow.all-1){ slideshow.current = 0; } } var templabel = document.createTextNode((slideshow.current+1) + slideshow.labels.counterDivider + slideshow.all); slideshow.count.replaceChild(templabel, slideshow.count.firstChild); tools.addClass(slideshow.items[slideshow.current], slideshow.css.currentClass); tools.cancelClick(e); } } tools.addEvent(window,’load’,slideshow.init);
這些所有文件是確保將來維護(hù)者不用麻煩你就可以使用你的腳本工作所需要的。文件名應(yīng)該很明顯,是什么就是什么,并能隨著時(shí)間的推移,成為一個(gè)標(biāo)準(zhǔn)的腳本:
tools.js slideshow.js slideshow-labels.js slideshow-css.js slideshow.css
原作者:Christian Heilmann 譯者:懌飛 原文:《A detailed explanation how to create a maintainable dynamic slide show in JavaScript》
本文鏈接:http://www.95time.cn/tech/web/2008/5895.asp
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
上一頁 JavaScript創(chuàng)建可維護(hù)幻燈片效果 [4] 下一頁
◎進(jìn)入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|