Mootools 1.2教程 定时器和哈希简介


Posted in Javascript onSeptember 15, 2009

定时器能比它表面看起来做更多的事情——定时能定期地触发一个函数。另一方面,hash则是键值对(key/value)的集合。如果你对hash还不熟悉现在也不要着急——我们今天就会做一个快速简要的介绍,并且会提供一些延伸阅读的相关链接。就像MooTools中的所有东西一样,一旦你看到它的正确用法,它使用起来就非常的简单,并且不可思议的有用。
.periodical()函数
基本用法
使用这个方法你唯一要做的就是在一个函数的结尾添加.periodical();,那样你的函数就会定时地触发。和以前的一样,有几个东西你是需要定义的。对于初学者,你需要定义一个你需要使用定时器的函数,还有你需要它多久触发一次(以毫秒为单位)。
参考代码:

var periodicalFunction = function(){ 
alert('again'); 
} 
window.addEvent('domready', function() { 
// 结尾的数字决定了这个函数触发的时间间隔,以毫秒为单位 
var periodicalFunctionVar = periodicalFunction.periodical(100); 
});

内置的.bind()方法
.periodical()方法包含了一个非常好的特性——它可以自动地绑定第二个参数。举个例子,如果你想从domready的外面传递一个参数,你只需要把它作为第二个参数传进去,你就可以把它绑定到你要定期触发的函数上了。
参考代码:
window.addEvent('domready', function() { 
// 给一个变量赋值 
var passedVar = $('elementID'); 
// 现在periodicalFunction就可以使用"this"来引用"passedVar" 
var periodicalFunctionVar = periodicalFunction.periodical(100, passedVar); 
});

停止一个定时触发的函数
$clear()
一旦你初始化了一个定时触发的函数(就像我们上面所做的那样),如果你想停止它,你可以使用$clear();方法,它使用起来非常简单:
参考代码: [复制代码] [保存代码]
// 我们传递那个我们使用了定时器函数的定时器变量
$clear(periodicalFunctionVar);

代码示例
为把这所有的连贯起来,我们就用我们目前学过的一些东西(也有一些是没有学过的)来创建一个定时器。首先,建立一个定时器的HTML页面,我们还需要一个开始按钮,一个停止按钮,还有一个重置按钮。另外,我们还要创建一个条形块,它可以随着时间慢慢变长。最后,我们还需要一个地方来显示当前已经运行的时间。
参考代码:

<button id="timer_start">start</button> 
<button id="timer_stop">pause</button> 
<button id="timer_reset">reset</button> 
<div id="timper_bar_wrap"> 
<div id="timer_bar"> </div> 
</div> 
<div id="timer_display">0</div>

现在该是MooTools的代码了:
参考代码:
var timerFunction = function(){ 
// 每次当这个函数被调用时 
// 变量currentTime就会增加一 
// 同时要注意一下"this.counter"的使用 
// "this"是hash 
// 而"counter"是key 
var currentTime = this.counter++; 
// 这里我们改变显示时间的div里面的内容 
$('timer_display').set('text', currentTime); 
// 这里改变样式表的width属性,可以轻松地创建一个时间进度条 
$('timer_bar').setStyle('width', currentTime); 
} 
window.addEvent('domready', function() { 
// 这是一个简单的hash对象 
// 只有一个键值对(key/value pair) 
var currentCounter = new Hash({counter: 0}); 
// 我们初始化我们的定时器并传入和绑定hash变量 
var simpleTimer = timerFunction.periodical(100, currentCounter); 
// 由于我们不想在onload的时候就启动定时器 
// 因此我们在这里要停止这个定时器 
$clear(simpleTimer); 
// 在开始按钮上添加一个事件 
// 在这里再次启动这个定时器 
$('timer_start').addEvent("click", function(){ 
simpleTimer = timerFunction.periodical(100, currentCounter); 
}); 
// 在这里清除定时器 
// 并是时间条闪亮一下 
$('timer_stop').addEvent("click", function(){ 
$clear(simpleTimer); 
$('timer_bar').highlight('#EFE02F'); 
}); 
$('timer_reset').addEvent("click", function(){ 
// 重置按钮首先清除这个定时器 
$clear(simpleTimer); 
// 然后把counter设为0 
// 这个稍后再详细讲 
currentCounter .set('counter', 0); 
// 
$('timer_display').set('text', currentCounter.counter); 
$('timer_bar').setStyle('width', 0); 
}); 
});

Hash快速入门
创建一个hash
在上面的例子中,可能有一些东西是你从来没有见过的。首先,我们使用了hash。hash是一个由键值对(key/value)组成的集合,它和一个包含许多对象的数组类似,不过这些对象都只有一个属性。我们先来看一下如何建立一个hash:
参考代码:

var hashVar = new Hash({ 
'firstKey': 0, 
'secondKey': 0 
});

你需要把键(key)放在左边,而值(value)放在右边(除了那些对hash很熟悉的人外,我们只讲一些关于hash最基本的东西,我们会在以后将类时再来讲hash的存储功能)。不管怎样,使用和这类似的系统还是又很多好处的。首先,你可以在一个对象中存储多个集合,存取变得容易得多,对于组织复杂的数据组织起来。
.set()方法和.get()方法
你也可以在hash中使用你熟悉的.set()和.get()方法。当你需要设置的时候,你声明一个键(key),然后是你要设置的值。当你需要获取的时候,你值需要声明你要获取的键(key)就行了。就这么简单。
参考代码:
// 还是使用上面的hash 
// 这里我们设置firstKay的值为200 
hashVar.set('firstKey', 200); 
// 这里我们获取firstKey的值,现在是200 
var hashValue = hashVar.get('firstKey');

你可以可以通过引用hash.键名来获取一个值:
参考代码:
var hashValue = hashVar.firstKey; 
// 上面的和下面的一样 
var hashValue = hashVar.get('firstKey');

添加一个新的键值对到hash中
.extend();方法
你可以通过.extend();方法来添加一个或者多个新的键值对(key/value pair)集合到hash中。首先,我们要创建一个新的键值对对象。
参考代码:
// 这是一个普通的对象 
// 它包含键值对(key/value pairs) 
// 但是没有hash的功能 
var genericObject = { 
'third': 450, 
'fourth': 89 
};

如果我们要把这个集合加入到我们已经存在的hash中,我们只需要使用.extend();方法来扩展hash就行了:
参考代码:
//现在hashVar包含了genericObject中的所有键值对 
hashVar.extend(genericObject);

注意:任何重复的键都将会被后面的设置覆盖掉。因此,如果你在原始的hash中有"firstKey":"letterA"这样一对,然后你又扩展了一对"firstKey":"letterB",这样你在hash中的读取结果将是"firstKey":"letterB"。
合并两个hash
.combine();方法
这个方法可以让你合并两个hash对象,如果有重复的键将保留原始的值。其余的则和.extend()方法一样。
从hash中删除一个键值对
.erase();方法
我们已经见过这个方法一次了。它的工作就和你期望的那样。你声明一个hash,然后在后面副加上.erase();,最后你再把“键”(key)放在括号里面。
参考代码:
hashVar.erase('firstKey');

hash和.each()方法
hash和.each()方法又一种特别的关系,当你遍历一个hash的时候,遍历的函数将把“值”(value)作为第一个参数传递,而把“键”(key)作为第二个参数传递——这和你在数组上使用.each的时候一样,它把每个“项”(item)作为第一个参数。
参考代码:
hashVar.each(function(value, key) { 
// 这将为hash中的每一个键值对弹出一个对话框 
alert(key + ":" + value); 
});

更多学习

我们目前为止要讲的关于hash的内容就这么多了。由于这个系列教程中我们会更深入的学习,在以后我们将找一些机会来讲有关hash的更多功能。但是现在,如果你是初学者,我们只是希望你能对hash有一个基本的概念。很快我们就要讲解类(class)了,那个时候所有的东西才会串连起来。同时,阅读一下文档中有关hash的这一节

下载一个包含你开始所需要的所有东西的zip包

包括MooTools 1.2的核心库,上面的示例,一个外部的JavaScript文件,一个简单的HTML页面和一个CSS文件。

Javascript 相关文章推荐
jquery插件制作 自增长输入框实现代码
Aug 17 jQuery
JS调用页面表格导出excel示例代码
Mar 18 Javascript
AngularJS  自定义指令详解及实例代码
Sep 14 Javascript
smartupload实现文件上传时获取表单数据(推荐)
Dec 12 Javascript
js CSS3实现卡牌旋转切换效果
Jul 04 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
Jul 12 Javascript
详解Js中的模块化是如何实现的
Oct 18 Javascript
React Native 使用Fetch发送网络请求的示例代码
Dec 02 Javascript
Vue项目中ESlint规范示例代码
Jul 04 Javascript
jQuery中DOM常见操作实例小结
Aug 01 jQuery
微信小程序实现列表的横向滑动方式
Jul 15 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
Nov 11 Javascript
Mootools 1.2教程 正则表达式
Sep 15 #Javascript
MooTools 1.2中的Drag.Move来实现拖放
Sep 15 #Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
Sep 15 #Javascript
Mootools 1.2教程 Fx.Tween的使用
Sep 15 #Javascript
Mootools 1.2教程 输入过滤第二部分(字符串)
Sep 15 #Javascript
Mootools 1.2教程 输入过滤第一部分(数字)
Sep 15 #Javascript
Mootools 1.2教程 设置和获取样式表属性
Sep 15 #Javascript
You might like
PHP安装攻略:常见问题解答(三)
2006/10/09 PHP
php图片验证码代码
2008/03/27 PHP
php获取远程图片体积大小的实例
2013/11/12 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
2015/11/30 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
浅谈js中test()函数在正则中的使用
2016/08/19 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
微信小程序基于Taro的分享图片功能实践详解
2019/07/12 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
python进阶教程之文本文件的读取和写入
2014/08/29 Python
Python中用altzone()方法处理时区的教程
2015/05/22 Python
Python打印斐波拉契数列实例
2015/07/07 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
Python3视频转字符动画的实例代码
2019/08/29 Python
python统计字符的个数代码实例
2020/02/07 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
高尔夫球鞋、服装、手套和装备:FootJoy
2018/12/15 全球购物
优秀毕业生自我鉴定
2014/02/11 职场文书
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫