首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅重写箭头键滚动事件

问仅重写箭头键滚动事件
EN

Stack Overflow用户
提问于 2012-09-14 03:51:30
回答 2查看 254关注 0票数 1

所以我创建了一个自定义滚动框,因为标准的html < select>框不能处理它(我需要显示两列,但是不知道如何使用< select>)。无论如何,我有一个可滚动的表格,它的工作方式正是我想要的。除了向上和向下箭头键触发整个滚动,而不是选择表中的前一个或前两个元素。

带有适当的向上和向下http://jsfiddle.net/a5YJK/绑定的html < select >

我的自定义选择没有适当的向上和向下http://jsfiddle.net/8zgxA/3/

当我跑的时候

代码语言:javascript
复制
$('#wrap *').scroll(function(e){}); 

我无法区分鼠标滚动和向上或向下箭头。我该如何区分?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-14 04:09:00

只需检查滚动事件中不存在的e.keyCode或e.which即可。

代码语言:javascript
复制
$(window).on('keyup scroll', function(e){
    console.log(e.keyCode); //undefined for mouse scroll

    if(e.keyCode && e.keyCode == 40){
        //down arrow, scroll might occur, so prevent it or do whatever
    }
}); ​

DEMO

票数 1
EN

Stack Overflow用户

发布于 2012-09-14 04:57:32

代码语言:javascript
复制
<table onfocus="focused(1)" onblur="focused(0)" onkeypress="selectnext(event)">
.
.
.
</table>

<script type="text/javascript">
var currentrow = 0;
var tablefocused;
function focused(a)
{
switch(a)
{
case 1:
tablefocused = 1;
break;
case 0:
tablefocused = 0;
break;
}
}
function selectnext(e)
e.stopPropagation();
{
if(tablefocused==1)
{
switch(e.keyCode)
{
case 38:
currentrow = currentrow-1;
this.childNodes[currentrow].style.backgroundColor = "blue";
$('tr').css('background', '');
break;
case 40:
currentrow = currentrow+1;
this.childNodes[currentrow].style.backgroundColor = "blue";
$('tr').css('background', '');
break;
}
}
}
</script>

我在这段代码中遗漏了一些细节,例如' currentrow‘不应该转到-1,单击行应该将currentrow的值更改为该行e.t.c。

哦,为了防止滚动,您可以使用stopPropagation()函数来防止事件冒泡。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12413757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档