首页 > 其他分享 >js 之三 鼠标和键盘事件处理

js 之三 鼠标和键盘事件处理

时间:2023-01-04 22:11:07浏览次数:39  
标签:事件处理 obj 鼠标 js 事件 document box1 event

鼠标和键盘事件

鼠标常见的事件,按下onmousedown,拖动onmounsemove,松开onmousevtup,滚轮等事件;

开发需求: 当鼠标点击控件,进行拖拽,控件跟随鼠标移动;

拖拽事件需求的实现思路分析: 
1 首先鼠标选中对象,然后拖动按下鼠标时,触发事件onmousedown;
2 当鼠标移动的时候,被拖车元素跟鼠标移动onmounsemove,改事件在onmousedown中;
 获取事件对象坐标;然后赋值给对象的坐标,进行移动;
                    var left=event.clientX-ol;
                    var top=event.clientY-al;
                    obj.style.left=left+"px";
                    obj.style.top=top+"px";
当鼠标松开是,被拖车元素固定在当前位置onmousevtup
 触发事件;释放移动和按下的事件
 domcument.onmounsemove=null
 domcument.onmounsedown=null

代码如下:

function move (obj){
             obj.onmousedown=function (event){
                 event=event || window.event
                 // if (obj.setPointerCapture){
                 //    obj.setPointerCapture();}
                //事件对象位置减去对象的位置
                 var ol= event.clientX-obj.offsetLeft
                 var al=event.clientY-obj.offsetTop

                //然后执行移动事件对象,必须是document事件
                document.onmousemove=function (event){
                    //浏览器兼容性问题
                    event=event || window.event
                    // 或者当前坐标
                    var left=event.clientX-ol;
                    var top=event.clientY-al;
                    obj.style.left=left+"px";
                    obj.style.top=top+"px";
                }}
                //给document绑定一个松开鼠标的事件
                document.onmouseup=function (){
                 //首先释放document的移动事件
                 document.onmousemove=null
                    //并取消document的按键事件
                     document.onmousedown=null
                    // obj.releasePointerCapture && obj.releasePointerCapture()

                }
                //解决问题自动去浏览器进行搜索的问题
                return false;
             //设置btn01对鼠标的按下相关的事件进行捕获,当调用

        }
      window.onload=function () {
            /*
             拖拽事件的实现思路分析: 首先鼠标选中对象,然后拖动按下鼠标时,触发事件;onmousedown;
             当鼠标移动的时候,被拖车元素跟鼠标移动onmounsemove
             当鼠标松开是,被拖车元素固定在当前位置onmousevtup
             */

            box1 = document.getElementById('box1')
            box2 = document.getElementById('box2')
            //当鼠标正在被拖拽元素按下时,触发onmousedown
            move(box1);
            move(box2);
        }

键盘事件:

onkeydown 键盘按下,onkeyup 键盘松开,键盘事件一般绑定在焦点的对象或者document

1 判断键盘条件经常使用keycode
  if(event.keycode===89) 判断键盘是否按下y,当然首先要触发键盘按下事件,然后
	<script type="text/javascript">
	// 键盘事件
	// onkeydown按键被按下,如果一直按着不松手事件会一直触发
	// onkeyup按键被松开
	// 详见https://www.runoob.com/jsref/dom-obj-event.html
	// 键盘事件一般都绑定给一些可获取焦点的对象或者是document

	   window.onload=function (){
	   	// document.onkeydown=function (event){
        //      event=event || window.event
		// 	//可以通过keycode 获取编码;
		// 	//altCode;ctrlCode;shiftCode;获取编码
		// 	//
		// 	 if (event.keyCode===89)
		// 	 {
		// 	 	console.log("你按的是y")
		// 	 }
		// 	 //同时按键的判断ctrl+y的判断
		// 	 if (event.keyCode===89 && event.ctrlKey){
		// 	 	console.log("同时按住ctrl+y")
		// 	 }
		//
		// }
		   var input=document.getElementsByTagName('input')[0]
		   input.onkeydown=function (event){
		   	event=event || window.event
			   console.log(event.keyCode)

		   	if (event.keyCode>=96 && event.keyCode<=107){
		   		//不符合条件,回调函数返回false

		   		return false
			}
		   }
	   }
		</script>
	</head>
	<body>
		<input type="text" id="input" value="" />
	</body>
</html>
功能开发练习

用键盘上下左右控制div的移动

 <style type="text/css">
        #box1{
            width: 100px;
            height: 100px;
            background-color: #0a0c0d;
            position: absolute;
        }
    </style>
    <script type="text/javascript">
        window.onload=function (){
           var box1= document.getElementById('box1')
            document.onkeydown=function (event){
               //浏览器兼容性问题
                 event=event||window.event
                 var speed = 10;
                 console.log(event.keyCode)
                 if (event.ctrlKey){
                     speed=40;
                 }
                 switch (event.keyCode){
                     case 37:
                         console.log(event.keyCode)
                         box1.style.left=box1.offsetLeft - speed + "px";
                         break;
                     case 38:
                           console.log(event.keyCode)
                           box1.style.top=box1.offsetTop - speed + "px";
                           break;
                     case 39:
                         console.log(event.keyCode)
                          box1.style.left=box1.offsetLeft + speed + "px";
                             break;
                     case 40:                             box1.style.top=box1.offsetTop + speed + "px";                          break;
                 }
               }
        }
    </script>

标签:事件处理,obj,鼠标,js,事件,document,box1,event
From: https://www.cnblogs.com/pushuiyu/p/17026144.html

相关文章

  • js原生get请求
    varrequest=newXMLHttpRequest();//请求种类和地址和.......(屑阿狗忘了,但暂时没用request.open('GET','这里填写接口地址',true);//返回格式,json是j......
  • JS获取字符串长度的常用方法,汉字算两个字节
    JS获取字符串实际长度(双字节字符、汉字算两个字符)//第一种GetLength=function(str){varrealLength=0;for(vari=0;i<str.length;i++){......
  • echarts饼图鼠标移入高亮设置
    通过鼠标移入配合dispatchAction设置itemStyle.color的颜色//饼图letechart=echarts.init(document.getElementById(this.echartId.source));echart.setOption({ s......
  • 从零开始学node.js笔记 03
    一、模块的加载机制1、优先从缓存中加载模块在第一次加载后会被缓存,这也意味着多次调用require()不会导致模块的代码被执行多次。注意:不论是内置模块、用户自定义模块、还是......
  • 《安富莱嵌入式周报》第291期:分分钟设计数字芯片,单片机版JS,神经网络DSP,microPLC,FatFS
     视频版:​​​https://www.bilibili.com/video/BV1Dd4y1b74x​​1、英飞凌推出双核M7+M0芯片XMC7000,8MBFlash,1MBRAM,2.7-5.5宽电压,10个CANFD,20通道LIN-UART,96通道12bitA......
  • 深入浅出简单JS加密解密案例
    加密是指使用密钥将明文(未加密的信息)转换为密文(无法被读取的信息)的过程。解密则是指使用相同的密钥将密文转换回明文的过程。JavaScript提供了一种内置的加密方法,称为​​......
  • JSR303校验 在实体类上的应用
    首先在实体类上添加注解@Validated在需要校验的字段上添加需要的注解可能出现的错误导入对应依赖可以解决<dependency><groupId>org.hibernate</groupId><ar......
  • mock.js模拟数据
    1.npm install mockjs2.在src目录下创建个mock文件夹3.mock文件夹下准备json数据(json数据必须格式化,不能留有空格)json需要的图片资源放在public文件夹下,会随dist打包原......
  • js 日期格式化
    1.给Date对象添加format方法,date类型的对象即可使用格式化方法(注意需要引入main.js中)Date.prototype.format=function(fmt){leto={"M+":this.getMonth(......
  • JS逆向实战10——某集团RSA长加密
    由于本网站较为特殊目标网站加密与其他稍有不同目标网站:68747470733a2f2f65632e6d696e6d6574616c732e636f6d2e636e2f6f70656e2f686f6d652f70757263686173652d696e666f2f......