Mootools 1.2教程 滚动条(Slider)


Posted in Javascript onSeptember 15, 2009

尽管滚动条(Slider)遵循这个熟悉的模式,但是任然还有一点特殊的地方。
基本用法
创建一个新的滚动条(Slider)对象
我们首先从HTML和CSS开始。基本的想法是创建一个滚动条的div,因此是一个长的长方形(长度取决于我们用滚动条做什么),还有一个子元素作为滑块。
参考代码:

<div id="slider"><div id="knob"></div></div>

我们的CSS也可以这么简单。只需要设置宽、高,还有背景颜色。
参考代码:
#slider { 
width: 200px 
height: 20px 
background-color: #0099FF 
} 
#knob { 
width: 20px 
height: 20px 
background-color: #993333 
}

现在,我们可以创建我们的新滚动条对象了。要初始化滚动条,首先要把你的相关元素赋值给一些变量,然后使用“new”来创建一个滚动条Slider对象,这和我们以前创建tween、morph和drag.move时一样:
参考代码:
// 把元素赋值给变量 
var sliderObject = $('slider'); 
var knobObject = $('knob'); 
// 创建一个新的slider对象 
// 首先定义slider元素 
// 然后定义滑块元素 
var SliderObject = new Slider(sliderObject , knobObject , { 
// 这里是你的选项 
// 稍后我们会仔细讲一下这些选项 
range: [0, 10], 
snap: true, 
steps: 10, 
offset: 0, 
wheel: true, 
mode: 'horizontal', 
// 当step的值改变时将触发onchange事件 
// 它会把当前的step作为参数传入 
onChange: function(step){ 
// 在这里放置onchange时要执行的代码 
// 你可以引用step 
}, 
// 当用户拖动滑块时触发ontick事件 
// 它会传递当前的位置(相对于父元素的位置) 
onTick: function(pos){ 
// 这是必需的,用以调整滑块的位置 
// 我们会在下面详细解释这个 
this.knob.setStyle('left', pos); 
}, 
// 当拖动停止时触发 
onComplete: function(step){ 
// 当完成时要执行的代码 
// 你可以引用step 
} 
});

Slider的选项
Snap:(默认为false),可以是一个true或者false值。这决定了滑块是不是以最小单元格移动
Offset:(默认是0),这是滑块相对于开始的位置。你可以对此做一个试验。
Range:(默认是false),这是一个非常有用的选项。你可以设置一个数字范围,会依照此数字和你的步数(step)触发onchange事件。例如:如果你设置的范围是[0, 200],而且你设置的step值为10,那么每次onchange的step的值将是20。这个范围也是是负数,例如[-10,0],这个数字在做反向的滚动条时会非常有用(下面有示例)。
Wheel:(默认是false),如果设置这个参数为true,这个滚动条将会识别鼠标滚轮事件。当使用鼠标滚轮时,你肯恩需要调整range参数,以保证鼠标滚轮事件的行为不是相反的(同样,后面会有例子)。
Steps:(默认是100),默认值为100非常有用,因为它可以很容易地作为百分比使用。当然,你也可以以你的理由设置任意多步(这是可以的)。
Mode:(默认是“horizontal”),这个参数定义了滚动条是水平滚动还是垂直滚动。当然了,要从水平滚动转化为垂直滚动还需要一些其它步骤。
回调事件
onChange:当step改变时,触发这个事件。同时传递参数“step”。可以从下面的例子中看到它是什么时候触发的。
onTick:当控制点的位置发生改变时触发这个事件。同时传递参数“position”。可以从下面的例子中看到它是什么时候触发的。
onComplete:当控制点释放时触发这个事件。捅死传递参数“step”。可以从下面的例子中看到它是什么时候触发的。
代码示例
让我们建立一个示例,以便看看它们的效果。
.set();方法:看一看按钮上的事件,看是怎么使用.set()方法的。它使用起来非常简单:调用slider对象,附加.set,然后是你想要滚动的步数(step)。
参考代码:
window.addEvent('domready', function() { 
var SliderObject = new Slider('slider', 'knob', { 
// 选项 
range: [0, 10], 
snap: false, 
steps: 10, 
offset: 0, 
wheel: true, 
mode: 'horizontal', 
// 回调事件 
onChange: function(step){ 
$('change').highlight('#F3F825'); 
$('steps_number').set('html', step); 
}, 
onTick: function(pos){ 
$('tick').highlight('#F3F825'); 
$('knob_pos').set('html', pos); 
// 这一行是必需的(水平滚动使用left) 
this.knob.setStyle('left', pos); 
}, 
onComplete: function(step){ 
$('complete').highlight('#F3F825') 
$('steps_complete_number').set('html', step); 
this.set(step); 
} 
}); 
var SliderObjectV = new Slider('sliderv', 'knobv', { 
range: [-10, 0], 
snap: true, 
steps: 10, 
offset: 0, 
wheel: true, 
mode: 'vertical', 
onTick: function(pos){ 
// 这一行是必需的(垂直滚动使用top) 
this.knob.setStyle('top', pos); 
}, 
onChange: function(step){ 
$('stepsV_number').set('html', step*-1); 
} 
}); 
// 设置垂直滚动的从0开始 
// 否则的话是从顶部开始 
SliderObjectV.set(0); 
// 设置滚动条从7开始 
$('set_knob').addEvent('click', function(){ SliderObject.set(7)}); 
});

onChange
passes the step you are on: onTick
passes the knob position: onComplete
passes the current step:
注意在垂直滚动的例子中,我们不仅仅只是把“mode”改成了“vertical”,我们还改变了onTick事件中的.setStyle();方法中的“left”属性为“top”属性。另外,看一下我们是怎样设置“range”从-10开始,然后到0的。然后,我们在onChange事件中显示当前的数字,我们把这个值乘了-1,正好和位置相反。这完成了两件事情:一是让我们从10到0改变这个值,0在最底部。但是这个可能设置rang为从10到0,从而导致鼠标滚轮事件变得相反。这就是我们的第二个原因——鼠标滚轮读取值,而不是你要控制的方向,因此要让鼠标滚轮正确地读取滚动条并且从底部的0开始的值的唯一方式就是做这一点点改变。
注意:至于onTick事件中“top”和“left”的使用,我不确定这是不是MooTools中的“规则”。这只是我让它们正确运行的一种方法,我很有兴趣听到一些其他的清楚的说法。

更多学习

和以前一样,请参考文档中的sliders一节

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

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

Javascript 相关文章推荐
Visual Studio中的jQuery智能提示设置方法
Mar 27 Javascript
jQuery构造函数init参数分析续
May 13 Javascript
jquery动态导航插件dynamicNav用法实例分析
Sep 06 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
Mar 11 Javascript
jquery轮播的实现方式 附完整实例
Jul 28 Javascript
JavaScript设计模式之策略模式详解
Jun 09 Javascript
详解js的视频和音频采集
Aug 09 Javascript
vue项目中跳转到外部链接的实例讲解
Sep 20 Javascript
JS使用new操作符创建对象的方法分析
May 30 Javascript
H5+css3+js搭建带验证码的登录页面
Oct 11 Javascript
design vue 表格开启列排序的操作
Oct 28 Javascript
原生js实现弹窗消息动画
Nov 20 Javascript
Mootools 1.2教程 定时器和哈希简介
Sep 15 #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
You might like
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
php上传图片生成缩略图(GD库)
2016/01/06 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
javascript 读取XML数据,在页面中展现、编辑、保存的实现
2009/10/27 Javascript
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
使用jQuery实现返回顶部
2015/01/26 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
使用python实现名片管理系统
2020/06/18 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
python 发送get请求接口详解
2020/11/17 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
简短证婚人证婚词
2014/01/09 职场文书
幼儿园保教管理制度
2014/02/03 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
2015年消费者权益日活动总结
2015/02/09 职场文书
质量负责人岗位职责
2015/02/15 职场文书
结婚司仪主持词
2015/06/29 职场文书
消防宣传标语大全
2015/08/03 职场文书