当前位置:嗨网首页>书籍在线阅读

19-讨论

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

11.4.3 讨论

将滑块绑定到一个文本输入框是选择之一;另一种选择是将其绑定到一个选择列表,并使用选择列表的选项作为数值。

我们以客房预订为例,用户在系统中输入最小床位数。最大床位数为6;因此,滑块是个不错的选择。使用渐进增强,可以用一个滑块,将其变化反馈到 <select> 元素,对其加以改进:

<select name="minbeds" id="minbeds">
   <option>1</option>
   <option>2</option>
   <option>3</option>
   <option>4</option>
   <option>5</option>
   <option>6</option>
</select>
var select = $("#minbeds");
var slider = $('<div id="slider"></div>').insertAfter(select).slider({
   min: 1,
   max: 6,
   range: "min",
   value: select[0].selectedIndex + 1,
     slide: function(event, ui) {
   select[0].selectedIndex = ui.value−1;
}
});
$("#minbeds").click(function() {
   slider.slider("value", this.selectedIndex + 1);
});

现有标记没有任何语义含义,因此不使用它,而是动态生成 <div> 并将其插入DOM,紧接在 <select> 之后。

因为只有一个值,所以用 value 选项代替 values 选项。直接用选择列表的DOM属性 selectedIndex 初始化该选项。属性从0开始,所以加上1。

当按键或者通过鼠标拖动手柄更新滑块时,通过设置 selectedIndex 属性更新选择列表,设置的值从传递给每个 ui 事件的 ui 对象中读取。在初始化时加上的偏移值1现在要减去。

尽管只有一个手柄,但还是设置了 range 选项。该选项的参数可以是字符串,也可以是布尔值:设置为 min 显示从滑块起始位置到手柄位置的范围;设置为 max 显示从滑块终点到手柄之间的范围。这有助于形象地表示旅馆客房的最小床位数。

最后,为选择列表绑定了一个单击事件,在用户直接修改选择列表的时候更新滑块。还可以隐藏选择列表,但是需要添加另一种形式的标签,显示选中的数字值。

插件还支持两种例子中未介绍的选项:

  • 设置 animate: true ,在单击滑块某个位置的时候,手柄以动画的形式移动到目标位置。
  • 设置 orientation: vertical 显示垂直滑块,代替默认的水平滑块。

还有其他一些事件,提供更细粒度的控制:

  • start 在滑动开始时调用。
  • stop 在滑动停止时调用。
  • change 在滑动停止且滑块值变化的时候调用;这个事件在滑块变动触发高代价操作(如向服务器发送请求、更新图形等)时特别有用。当然,它会使滑块的行为更不明显,因为滑动的时候没有实时的反馈。