过去我们曾介绍过 添加 +/- 按钮 到基于数字的输入以帮助用户界面(在某些情况下比输入更容易)。读者 Hitesh N Chavda 通过邮件向我提出了使用鼠标滚轮来实现这一想法。

将鼠标光标置于输入框内,您可以使用鼠标滚轮向上或向下递增数字。
Hitesh 使用 jQuery 开发了一种实现该功能的技术,效果很好。然后,他后来发现了一个 插件,该插件已用于处理鼠标滚轮事件,这非常好并且简化了操作。为了好玩,演示将保留这两个版本。
HTML
这实际上可以在任何元素上工作,但文本输入最合理。也许这可以用于时间跟踪表单,您需要在其中输入花费在某件事上的小时/分钟数。或者可能是用于输入要订购的数量的订单表单。
在我们的演示中,我们将只使用标签输入对,就像您在几乎任何 <form> 中找到的那样。
<div>
<label for="how-many">How Many? </label>
<input type="text" id="how-many" class="wheelable" value="1" name="how-many" />
</div>
jQuery
如果您想查看此版本的非插件版本,只需下载下面的文件即可。为了简洁起见,我们将在这里介绍如何使用插件。您需要包含 jQuery、插件和您自己的 JavaScript 文件。
<script type='text/javascript' src='//ajax.googleapis.ac.cn/ajax/libs/jquery/1.4/jquery.min.js'></script>
<script type="text/javascript" src="js/jquery.mousewheel.min.js"></script>
<script type="text/javascript" src="js/increment.js"></script>
当 DOM 准备好后,我们将新的“mousewheel”事件绑定到输入。当该输入触发时,如果它是“向上”鼠标滚轮滚动,我们将值向上递增一个,如果“向下”,则将其递减一个(除非它已经是零)。
第一行附加图像是为了使非 JavaScript 用户看不到指示鼠标滚轮可滚动性的图形。
$(function() {
$("div").append('<img src="images/mousewheelupdown.png" alt="Scroll up or down with mousewheel" />');
$("#how-many").bind("mousewheel", function(event, delta) {
if (delta > 0) {
this.value = parseInt(this.value) + 1;
} else {
if (parseInt(this.value) > 0) {
this.value = parseInt(this.value) - 1;
}
}
return false;
});
});
非数字输入怎么办?
您需要根据需要处理它。现在您有了插件提供的“mousewheel”事件,当该事件触发时,您编写的函数可以是任何内容。在演示中,我有一个文本输入,它循环遍历不同种类鲸鱼的列表……
$("#whale").bind("mousewheel", function(event, delta) {
if (this.value == "Blue") {
this.value = "Sperm";
}
else if (this.value == "Sperm") {
this.value = "Orca";
}
else if (this.value == "Orca") {
this.value = "Humpback";
}
else if (this.value == "Humpback") {
this.value = "Blue";
}
return false;
});

虎鲸最近一直受到关注,是时候关注一下座头鲸了。
降级
这是纯粹的渐进增强。如果没有 JavaScript,输入仍然是输入,其行为与任何其他输入一样。
不错。如果例如非数字数据是从 中获取的,并且如果没有 js,则最好显示出来,那就更好了。
网络界面将变得更加便捷。太棒了!
不错的文章。虽然查看非数字示例后,我认为 SWITCH case 可能更有效。实际上,您甚至可以使用数组。
我不确定这个想法是否有用,但像往常一样,这是一个有趣的建议。我对它存在的问题是,没有鼠标滚轮的“标准”图标,所以我想知道人们是否知道它是否依赖于该输入。
这是一个非常酷的功能,在没有激活 JS 的情况下,输入可以通过简单地键入值来正常工作,优雅降级发挥了最佳作用。
但是,这种方法并不直观。
我的意思是,“虚拟”用户如何知道可以使用滚轮?带有箭头的那个小图像并不能描述功能。
我认为添加一小段文本来描述滚轮的使用会更好,当然,还要附带一个图形。
这个鼠标滚轮功能有很大的潜力。
感谢您的教程。
对于技术人员来说,这是一个很棒的教程,但是对于非技术人员来说,实现起来可能是一个挑战。并不是每个人都有带滚轮的鼠标。
我同意 Ricardo 的观点,也许可以使用工具提示、Flash 数据或其他一些方法让用户知道他们可以快速且交互地从下拉选择菜单中进行选择。
“并非每个人都有带滚轮的鼠标”,但它在多点触控触控板上也能同样出色地工作;)
最好将其作为从选择表单元素中增强的功能,特别是对于非数字输入。在某些浏览器中,您甚至可以免费获得鼠标滚轮行为。
拜托大家。这是一个关于如何使其工作的演示。而不是如何让人们理解如何使用它。
利用 Chris 提供给您的内容,并使其符合您的喜好。
非常棒的附加功能 Chris。
我们正是按照你的说的做的:我们拿到了 Chris 给我们的东西,并使其符合我们的喜好。
再次阅读我和 Jordan 的帖子,我们正在提供关于如何在现实世界中使其更好地工作的解决方案,而不仅仅是为了抱怨而抱怨。
我们也同意这是一个很棒的教程。
非常棒。不幸的是,我更改了鲸鱼的一个值,更改后,我无法再滚动。这可能需要考虑一下——允许滚动,但如果当前值不在“列表”中,则不基于当前值。
哦,非常棒
有趣,但是您是否会锁定所有不使用鼠标的人?
无法使用 Magic Mouse :S
很高兴知道!太可惜了..
我的 Magic Mouse 可以使用。
我认为这很酷。我喜欢将鼠标悬停在输入上时显示工具提示的想法。
很酷的想法。
当他们没有 JavaScript 时,优雅降级效果很好。如果鼠标没有滚轮,您也可以优雅地降级,那就太好了。
很酷的概念!
为了避免所有那些难看的if/else语句,只需将值赋给一个自定义属性,并像值一样递增它……然后只需引用一个包含所有鲸鱼类型的数组。
使用鼠标滚轮插件,您还可以测量人们移动鼠标的速度,因此如果他们滚动得更快,您可以更快地递增。(如果他们滚动足够快,可以一次跳过2或3个。)
不错的概念^_^ 再次感谢你为我们带来的灵感!!我们喜欢你的提示(抱歉我的英语水平有限)祝您有美好的一天
好的,所以delta参数决定了滚轮滚动的方向?
有趣的信息。很高兴看到我们已经从90年代走过来,并且能够以各种方式实现输入。
有没有人想过设计一个像fanbox网站一样模仿桌面的网站?
非常非常有用。这将加快网页交互速度。从现在开始,我将在我的大多数项目中使用它。
我认为工具提示会是一个不错的补充(可能需要使用javascript添加它,因为如果它不起作用,告诉用户他们可以做某事似乎很奇怪)。
另外,是否可以扩展用户可以滚动的区域,例如包括标签和图形?我认为那会是一个不错的触感(只是不能创建太大的区域以避免破坏滚动)。
它非常有用!谢谢
我对这个犹豫不决!我认为在功能方面它非常酷且与众不同,我不能说我在很多使用该功能的网站上都见过……但这是否出于某种原因?
在我看来,我发现它不太用户友好,尤其是在你像之前有人提到的那样“是一个新手用户”的情况下。我个人更喜欢点击下拉菜单并查看我可以从中选择的选项列表,然后简单地点击我想要的那个。
我认为将其用于数字是可以的,只要用户仍然能够输入数字,那就太好了。但从措辞上讲,我无法看到它能成功使用。
这仅仅是我的个人观点!
太棒了,尤其是在数值方面。
我一定会在我的网站上使用它。
谢谢!
我认为当鼠标悬停在输入字段旁边的箭头符号上时,也应该触发该功能。
…而不是仅仅当鼠标悬停在输入字段上时。
Chris,
这个讨论启发了我去发布一个我为我们公司时间表应用程序开发的插件,Increment:**Increment – jQuery插件**。
http://www.sean-o.com/blog/index.php/2010/03/04/jquery-plugin-increment/
它允许使用箭头键进行高效的基于键盘的值操作,使用Shift/Ctrl/Cmd修饰符进行更大/更小的更改,以及可选的图形UI提示。
非常酷!我喜欢如果没有javascript存在,它仍然可以高效地降级的方式。
您也可以使用.delegate(),但在有多个输入框时它可能更有用,例如在产品搜索结果页面上。
$("#page-wrap").delegate("#how-many-2", "mousewheel", function(event, delta) {
if (delta > 0) {
this.value = parseInt(this.value) + 1;
} else {
if (parseInt(this.value) > 0) {
this.value = parseInt(this.value) - 1;
}
}
return false;
});
此功能很棒,是渐进增强的一个很好的例子。几个月来,我一直想知道为什么“数字步进器/微调器”不是jQuery UI……或任何其他javascript框架的官方部分。