一个稍微复杂的响应键盘菜单选择效果
一个稍微复杂的响应键盘菜单选择效果
响应键盘 其实并不复杂
在jQuery中所有的鼠标和键盘事件都能方便的被捕捉到
捕捉鼠标点击:
$(document).mousedown(function(e){ // 1 == left; 2 == middle; 3 == right
switch(e.which){
case 1: alert("Left");
break;
case 2: alert("Middle");
break;
case 3: alert("Right");
}
})
switch(e.which){
case 1: alert("Left");
break;
case 2: alert("Middle");
break;
case 3: alert("Right");
}
})
响应键盘按键:
$(document).keydown(function(e){ //用 $(document).keydown(fn)来相应键盘事件
switch(e.which){
case 27: hideul();
break;
case 38: countup();
break;
case 40: countdown();
break;
case 39: countrit();
break;
case 37: countlft();
break;
case 13: sure();
break;
default: return false;
}
})
switch(e.which){
case 27: hideul();
break;
case 38: countup();
break;
case 40: countdown();
break;
case 39: countrit();
break;
case 37: countlft();
break;
case 13: sure();
break;
default: return false;
}
})
前两天写了个下拉菜单点选的小东西 也是由于项目需要 贴一下代码 当然可以直接看 DEMO
http://www.titan24.com/scripts/test/ 里面有个地方没有做好 就是响应键盘的时候 没有实现循环翻转 哪位高人帮着改一下 不胜感激。
// JavaScript Document By Trance
$(document).ready(function(){
var t=false;
var target;
var hidinput;
function cur(ele){ //标记当前函数
ele=$(ele)? $(ele):ele;
ele.addClass("cur").siblings().removeClass("cur");
}
function showsub(ele){ //显示子列表
ele=$(ele)? $(ele):ele;
ele.find("ul").show();
cur(ele.find("ul").find("li:first"));
ele.siblings("li").find("ul").hide();
}
$("#play").find("span").click(
function(){ //点击调出相应列表
var _this=$(this);
var y , x;
x=_this.css("left");
var _ul=_this.siblings("ul.sel_ply");
if($("#play span").index(_this[0])<4){ //第四个列表开始向上显示
y= parseInt(_this.css("top"))+parseInt(_this.height())+33+"px";
_ul.css({top:y,left:x}).show();
cur(_ul.children("li:first")); //默认标记第一个 方便响应键盘
}else{
y= parseInt(_this.css("top"))-parseInt(4+_ul.height())+"px";
_ul.css({top:y,left:x}).show();
cur(_ul.children("li:first"));
//cur(_ul.children("li:last")) //默认标记最后一个 方便响应键盘
}
$("ul.sel_ply").not(_ul).hide();
_ul.find("em").html(_this.attr("title"));
target=$(this); //点哪个就给哪个赋值
hidinput=$(this).next("input"); //输入框也同时填上值
}
)
$("#play").find("li").hover(
function(){ //划过显示子选项
cur(this);
showsub(this);
},
function(){
$(this).find("ul").hide();
}
)
$("#play").find("li li").click(function(){ //选中赋值 同时给隐藏的input赋值
var _this=$(this);
var aim=_this.html();
target.html(aim);
hidinput.val(aim);
cur(this);
hideul();
//下面是排它功能 默认不启用
/*var cli=$("#play li li");
for(i=0; i<cli.length; i++){
if(cli.eq(i).html()==aim && cli.eq(i)!==_this){
cli.eq(i).remove();
}
}*/
})
var hidelist=function hideul(){ //隐藏所有列表 取消选择状态
$("#play").find("ul").hide();
$("#play li").removeClass("cur");
}
function countdown(){ //下选 键盘down键
var _cdul=$("#play ul:visible").children("li.cur");
var nxt=_cdul.next("li") ? _cdul.next("li") : $("#play ul:visible").find("li:first"); //从这里开始选择器不对了
cur(nxt);
showsub(nxt);
}
function countup(){ //上选 键盘up键
var prv=$("#play ul:visible > li.cur").prev("li") ? $("#play ul:visible > li.cur").prev("li") : $("#play ul:visible").find("li:last");
cur(prv);
showsub(prv);
}
function countrit(){ //子菜单下选 键盘 right 键
var _cul=$("#play ul:visible > li.cur").find("ul");
var _cui=_cul.find("li.cur");
var _cnx=_cui.next("li") ? _cui.next("li"):_cul.find("li:first");
cur(_cnx);
}
function countlft(){ //子菜单上选 键盘 left 键
var _cul=$("#play ul:visible > li.cur").find("ul");
var _cui=_cul.find("li.cur") ? _cul.find("li.cur") : _cul.find("li:last");
var _cnx=_cui.prev("li");
cur(_cnx);
}
function sure(){ //回车确定 赋值
$("#play").find("ul:visible li li.cur").click();
}
$("#play").mousedown(function(e){
if(e.which==3){ // 1 == left; 2 == middle; 3 == right 右键隐藏
hideul();
}
}).hover(function(){ //离开延时隐藏 1.5秒默认
if(t){
clearTimeout(t);
}
},function(){
t=setTimeout(hidelist,1500);
}
)
$(document).keydown(function(e){ //用 $(document)来相应键盘事件
switch(e.which){
case 27: hideul();
break;
case 38: countup();
break;
case 40: countdown();
break;
case 39: countrit();
break;
case 37: countlft();
break;
case 13: sure();
break;
default: return false;
}
})
})
$(document).ready(function(){
var t=false;
var target;
var hidinput;
function cur(ele){ //标记当前函数
ele=$(ele)? $(ele):ele;
ele.addClass("cur").siblings().removeClass("cur");
}
function showsub(ele){ //显示子列表
ele=$(ele)? $(ele):ele;
ele.find("ul").show();
cur(ele.find("ul").find("li:first"));
ele.siblings("li").find("ul").hide();
}
$("#play").find("span").click(
function(){ //点击调出相应列表
var _this=$(this);
var y , x;
x=_this.css("left");
var _ul=_this.siblings("ul.sel_ply");
if($("#play span").index(_this[0])<4){ //第四个列表开始向上显示
y= parseInt(_this.css("top"))+parseInt(_this.height())+33+"px";
_ul.css({top:y,left:x}).show();
cur(_ul.children("li:first")); //默认标记第一个 方便响应键盘
}else{
y= parseInt(_this.css("top"))-parseInt(4+_ul.height())+"px";
_ul.css({top:y,left:x}).show();
cur(_ul.children("li:first"));
//cur(_ul.children("li:last")) //默认标记最后一个 方便响应键盘
}
$("ul.sel_ply").not(_ul).hide();
_ul.find("em").html(_this.attr("title"));
target=$(this); //点哪个就给哪个赋值
hidinput=$(this).next("input"); //输入框也同时填上值
}
)
$("#play").find("li").hover(
function(){ //划过显示子选项
cur(this);
showsub(this);
},
function(){
$(this).find("ul").hide();
}
)
$("#play").find("li li").click(function(){ //选中赋值 同时给隐藏的input赋值
var _this=$(this);
var aim=_this.html();
target.html(aim);
hidinput.val(aim);
cur(this);
hideul();
//下面是排它功能 默认不启用
/*var cli=$("#play li li");
for(i=0; i<cli.length; i++){
if(cli.eq(i).html()==aim && cli.eq(i)!==_this){
cli.eq(i).remove();
}
}*/
})
var hidelist=function hideul(){ //隐藏所有列表 取消选择状态
$("#play").find("ul").hide();
$("#play li").removeClass("cur");
}
function countdown(){ //下选 键盘down键
var _cdul=$("#play ul:visible").children("li.cur");
var nxt=_cdul.next("li") ? _cdul.next("li") : $("#play ul:visible").find("li:first"); //从这里开始选择器不对了
cur(nxt);
showsub(nxt);
}
function countup(){ //上选 键盘up键
var prv=$("#play ul:visible > li.cur").prev("li") ? $("#play ul:visible > li.cur").prev("li") : $("#play ul:visible").find("li:last");
cur(prv);
showsub(prv);
}
function countrit(){ //子菜单下选 键盘 right 键
var _cul=$("#play ul:visible > li.cur").find("ul");
var _cui=_cul.find("li.cur");
var _cnx=_cui.next("li") ? _cui.next("li"):_cul.find("li:first");
cur(_cnx);
}
function countlft(){ //子菜单上选 键盘 left 键
var _cul=$("#play ul:visible > li.cur").find("ul");
var _cui=_cul.find("li.cur") ? _cul.find("li.cur") : _cul.find("li:last");
var _cnx=_cui.prev("li");
cur(_cnx);
}
function sure(){ //回车确定 赋值
$("#play").find("ul:visible li li.cur").click();
}
$("#play").mousedown(function(e){
if(e.which==3){ // 1 == left; 2 == middle; 3 == right 右键隐藏
hideul();
}
}).hover(function(){ //离开延时隐藏 1.5秒默认
if(t){
clearTimeout(t);
}
},function(){
t=setTimeout(hidelist,1500);
}
)
$(document).keydown(function(e){ //用 $(document)来相应键盘事件
switch(e.which){
case 27: hideul();
break;
case 38: countup();
break;
case 40: countdown();
break;
case 39: countrit();
break;
case 37: countlft();
break;
case 13: sure();
break;
default: return false;
}
})
})