JS 事件 0401

news/2024/7/8 12:53:05

1.一些标签的禁用属性

标签的一些属性

  1. readonly 只读属性 禁止使用标签,不能操作,但是可以传参
    只能看,不能改,可以传参
  2. disabled 禁用属性 禁止使用标签,不能操作,也不能传参
    你就当没有这个标签
  3. multiple 多选属性 file,select,可以按ctrl进行多选

都是 布尔属性 在JavaScript中,与checked一样,通过true,fasle来定义
button按钮,也支持禁用属性,添加 disabled 属性,button按钮没有执行效果

<input type="text" readonly>
   <input type="text" disabled>

   <input type="file" multiple>

   <button disabled>点击</button>

   <script>
       var oBtn = document.querySelector('button');
       // 通过定义 true,false ,来设定,是否执行禁用效果
       oBtn.disabled = true;   // 执行禁用效果,无法操作
       oBtn.disabled = false;  // 不执行禁用效果,正常使用

       oBtn.onclick = function(){
           console.log(123);
       }

在这里插入图片描述

2.事件对象的一些属性

事件对象的相关信息
存储在事件对象中的属性

  1. 事件对象.offsetX 事件对象.offsetY
    点击是,距离 边框线内 标签左上角 坐标
  2. 事件对象.clientX 事件对象.clientY
    点击时,距离 视窗窗口 左上角 坐标
  3. 事件对象.pageX 事件对象.PageY
    点击时,距离 页面 左上角 坐标

如果页面没有滚动,页面的左上角和视窗窗口的左上角重合 ; 两个数值是一样的.

如果页面滚动,页面的左上角不再与视窗窗口的左上角重合 ; 两个数值是不同的.

        var oDiv = document.querySelector('div')
        oDiv.onclick = function(e){
            console.log(e);
        }

3.点击效果

点击鼠标,让div出现在,鼠标点击的位置上
实现方式:
点击时,获取鼠标点击位置的坐标,是针对视窗窗口的坐标
将这个数值,作为标签定位的数据

<style>
        *{
            margin: 0;
            padding:0;
        } 
        body{
            height: 50000px;
        } 
        div{
            width: 100px;
            height: 100px;
            background: pink;
            position: fixed;
            top:0px;
            left:0px;
        }
    </style>
</head>
<body>
    <div></div> 
    <script>
        // 点击鼠标,让div出现在,鼠标点击的位置上
        // 实现方式:
        // 点击时,获取鼠标点击位置的坐标,是针对视窗窗口的坐标
        // 将这个数值,作为标签定位的数据  
        var oDiv = document.querySelector('div');

        // 如果没有,padding和border,只要获取宽度就可以
        // 有px单位,parseInt() 只获取数值,不要px
        // 实际项目中,还需要定义兼容性
        // var oDivHeight1 = parseInt(window.getComputedStyle(oDiv).height) ; 
        
        // 如果要有是有,padding和border,需要使用 offsetHeight 来获取
        // 只有数值,没有px单位
        // 推荐使用  
        var oDivHeight2 = oDiv.offsetHeight;

        // console.log(oDivHeight1 , oDivHeight2);
 
        var oDivWidth = oDiv.offsetWidth;
    
        window.onclick = function(e){
            // console.log(e);
            // 这个数值只有 数, 没有px单位
            // 作为定位的属性值,需要拼接px单位

            // 让标签的左上角和鼠标点击的位置重合
            // oDiv.style.left = e.clientX + 'px' ;
            // oDiv.style.top = e.clientY + 'px' ; 
            
            // 让标签的左上角 和 鼠标点击位置 有间距
            // 在原始数值的基础上,再多加上一定的数值
            // 这个数值,是根据客户需求而定,现在随便加个数,意思意思
            // oDiv.style.left = e.clientX + 20 + 'px' ;
            // oDiv.style.top = e.clientY + 20 + 'px' ;
 
            // 让标签的中心 和 鼠标点击位置 重合
            // 在原始数值的基础上,再减去定位标签,宽高的一半
            oDiv.style.left = e.clientX - oDiv.offsetWidth/2  + 'px' ;
            oDiv.style.top = e.clientY - oDiv.offsetHeight/2 + 'px' ;
        }

    </script>

4.拖拽效果

拖拽的效果 : 当鼠标按下时 ; 并且鼠标移动时

 <style>
        *{
            margin: 0;
            padding:0;
        }

        body{
            height: 5000px;
        }

        div{
            width: 100px;
            height: 100px;
            background: pink;
            position: fixed;
            top:200px;
            left:200px;
        }
    </style>
</head>
<body>
    <div></div>
    <script> 
        var oDiv = document.querySelector('div');

        // 在div移动之前,先记录原始的定位数据
        var oldTop = window.getComputedStyle(oDiv).top;
        var oldLeft = window.getComputedStyle(oDiv).left;

        // 当鼠标按下时,鼠标移动,添加事件
        window.onmousedown = function(){
            window.onmousemove = function(e){
                // 将鼠标的坐标,作为div定位的数值,定位的是中心的位置
                oDiv.style.left = e.clientX - oDiv.offsetWidth/2  + 'px' ;
                oDiv.style.top = e.clientY - oDiv.offsetHeight/2 + 'px' ;
            }
        } 
        // 当鼠标抬起时,鼠标移动,赋值null,就没有事件执行了
        window.onmouseup = function(){
            window.onmousemove = null;
            // 可以再给div定义,定位位置,可以返回原始位置
            // 也在函数之外,记录存储原始位置
            oDiv.style.left = oldLeft;
            oDiv.style.top = oldTop;
        }

        // 如果想要鼠标移动的快点 把 oDiv 改变成 window 或者 document

        // 先 鼠标移动,里面定义鼠标按下,抬起

        // 鼠标移动时,执行鼠标按下,鼠标按下,计算机只会触发一次  
        // 鼠标按下,即时是一直按,只会触发一次
        // 定义的程序,只会回执一次

        // window.onmousemove = function(){
        //     window.onmousedown = function(){
        //         console.log(123);
        //     }
        // }
         
        // 按下的时候,执行鼠标移动
        // 鼠标移动会一直触发,移动中定义的程序,会一直执行

        // window.onmousedown = function(){
        //     window.onmousemove = function(){
        //         console.log(456);
        //     }
        // }

    </script>

5.可视窗口的宽度高度

 <style>
        body{
            height: 5000px;
            width: 5000px;
        }
    </style>
</head>
<body>
    <script>
        // 情况1:包括滚动条的宽度高度
        // 包含有滚动条宽度高度

        // 滚动条的大小,有的时候是16,有的时候是17

        // 结果只是数值
        // window.innerHeight   高度
        // window.innerWidth    宽度

        // 情况2:不包括滚动条宽度高度
        // document.documentElement.clientHeight   高度
        // document.documentElement.clientWidth    宽度

        console.log(window.innerHeight);
        console.log(document.documentElement.clientHeight); 
    </script>

6.拖拽效果边界值

<style>
        *{
            margin: 0;
            padding:0;
        }

        body{
            height: 5000px;
        }

        div{
            width: 100px;
            height: 100px;
            padding: 100px;
            background: pink;
            border:10px solid black;
            position: fixed;
            top:0px;
            left:0px;
        }
    </style>
</head>
<body>
    <div></div>
    <script>
        // 拖拽的效果 --- 边界值
        // 鼠标移动出页面,但是div要留在页面范围内
        // 给定位数值,添加极限范围数值,
        // 定位的最大值,最小值,都要有范围
        // 最小值 : 上  左  都是 0 

        var oDiv = document.querySelector('div');

        var oldTop = window.getComputedStyle(oDiv).top;
        var oldLeft = window.getComputedStyle(oDiv).left;

        // 视窗窗口的宽度,高度
        var winWidth = document.documentElement.clientWidth;
        var winHeight = document.documentElement.clientHeight;

        // 当鼠标按下时,鼠标移动,添加事件
        window.onmousedown = function(){
            window.onmousemove = function(e){
                // 根据 鼠标坐标,根据项目需求,计算定位的数值
                var x = e.clientX - oDiv.offsetWidth/2;
                var y = e.clientY - oDiv.offsetHeight/2;

                // 极限值判断
                // 最小值都是 0 0 
                if(x < 0){
                    x = 0;
                }

                if(y < 0){
                    y = 0;
                }

                // 最大值 可视窗口的宽度/高度 - ( 标签x轴方向 / y轴方向 最终占位 )

                if(x > winWidth - oDiv.offsetWidth){
                    x = winWidth - oDiv.offsetWidth;
                }

                if(y > winHeight - oDiv.offsetHeight){
                    y = winHeight - oDiv.offsetHeight;
                }
                console.log(x,y);
                // 将数值作为标签定位的坐标
                oDiv.style.left = x  + 'px' ;
                oDiv.style.top =  y + 'px' ;
            }
        }

        window.onmouseup = function(){
            window.onmousemove = null;
        } 
    </script>

总结思路

  1. 一定是 先按下事件,后移动事件 — 先吃饭再刷碗
  2. 鼠标抬起,给移动定义事件为null
    也可以添加其他操作,例如,让标签回到原位
    回到原始位置,需要在程序的起始位置,先记录原始的定位坐标
  3. 基本思路
    (1)在定义函数之外,获取浏览器窗口的宽度,高度
    不能带有滚动条
    (2)获取鼠标的坐标,根据项目需求,来计算表现定位的数值
    鼠标的坐标,要根据实际需求而定,目前使用的是相对可视窗口左上角的定位
    项目需求不同,+ / - 的数值也不同
    (3)设定极值
    最小值为 0 0
    最大值为 可视窗口宽度/高度 - 标签X轴/Y轴最终占位
    (4)将最终的数据,作为标签定位的坐标
    必须拼接px单位
    在这里插入图片描述

7.tab切换

<style>
        *{
            margin: 0;
            padding:0;
        }

        ul,ol,li{
            list-style: none;
        }

        .cont{
            width: 800px;
            height: 600px;
            border: 5px solid #333;
            margin: 0 auto;
            display: flex;
            flex-direction: column;
        }

        .cont ul{
            width: 100%;
            height: 60px;
            display: flex;
        }

        .cont ul li{
            flex:1;
            font-size: 35px;
            color: #fff;
            border-left: 2px solid blue;
            border-right: 2px solid blue;
            background: hotpink;
            display: flex;
            justify-content: center;
            align-items: center;

        }

        .cont ol{
            flex:1;
            position: relative;
        }

        .cont ol li{
            width: 100%;
            height: 100%;
            font-size: 150px;
            display: flex;
            justify-content: center;
            align-items: center;
            position: absolute;
            top:0;
            left:0;
            background: burlywood;
            display: none;
        }

        /* 按钮标签 哪个标签有这个属性,哪个就显示特殊背景颜色 */
        .cont ul li.active{
            background: skyblue;
            color: black;
        }

        /* 内容标签 哪个标签有这个属性,哪个就显示 */
        .cont ol li.active{
            display: flex;
        }

    </style>
</head>
<body>
    <div class="cont">
        <ul>
            <li class="active">按钮1</li>
            <li>按钮2</li>
            <li>按钮3</li>
        </ul>
        <ol>
            <li class="active">内容1</li>
            <li >内容2</li>
            <li>内容3</li>
        </ol>
    </div>

    <script>
        // tab切换 / 选项卡 效果

        // 实现思路:
        // 1, ul中的li标签个数  和 ol中li标签个数是相同的
        //    按钮和内容是一一对应的

        // 2, 点击按钮标签,也就是ul中的li标签
        //    给当前这个li标签,添加class样式,给其他的li标签,去除class样式
        //    实现思路: 先给所有的li标签,去除class样式
        //             再给当前的li标签,添加class样式

        // 3, 点击按钮标签,也就是ul中的li标签
        //    给 ol 中所有的 li标签,去除class样式
        //    给 与 当前 ul>li 索引相同的 ol>li标签,添加样式

        var oUllis = document.querySelectorAll('ul li');
        var oOllis = document.querySelectorAll('ol li');

        // 循环 ul中的所有li,添加点击事件
        oUllis.forEach(function(item , key){
            // ul中的li标签 , item就是ul中的li标签
            item.onclick = function(){
                // 1,清除所有的ul,ol,中li的class样式属性
                // 循环遍历所有的ul和ol中的标签
                oUllis.forEach(function(v , k){
                    // v是ul中的li标签
                    v.className = '';
                    // ul>li和ol>li索引是相同的
                    // 通过ul中li的索引也可以获取ol中的li标签
                    // oOllis[k] 就是 ol中的li标签
                    oOllis[k].className = '';
                })
                // 循环结束,所有的ul,ol中,li都没有active

                // 给当前点击的item标签,也就是ul,li标签,添加样式
                item.className = 'active';

                // 给ol中,对应的这个标签的索引的li标签,添加样式
                oOllis[key].className = 'active';
            }
        }) 
        // 不想用forEach,也可以试试事件委托
 
    </script>

总结
核心思路:
利用 ul 和 ol 中 li标签个数相同的 特点,优化程序,简化代码

  1. 获取标签对象
  2. 给所有的ul中的li标签,添加点击事件
  3. 点击事件执行的内容
    (1),给所有的ul和ol中的li标签,清除样式
    (2),给当前点击的ul中的li标签,添加样式
    (3),给索引相同的ol中的li标签,添加样式

可以用自己的方式实现,比如多写几个循环,分别操作ul和ol中的标签
也可以尝试事件委托的方式,给div标签,添加点击事件
判断点击的li标签,定义程序
不过这样的话,要给ul中li标签,添加不少的设定,以区别ul>li和ol>li

8.事件绑定

事件:事件是发生并得到处理的操作,即:事情来了,然后处理。

JavaScript 有两种事件绑定模型:内联模型、外联(脚本)模型。

  1. 事件绑定—内联模式
    这种模型是最传统接单的一种处理事件的方法。在内联模型中,事件处理函数是 HTML 标签的一个属性,用于处理指定事件。虽然内联在早期使用较多,但它是和 HTML 混写的, 并没有与 HTML 分离。
    在这里插入图片描述
  2. 事件绑定—外联(脚本)模式
    由于内联模型违反了 HTML 与 JavaScript 代码层次分离的原则。为了解决这个问题,我们可以在 JavaScript 中处理事件。这种处理方式就是外联(脚本)模型。
    在这里插入图片描述

9.事件类型

JavaScript 可以处理的事件类型为:鼠标事件、键盘事件、HTML 事件。

(1)鼠标事件(页面所有标签都可以触发)

鼠标事件
click:当用户单击鼠标按钮或按下回车键时触发
dblclick:当用户双击主鼠标按钮时触发。
mousedown:当用户按下了鼠标还未弹起时触发。
mouseup:当用户释放鼠标按钮时触发。
mouseover:当鼠标移到某个元素上方时触发。
mouseout:当鼠标移出某个元素上方时触发。
mousemove:当鼠标指针在元素上移动时触发。

(2)键盘事件(表单和全局window)

键盘事件
keydown:当用户按下键盘上任意键触发,如果按住不放,会重复触发。
keypress:当用户按下键盘上的字符键触发,如果按住不放,会重复触发。
keyup:当用户按下了鼠标还未弹起时触发。

(3)HTML事件(window事件)

window事件(全局window)
load:当页面完全加载后在 window 上面触发,或当框架集加载完毕后在框架集上触发。
unload:当页面完全卸载后在 window 上面触发,或当框架集卸载后在框架集上触发。
scroll:当用户滚动带滚动条的元素时触发。
resize:当窗口或框架的大小变化时在 window 或框架上触发。

(4)HTML事件(表单事件)

表单事件
blur:当页面或元素失去焦点时在 window 及相关元素上触发。
focus:当页面或者元素获得焦点时在 window 及相关元素上面触发。
select:当用户选择文本框(input 或 textarea)中的一个或多个字符触发。
change:当文本框(input 或 textarea)内容改变且失去焦点后触发。
submit:当用户点击提交按钮在元素上触发。
reset:当用户点击重置按钮在元素上触发。

10.事件对象

在这里插入图片描述
拿到事件对象:
事件绑定:
元素节点.on + 事件类型 = 匿名函数;
事件对象:一旦完成事件绑定操作,就会产生一个事件对象(系统根据事件绑定自动生成的)。
【注】当点击按钮以后,系统会调用这个函数,系统会自动将事件对象,传入到函数的第一个参数。
拿到事件对象(标准写法):
在这里插入图片描述

11.事件对象属性

事件对象属性(button属性):button属性(鼠标事件)

在这里插入图片描述

事件对象属性(获取鼠标位置):获取鼠标坐标的属性

clientX clientY原点位置,窗口可视区域左上角为原点
pageX pageY原点位置,整个页面的左上角(带滚动高度)
screenX screenY原点位置,整个屏幕的左上角

事件对象属性(修改键)

修改键
有时,我们需要通过键盘上的某些键来配合鼠标来触发一些特殊的事件。这些键为: Shfit、Ctrl、Alt 和 Meat(Windows 中就是 Windows 键,苹果机中是 command 键),它们经常被用 来修改鼠标事件和行为,所以叫修改键。
在这里插入图片描述

键盘事件对象属性(键码)

键码
在发生 keydown 和 keyup 事件时,event 对象的 keyCode 属性,keyCode 属性的值与 ASCII 码中对应大写字母 或数字的编码相同。字母中大小写不影响。
在这里插入图片描述

键盘事件对象属性(字符码)

字符码
Firefox、Chrome 和 Safari 的 event 对象都支持一个 charCode 属性,这个属性只有在发 生 keypress 事件时才包含值,而且这个值是按下的那个键所代表字符的 ASCII 编码。此时 的 keyCode 通常等于 0。
在这里插入图片描述

12.事件监听器

在这里插入图片描述
事件监听器(浏览器兼容IE8以下)
在这里插入图片描述


http://www.niftyadmin.cn/n/4827481.html

相关文章

Python3的hashlib模块的使用

import hashlibm1 hashlib.md5() m2 hashlib.sha1() m3 hashlib.sha3_256() m4 hashlib.sha512() # 不加盐 m_4 hashlib.sha512(R.encode(utf-8)) # 加盐m1.update(今天晚上去哪吃饭.encode(utf8)) # 默认为Unicode 需要的是bit 所以需要转换 print(A&#xff1a;今天晚…

所有事件event集锦

mousedown touchstart, mousemove touchmove, mouseup mouseleave touchend touchleave touchcancel, wheel mousewheel DOMMouseScroll, ondragstart 事件 dragmove事件 dragend事件 ondrop 事件 在拖动目标上触发事件 (源元素): ondragstart - 用户开始拖动元素时触发ondrag…

JS 事件 轮播图 0402

1. tab切换 <style>*{margin: 0;padding:0;}ul,ol,li{list-style: none;}.cont{width: 800px;height: 600px;border: 5px solid #333;margin: 0 auto;display: flex;flex-direction: column;}.cont ul{width: 100%;height: 60px;display: flex;}.cont ul li{flex:1;font…

[改善Java代码]推荐在复杂字符串操作中使用正则表达式

一、分析 字符串的操作&#xff0c;诸如追加、合并、替换、倒序、分隔等&#xff0c;都是在编码过程中经常用到的&#xff0c;而且Java也提供了append、replace、reverse、split等方法来完成这些操作&#xff0c;它们使用起来确实方便&#xff0c;但是更多的时候&#xff0c;需…

Python3的time模块的使用

import time# 1.time() print( python诞生总时间&#xff08;1970&#xff09;&#xff1a;, time.time())# 2.asctime() print(当前时间&#xff1a;, time.asctime()) # 当前时间# 3.ctime() print(当前时间&#xff1a;, time.ctime())# 4.gmtime() print(接收时间戳(格林威…

JS 动画

纵向展开 <style>*{margin: 0;padding: 0;}div{width: 100px;height: 100px;background: rgb(9, 175, 9);position: fixed;top: 100px;left: 0px;overflow: hidden;} button{height: 30px;width: 50px;margin: 30px;}</style> </head> <body><butt…

JS 运动函数 轮播图

1. 复制标签的语法 <ul><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul><script>// 复制标签的方式// clone 方式var ul document.querySelector(ul);// 获取标签var li1 document…

Python3的re模块的使用

import re# 2元字符 . ^ $ * ? { } [ ] | ( ) \ # 作用&#xff1a;匹配字符串s hello world # 返回开始位置 下标 print(s.find(llo))# 找到 并替换 print(s.replace(ll, xx))# . 代指一位字符&#xff0c;代指所有字符 除了换行符 \n ci re.findall(w\w{2}l, hello world…