JavaScript创建可维护幻灯片效果(5)
作者:blank 来源:蓝色理想 发布时间:2008-06-21 16:42:00
第五步:轻松维护(Easing Maintenance)
脚本功能齐全,分离式而且无懈可击。真正的问题是,现在并不方便维护。
脚本应用的最大的问题大概是,并不是所有的维护者都懂 JavaScript 和愿意在你的脚本中寻找需要修改的部分。
为了避免维护者做这些,最安全的方法就是把脚本和 CSS 中使用的命名和 ID 从你的脚本功能中分离出来。此外,从使用的脚本中分离出文本标签也是个好点子,因为他们可能会改变。例如,当脚本使用其他语言本地化时。
工具方法的复用
第一件要做的事情就是,从主要脚本中分离出其他脚本也可以再用的工具函数。这也许是大部分 JavaScript 库的开始。
/* 辅助方法 */
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 到一个单独的包含文件。保证他们在 slideshow 命名空间里是安全的,因为其他脚本不太可能用到他们。也不会妨碍写一个简短的说明注释。
slideshow.css = {
/*
这些都是幻灯片效果中使用到的 classe 和 ID。
你可以在这里修改他们中的任何一个。
务必请使用引号包围名称,用逗号结尾(除了最后一个)。
*/
showID :'slideshow',
dynamicClass :'js',
slideNavigationClass :'slidenav',
currentClass :'current'
}
文本标签(Text labels)—— 解释给终端用户
最后但不是最不重要的,让我们将文本标签放到一个单独的包含文件,再次使用 slideshow 命名空间。
slideshow.labels = {
/*
这些都是幻灯片效果中使用到文本标签。
你可以在这里修改他们中的任何一个。
务必请使用引号包围名称。
最后一个结尾不用逗号。
*/
previous : '<<',
next : '>>’,
counterDivider : ‘ of ‘
}
改变的主要脚本
然后,我们需要修改主要脚本使用此信息,而不是依赖嵌入式的数据。没有太多的改变,很容易用搜索加替换就能做到。
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);
这些所有文件是确保将来维护者不用麻烦你就可以使用你的脚本工作所需要的。文件名应该很明显,是什么就是什么,并能随着时间的推移,成为一个标准的脚本:
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》


猜你喜欢
- 这是一个第三方库,可以处理xlsx格式的Excel文件。pip install openpyxl安装。如果使用Aanconda,应该自带了。
- mysql数据通过data文件恢复mysql磁盘文件被损坏,无法启动,能看到data文件,在没有备份的话如何复原?情景1:知道数据库中的表结
- 简介LRU(Least Recently Used)最近最少使用,最近有时间和空间最近的歧义,所以我更喜欢叫它近期最少使用算法。它的核心思想
- 检测剪刀石头布三种手势,通过摄像头输入,方法如下:选用合适颜色空间及阈值提取皮肤部分使用滤波腐蚀膨胀等方法去噪边缘检测寻用合适方法分类Ope
- 方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为
- 前言公司的Ubuntu服务器对于各个系统的目录是放在不同的逻辑分区上的,比如存放mysql数据库文件的默认目录/var/lib/mysql所
- python-pymysql获取字段名称-获取内容获取字段名称-获取内容import pymysql# 连接数据库db = pymysql.
- 学一些比较知名的模型对身体有好处噢!什么是VGG16模型VGG是由Simonyan 和Zisserman在文献《Very Deep Conv
- 1.假设已经有mysql-5.5.10.tar.gz以及cmake-2.8.4.tar.gz两个源文件(1)先安装cmake(mysql5.
- 前言在实际开发中, 有不少的场景需要使用到模糊查询, MongoDB shell 模糊查询很简单:db.collection.find({&
- 120726 11:57:22 [Warning] 'user' entry 'root@localhost.loc
- 前言某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~当我打开文件夹以回顾往事之余,惊现许多看似杂乱的无聊代码。我拍腿正坐,一个想法油然而
- 在SQL Server开发问题中你可能会问到的十个问题:1、什么是常见的对表和字段的名字约束?2、有没有可能在不了解T-SQL的情况下编写存
- 导语"盘子里最后一块肉给你 一 冰激凌的第一口给你 一手机最后的10%电量给你!"哈喽大家好!我是木木子,我要开始给大家
- 本文实例为大家分享了python3.6.1安装教程,供大家参考,具体内容如下1、安装编译环境所需包#yum install zlib-dev
- 本文实例为大家分享了js实现圆形菜单选择器的具体代码,供大家参考,具体内容如下代码:<head> <style
- 使用python3调用wxpy模块,监控linux日志并定时发送消息给群组或好友,具体代码如下所示:#!/usr/bin/env pytho
- 环境:python3.5,pycharm2017.2.3目录结构a.pyt=5b.pyfrom a import tprint(t)平台显示
- 1. 问题虽然scrapy能够完美且快速的抓取静态页面,但是在现实中,目前绝大多数网站的页面都是动态页面,动态页面中的部分内容是
- 1.字符串转二进制数组 string content="这是做个测试!"; System.Text.UnicodeEnc