首页 > 其他分享 >Day 11事件下

Day 11事件下

时间:2022-08-14 11:55:05浏览次数:44  
标签:11 鼠标 元素 Day window 坐标 event 事件

事件(下)

event (事件源)

关于事件的组成 元素.on事件名 = 处理函数

  • 处理函数 是一个function 作为一个function 他具备一个arguments(参数数组)

  • 因为arguments[0] 是获取第一个参数 那么我在对应的处理函数里面写一个参数这个参数不就是对应的arguments[0]

  • 我们发现对应的arguments[0] 返回的对应对象是一个event类型的对象 所以我们可以猜出来他设计了一个名event的对象 而这个对象同时又是全局的对象 所以他归属于window 所以我们可以写成 window.event 或者 省略对应的window(event)



//e是形参 相当于第一个形参 常见的写法 这个形参名字叫 e 或者 event
window.onkeydown = function(e){
    console.log(e); //这个就是arguments[0] event类型对象
    //他设计一个event对象 他是一个全局的变量 window.event
    //ie为了兼容 我们会写出
    e = e || window.event //兼容写法
    console.log(e.altKey);
    console.log(e.key);
}

 

属性

坐标相关的属性

x 得到鼠标的x坐标(不包含不可视区域)

y 得到鼠标的y坐标 (不包含不可视区域)

pageX 得到鼠标在页面上的x坐标 (包含不可视区域)

pageY 得到鼠标在页面上的y坐标 (包含不可视区域)

clientX 得到鼠标在可视区域内的x坐标 (不包含不可视区域)

clientY 得到鼠标在可视区域内的y坐标 (不包含不可视区域)

offsetX 得到鼠标在偏移元素内容的x坐标 (当前添加事件的元素里面的坐标 不包含border)

offsetY 得到鼠标在偏移元素内容的y坐标 (当前添加事件的元素里面的坐标 不包含border)

layerX 默认是得到鼠标基于页面的x坐标 当你添加定位以后他是基于定位元素的坐标

layerY 默认是得到鼠标基于页面的y坐标 当你添加定位以后他是基于定位元素的坐标

screenX 得到鼠标在屏幕的上的x坐标

screenY 得到鼠标在屏幕上的y坐标

 

按键的相关属性

altKey 是否长按alt键

ctrlKey 是否长按ctrl键

shiftKey 是否长按shift键

鼠标相关的内容(只有鼠标触发的事件有)

button 返回的值为number类型(0 表示左键 1表示中间 2表示右键)

事件触发的相关属性

type 事件类型 返回对应的事件名

target 目标元素 返回真实触发的事件元素

currentTarget 目标元素 返回当前添加事件的元素

bubbles 事件是否冒泡

键盘事件相关的内容(需要键盘来触发的事件)

key 属性 (当前按下的键)

keycode 属性 (获取当前按下键大写的ascii码)

charCode 属性(字符键 press事件 ascii码)

事件流

概述:事件流指代的是事件的执行流程,多个盒子嵌套相同事件,这个时候你触发一个盒子的事件,并不会只执行一个盒子的事件的处理函数,而是全部执行。

事件流的俩种模式

冒泡模式(浏览器采用的)

冒泡模式指代的是事件从里到外逐个执行

阻止事件冒泡

e.stopPropagation() 函数 (*)(stop)

e.cancelBubble = true 属性设置(现在虽然都可以用 但是未来可能会废弃)

兼容写法



e.stopPropagation?e.stopPropagation():e.cancelBubble = true

 

捕获模式

捕获模式指代的是事件从外到里逐个执行

默认行为

就是一个元素会自带的行为称为默认行为 a标签的默认行为会跳转 form标签里面submit按钮默认会提交(刷新页面)鼠标右键会出现一个菜单栏 等等一系列的问题

有些时候我们不需要这些行为的产生 那么我们就需要阻止默认行为

阻止默认行为的js实现

e.preventDefault() 函数 (*) (prevent)

e.returnValue = false ie的兼容

return false 直接结束对应的操作



e.preventDefault?e.preventDefault():e.returnValue = false //兼容

 

拖拽

思路

  • 给拖拽的元素添加mousedown的事件 记录当前点击的位置

  • 给对应的容器添加mousemove事件 记录每次移动的位置

  • 给对应的容器添加mouseup 事件 清除上述mousemove事件

代码实现



//获取div
var box = document.getElementById('box')
//给div添加mousedown事件
box.onmousedown = function(e){
    e = e || event
    //记录的是鼠标在div里面的位置
    //在mousedown里面记录按下的位置
    var x = e.offsetX
    var y = e.offsetY
    // var x = e.pageX-box.offsetLeft
    // var y = e.pageY-box.offsetTop
    //给document添加mousemove事件
    document.onmousemove = function(e){
        e = e || event
        //记录每次的位置  在document里面的位置
        var currentX = e.pageX
        var currentY = e.pageY
        //并且设置div的位置
        box.style.left = currentX - x + "px"
        box.style.top = currentY - y + "px"
    }
    //给document添加mouseup事件
    document.onmouseup = function(){
        //清除对应的mousemove事件
        document.onmousemove = null
    }
}

 

样式获取

style属性 只能获取标签内容style属性里面存在的一些样式

如果你需要获取对应的全局所有地方设置样式 我们就需要采用一些方法

getComputedStyle 方法属于window的方法
window.getComputedStyle(元素对象,null) //返回给你的是一个样式对象

 

ie兼容


element.currentStyle //返回给你一个样式对象

 

兼容封装


//方法的封装
function getStyle(element,attr){
    var style =  window.getComputedStyle?window.getComputedStyle(element):element.currentStyle
    return style[attr]
}
//调用
console.log(getStyle(box,'height'));

 

标签:11,鼠标,元素,Day,window,坐标,event,事件
From: https://www.cnblogs.com/jxooooolxe/p/16585158.html

相关文章

  • day01 Markdown学习
    Markdown学习二级标题三级标题字体Hello,World!加粗左右各两个**Hello,World!斜体左右各一个*Hello,World!斜体加粗左右各三个***Hello,World!......
  • T265119 拯救公主--题解
    题目描述公主索菲亚被关在一个有大小一样的方格构成的四四方方的迷宫里面,索菲亚就站在其中一个方格子上,拯救方案是这样的:要用一些地砖把公主所在的方格子之外的格子都铺上......
  • 笔记 【使用事件】制作3D自动开关门(附:3D人物移动和旋转,out输出参数,3D搭建使用的快捷
    【仍在施工ing】小Joe视频链接传送门使用事件制作3D自动开关门(附:3D人物移动和旋转,out输出参数,3D搭建使用的快捷键和Packages,泛型委托Action等)上期视频上期笔记思考i......
  • [2011年NOIP提高组] 铺地毯
    首先想到用二维数组,但是内存太大会爆;因为题目说的是最上面的那块地毯,所以暗示我们应该用for循环倒着推,又给了我们每个地毯的大小和位置,那我们直接从后看这块地毯包不包含(x,......
  • win11右键菜单怎么修改
    win11风格→win10风格:打开CMD输入如下,重启电脑即可。regadd"HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32"/f/vewin10风......
  • 从事件调度理解阻塞和非阻塞
    0为什么要有事件调度我们知道Verilog是一种并行编程语言,然而Verilog是通过计算机执行的,那么必然要遵循计算机顺序执行的逻辑当多条语句都被触发时,我们如何确定语句的执......
  • [2011年NOIP提高组] 铺地毯
    试题分析:要求最后覆盖的地毯的编号,所以可以从n向上遍历,找到符合要求的地毯,然后输出注意:没有地毯时输出-1#include<bits/stdc++.h>usingnamespacestd;intmain(){ ints......
  • [2011年NOIP提高组] 铺地毯
    试题分析:题目要求寻找指定坐标的最上面的地毯是几号,没有则输出-1,所以我们可以从最上面的地毯开始遍历,给了我们地毯的左下角坐标(也就是横纵坐标最小)和地毯的长宽,我们就可以......
  • Windows11使用WSL Ubuntu搭建paddle的GPU环境
    Windows11使用WSLUbuntu搭建paddle的GPU环境最近升级到了Windows11,突然有个大胆的想法:在Windows11上安装WSL,将所有开发环境安装到WSL中。这样就能在windows各种QQ/微信/S......
  • 事件一些补充 以及同步异步概念
    事件补充事件onload事件:当网页中的所有资源都加在完成之后执行这个事件通常是将script标签放到head标签中的时候使用。因为放在head中默认是获取不到body中的内容的,但是......