JavaScript创建可维护幻灯片效果(4)
作者:blank 来源:蓝色理想 发布时间:2008-06-21 16:42:00
第四步:脚本(The Script)
现在,在适当的位置我们有所有的方法工具,以及当窗口载完时被调用的 init() ,我们可以开始具体化此方法。
注:这仅是 init() 方法,而不是整个脚本。因为有行号,复制并粘贴脚本将会导致错误。
1: init:function(){
2: if(document.getElementById && document.createTextNode){
3: var list = document.getElementById(' ');
4: if(list){
5: slideshow.items = list.getElementsByTagName('li');
6: slideshow.all = slideshow.items.length;
7: if(slideshow.all > 1){
8: slideshow.addClass(list, 'js');
9: slideshow.createNav(list);
10: }
11: }
12: slideshow.show();
13: }
14: },
第2行,检测 DOM 是否被支持。
第3和4行,尝试检索 ID 为 slideshow 的元素,如果没有被定义则不执行余下的方法。
第5和6行,检索列表项及列表项的个数,并分别储存在属性 items 和 all 里。
第7行,检测是否超多一个列表项,如果不超多则不执行余下的。
第8行,添加 js 样式类名到列表上,从而隐藏列表项和应该不同的样式。
第9行,调用 createNav(),并提供这个列表作为参数。
第12行,调用 show() 用来显示预定义了 current 属性的滑动门。
createNav() 方法使用 DOM 脚本创建幻灯片正常工作所需的 HTML。
1: createNav:function(o){
2: var p = document.createElement('p');
3: slideshow.addClass(p, 'slidenav');
4: slideshow.prev = document.createElement('a');
5: slideshow.prev.setAttribute('href', '#');
6: var templabel = document.createTextNode('<<');
7: slideshow.prev.appendChild(templabel);
8: slideshow.addEvent(slideshow.prev, 'click', slideshow.show);
9: p.appendChild(slideshow.prev);
10: slideshow.count = document.createElement('span');
11: templabel = document.createTextNode( (slideshow.current+1) + ' / ' + slideshow.all);
12: slideshow.count.appendChild(templabel);
13: p.appendChild(slideshow.count);
14: slideshow.next = document.createElement('a');
15: slideshow.next.setAttribute('href', '#');
16: var templabel = document.createTextNode('>>’);
17: slideshow.next.appendChild(templabel);
18: slideshow.addEvent(slideshow.next, ‘click’, slideshow.show);
19: p.appendChild(slideshow.next);
20: o.parentNode.insertBefore(p, o);
21: },
第2和3行,刚开始创建一个 P 元素,用来包含整个幻灯片导航,并应用一个名为 slidenav 的 class。
第4和5行,创建一个新的链接元素,储存在叫 prev 的属性中,设置 href 属性为 #。使链接显示为一个真正的链接且键盘可用,是有必要的。
第6行,创建一个新的文本标签。
第7行,将文本标签添加到链接上。
第8行,添加一个事件处理函数,指向 show() 监听方法。
第9行,将新的链接添加到 段落上。
第10行,开始计数器,我们创建一个 SPAN 元素,并用 count 属性储存他。
第11行,创建一个新的文本节点,显示当前幻灯片在总数中的位置。我们需要给当前的属性增加 1,因为人类计数是从 1 开始而非从 0。
第12行,将文本作为新的子节点,添加至 SPAN 上 。
第13行,将 SPAN 元素 添加到段落上。
第14至19行,基本上是复制 4 到 9 行,这次重新创建链接唯一不同的是文本标签,他储存在 next 属性上。
第20行,将最近创建的段落插入到文档中初始的图片列表前。
这些被创建的所有标记都是必要的,最后剩下的是去定义一个当链接被点击时调用的监听方法 show() 。
1: show:function(e){
2: if(this === slideshow.next || this === slideshow.prev){
3: slideshow.removeClass(slideshow.items[slideshow.current], ‘current’);
4: var addto = (this === slideshow.next) ? 1 : -1;
5: slideshow.current = slideshow.current + addto;
6: if(slideshow.current < 0){
7: slideshow.current = (slideshow.all-1);
8: }
9: if(slideshow.current > slideshow.all-1){
10: slideshow.current = 0;
11: }
12: }
13: var templabel = document.createTextNode((slideshow.current+1) + ‘ / ‘ + slideshow.all);
14: slideshow.count.replaceChild(templabel, slideshow.count.firstChild);
15: slideshow.addClass(slideshow.items[slideshow.current], ‘current’);
16: slideshow.cancelClick(e);
17: },
第1行,得到作为参数 e 的当前事件对象,这是稍后调用的 cancelClick() 唯一需要。
第2行,检测点击的元素是否是向下或者向前链接(this 由 addEvent() 返回)。
第3行,从当前显示的幻灯片上移除 current 的 class。由于现在有一个被点击的链接,这将成为可能。
第4行,通过比较 this 和 next 属性,决定 current 的计数器是应该增加还是减少。
第5行,修正计数器。
第6到11行,确定计数器将永远不会超出范围,当你在第一幻灯片并点击了向前的链接,将设置他为最后一个,而当你在最后一个幻灯片,点击了向后的链接,将设置为第一个。
第13和14行,生成一个新的计数器文本并替代旧的。
第15行,通过设置名为 current 的 class,显示新的当前幻灯片。
第16行,通过调用 cancelClick() 阻止链接的默认行为。
这些是脚本的所有内容。现在这个脚本可以工作,但仍不是真正可维护的。


猜你喜欢
- 用python实现的抓取腾讯视频所有电影的爬虫# -*- coding: utf-8 -*-import reimport urllib2f
- 之前没有注意过div的background-image这个属性,只是设置它的url,今天遇到一个问题特此做一下记录。 <div id=
- 问题描述??输入一个正整数n在n*n的方阵内填入1,2,3,4…n*n,要求填成蛇形。(回旋的向中间收敛)样例输入:4样例输出:不必严格按照
- 制作网页可说是易学难精,因此,不断吸收经验可弥补不足,以下列出的50个制作主页的独门招数可帮助你尽快成为高手,哈哈!1、让读者有理由逗留。要
- numpy.nan的数据类型是float类型import numpy as nptype(np.nan) # float任何数字和numpy
- Github 项目主页 工具源码分析结果:total : 15981 1568.0 == Backspace 1103.0 == Tab 1
- 这篇文章主要介绍了Python搭建HTTP服务过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 第一种方法:递归def perms(elements): if len(elements) <=1
- 查策实战场景本次要采集的目标站点是查策,该测试站点如下所示。目标站点网址如下www.chacewang.com/chanye/news?ne
- 数组转换成切片a := [10]int{}fmt.Println(a) s1 := a[:10] //取前10个元素
- 一、Tensor 之间的运算规则相同大小 Tensor 之间的任何算术运算都会将运算应用到元素级不同大小 Tensor(要求dimensio
- 感谢大家对《 CSS Sprites 样式生成工具 》的喜爱,综合了1.x版本时大家所提出来的意见和建议,2.0版本主要的改变有下面几点:修
- go get 和 go install 的区别先看结论:go get: 对 go mod 项目,添加,更新,删除&nbs
- 引言上一篇文章中引入了消息队列对秒杀流量做削峰的处理,我们使用的是Kafka,看起来似乎工作的不错,但其实还是有很多隐患存在,如果这些隐患不
- 根据SalesOrderID排序,取第16-18行这3条记录。方法一:(最常用的分页代码, top / not in)SELECT &nbs
- 前言MySQL在2016年仍然保持强劲的数据库流行度增长趋势。越来越多的客户将自己的应用建立在MySQL数据库之上,甚至是从Oracle迁移
- 大名鼎鼎的FCKeditor终于在最近发布新版本了,与增加版本号不同,这次完全把它改名了,更名为CKeditor。这应该是和它的开发公司CK
- T-SQL 标识符在T-SQL语言中,对SQLServer数据库及其数据对象(比如表、索引、视图、存储过程、触发器等)需要以名称来进行命名并
- 阅读上一篇:网马解密大讲堂——网马解密中级篇(Eval篇) 一.Document.write 函数简介:在Microsoft JScript
- 一、最基础的应用import urllib2url = r'http://www.baidu.com'html = urll