`

js实现键盘选择html元素

阅读更多

原理:根据待选择元素与当前选中元素的最短距离来判断下一操作应该选中哪个元素。

 

代码如下:

/*
var arg = {
	elements:[],
	current:jqueryObj || index,//index is in elements
	initCallback:function(){},
	moveCallback:function(){},
	ensureCallback:function(){}
};
*/
function KeyMove(arg){
	var LEFT = 1,RIGHT = 2,UP = 3,DOWN = 4;

	function filter(current,arr,direction){
		var resultarr = [];

		if(direction == LEFT){
			for(var i=0,len=arr.length;i<len;i++){
				if(arr[i]["left"] + arr[i]["width"] < current["left"] && arr[i]["width"] > 0){
					resultarr.push(arr[i]);
				}
			}
		}else if(direction == RIGHT){
			for(var i=0,len=arr.length;i<len;i++){
				if(arr[i]["left"] > current["left"] + arr[i]["width"] && arr[i]["width"] > 0){
					resultarr.push(arr[i]);
				}
			}
		}else if(direction == UP){
			for(var i=0,len=arr.length;i<len;i++){
				if(arr[i]["top"] + arr[i]["height"]< current["top"] && arr[i]["height"] > 0){
					resultarr.push(arr[i]);
				}
			}
		}else if(direction == DOWN){
			for(var i=0,len=arr.length;i<len;i++){
				if(arr[i]["top"] > current["top"] + arr[i]["height"] && arr[i]["height"] > 0){
					resultarr.push(arr[i]);
				}
			}
		}
		

		return resultarr;
	}

	

	//{top:"",left:""}
	var elemarr = arg.elements;
	var positionArr = new Array(elemarr.length);
	for(var i=0,len=elemarr.length;i<len;i++){
		positionArr[i] = $(elemarr[i]).position();
		positionArr[i].index = i;
		positionArr[i].width = $(elemarr[i]).width();
		positionArr[i].height = $(elemarr[i]).height();
	}

	var current = isNaN(arg.current) ? arg.current : elemarr[arg.current];
	var _arg = {
		current:null,
		pre:null,
		e:null
	};
	var $pre = _arg.current = _arg.pre = $(current);
	if(typeof arg.initCallback == "function")
		arg.initCallback.call(_arg);
	var currentPosition = $(current).position();
	currentPosition.width = $(current).width();
	currentPosition.height = $(current).height();


	addListener(function(){
		_arg.e = this.e;
		if(this.keycode == 37){//left
			var temparr = filter(currentPosition,positionArr,LEFT);
			if(temparr.length > 0)
				current = getMinDistanceElem(currentPosition,temparr);
		}else if(this.keycode == 39){//right
			var temparr = filter(currentPosition,positionArr,RIGHT);
			if(temparr.length > 0)
				current = getMinDistanceElem(currentPosition,temparr);
		}else if(this.keycode == 38){//up
			var temparr = filter(currentPosition,positionArr,UP);
			if(temparr.length > 0)
				current = getMinDistanceElem(currentPosition,temparr);
		}else if(this.keycode == 40){//down
			var temparr = filter(currentPosition,positionArr,DOWN);
			if(temparr.length > 0)
				current = getMinDistanceElem(currentPosition,temparr);
		}else if(this.keycode == 13){
			if(typeof arg.ensureCallback == "function")
				arg.ensureCallback.call(_arg);
		}
		currentPosition = $(current).position();
		currentPosition.width = $(current).width();
		currentPosition.height = $(current).height();
		
		_arg.current = $(current);
		if(typeof arg.moveCallback == "function")
			arg.moveCallback.call(_arg);
		_arg.pre = $pre = $(current);
	});

	
	

	function getMinDistanceElem(current,arr){
		var index = 0;
		var minDistance = 1000000;
		for(var i=0,len=arr.length;i<len;i++){
			var tempdistance = distance(current,arr[i]);
			if(tempdistance < minDistance){
				index = i;
				minDistance = tempdistance;
			}
		}
		return elemarr[arr[index].index];
	}

	function distance(o1,o2){
		return Math.sqrt(Math.pow(o1.left - o2.left,2) + Math.pow(o1.top - o2.top,2));
	}


	function addListener(fn){
		if(typeof fn == "function"){
			document.addEventListener("keydown",function(event){
				//IE doesn't pass in the event object  
				var event = event || window.event;  
		         
		        //IE uses srcElement as the target  
		        var target = event.target || event.srcElement;     
	
				var keycode = event.keyCode || event.which;

				this.target = target;
				this.keycode = keycode;
				this.e = event;

				fn.call(this);
				
			},false);	
		}
	}
}
 

 

示例见附件。

分享到:
评论

相关推荐

    js实现虚拟键盘

    在这个场景中,我们讨论的是使用JavaScript来实现一个虚拟键盘,这对于触摸屏设备上的输入操作非常有用,比如在移动设备或平板电脑上,用户可能没有物理键盘,此时虚拟键盘就成为了必要的输入工具。 虚拟键盘的实现...

    js键盘箭头控制上下选中标签元素

    这个小demo展示了如何通过监听键盘事件并处理箭头键的按下,以实现元素的选择切换。以下将详细讲解这一功能的实现原理及步骤。 首先,我们需要了解JavaScript中的事件处理。在JavaScript中,我们可以使用`...

    JS实现键盘

    本教程将深入探讨如何使用JS实现一个键盘。 1. **HTML基础结构** 在网页中,你需要一个输入元素,如`&lt;input&gt;`或`&lt;textarea&gt;`,作为用户输入的地方。同时,创建一个包含键盘按钮的`&lt;div&gt;`元素,每个按钮对应键盘上...

    html js 虚拟键盘带拼音输入法

    总的来说,"HTML JS 虚拟键盘带拼音输入法"是一个集成了HTML界面设计、JavaScript动态交互以及拼音输入法技术的解决方案,旨在提供给Kiosk用户一个高效且友好的汉字输入体验。通过优化界面和输入逻辑,可以大大提高...

    特殊-JS实现键盘效果-客户端键盘

    在JavaScript(JS)中实现键盘效果,主要是指通过编程方式模拟真实键盘的功能,这在一些特定的场景下非常有用,比如移动设备上的Web应用、在线输入法或游戏等。通过JavaScript,我们可以监听键盘事件,控制页面元素...

    js键盘事件实现人物的行走

    本文将详细介绍如何通过JavaScript的键盘事件来控制网页上人物的移动和跳跃,具体实现2D效果。为此,我们将通过示例代码来展示整个过程。首先,我们需要建立一个HTML文档,并通过CSS来设定基本的样式。然后,通过...

    js实现的软键盘

    综上所述,实现一个JS软键盘需要综合运用JavaScript编程、DOM操作、事件处理、CSS样式设计、字符编码、键盘布局、可访问性、安全性、性能优化以及用户体验等多个方面的知识。通过这个项目,你可以深入理解并实践这些...

    用javascript实现软键盘

    通常,这种软键盘会以HTML元素的形式动态生成,并通过JavaScript事件监听来响应用户的点击,模拟真实键盘输入的效果。 描述中提到的"页面代码,及所引用keyboard.js,keyboard.css,keyboard.png",揭示了实现这个...

    javascript实现软键盘输入,兼容多种浏览器,测试通过

    2. **DOM操作**:创建软键盘UI,通常需要动态生成HTML元素,如按钮代表数字、字母等。利用`document.createElement`,`appendChild`,`innerHTML`等DOM操作方法来构建和布局虚拟键盘。 3. **事件处理**:当用户点击...

    HTML实现电脑软键盘

    综上所述,实现一个HTML电脑软键盘需要结合HTML、CSS和JavaScript技术。HTML负责创建键盘的布局和结构,CSS提供视觉样式,而JavaScript则赋予键盘交互性。通过不断优化和扩展,我们可以创建出更加复杂、功能丰富的软...

    js实现软键盘+小键盘

    在IT领域,JavaScript(简称JS)是一种广泛使用的前端编程语言,尤其在网页交互和动态功能实现上发挥着重要作用。本文将深入探讨如何使用JavaScript来实现虚拟键盘,包括小键盘的功能。 首先,我们要理解虚拟键盘的...

    一个不错的web软键盘(JS实现)

    在创建Web软键盘时,开发者通常会通过JavaScript动态创建HTML元素,如`&lt;button&gt;`或`&lt;input&gt;`,这些元素代表软键盘上的每个按键。同时,通过`addEventListener`方法监听按钮点击事件,当用户点击虚拟键时,模拟键盘...

    HTML+CSS+JS实现键盘导航源码特效.zip

    在这个"HTML+CSS+JS实现键盘导航源码特效.zip"中,我们可以期待一个利用这三种技术来创建的键盘导航功能,这种功能通常用于增强用户在网页上的交互体验,特别是对于桌面应用或者复杂网页,键盘导航可以提高操作效率...

    JS软键盘(javascript版本)

    1. DOM操作:JavaScript通过Document Object Model (DOM) 来操作HTML元素。为了显示软键盘,需要在页面上动态创建一系列的按钮元素,并将它们布局在合适的位置。 2. 事件监听与处理:每个键盘按钮都需要绑定点击...

    js 虚拟键盘 支持中英文切换 高灵敏度

    实现JS虚拟键盘的关键技术包括HTML、CSS和JavaScript。HTML用于构建键盘布局,CSS则用来美化和定制样式,而JavaScript负责处理键盘的逻辑,如按键响应、中英文切换功能的实现。在中英文切换功能上,通常会有一个切换...

    Js之软键盘实现

    软键盘实现是JavaScript在Web交互中的一个重要功能,通常用于提高用户输入的安全性,例如在处理敏感信息如密码时,防止物理键盘被键盘记录器监听。现在我们来详细探讨JavaScript如何实现软键盘。 首先,软键盘的...

    javascript实现的日期选择器

    `INDEX.HTM` 通常是网页的主入口文件,它可能包含引入JavaScript脚本和样式表的链接,以及用于展示日期选择器实例的HTML元素。 `QINGJIA_ADD.HTM` 这个文件名暗示了可能是关于请假申请的功能,日期选择器在这种情况...

    js软键盘,全键盘小键盘各一

    在JavaScript中,全键盘的实现是通过创建一系列按钮元素,每个按钮代表一个字符,并绑定点击事件。当用户点击按钮时,对应的字符将被插入到输入框中。 2. **小键盘**:小键盘则更专注于数字输入,比如在填写验证码...

Global site tag (gtag.js) - Google Analytics