JavaScript【CSS操作、事件处理程序、DOM0级事件处理、DOM2级事件处理、事件类型之鼠标事件、事件流 、Event事件对象、事件类型之键盘、事件事件类型之表单】(十三)

 

目录

CSS操作

事件处理程序

DOM0级事件处理

DOM2级事件处理

事件类型之鼠标事件

事件流 

 Event事件对象

事件类型之键盘事件

事件类型之表单事件


CSS操作

HTML 元素的 style 属性 

操作 CSS 样式最简单的方法,就是使用网页元素节点的 setAttribute 方 法直接操作网页元素的 style属性

div.setAttribute(
  'style',
  'background-color:red;' + 'border:1px solid black;'
);

元素节点的 style 属性

var divStyle = document.querySelector('div').style;
divStyle.backgroundColor = 'red';
divStyle.border = '1px solid black';
divStyle.width = '100px';
divStyle.height = '100px';
divStyle.fontSize = '10em';

cssText 属性

var divStyle =
document.querySelector('div').style;
divStyle.cssText = 'background-color: red;'
  + 'border: 1px solid black;'
  + 'height: 100px;'
  + 'width: 100px;';

事件处理程序

事件处理程序分为:

1 、HTML事件处理

2、 DOM0级事件处理

3 、DOM2级事件处理

4、 IE事件处理 

HTML事件 

<!DOCTYPE html>
<html>
    <head lang="en">
        <meta charset="UTF-8">
        <title>Js事件详解--事件处理</title>
    </head>
    <body>
        <div id="div">
            <button id="btn1" onclick="demo()">按钮</button>
        </div>
        <script>
            function demo(){
                alert("hello html事件处理");
           }
        </script>
    </body>
</html>

DOM0级事件处理

<body>
    <div id="div">
        <button id="btn1">按钮</button>
    </div>
    <script>
        var btn1=document.getElementById("btn1");
        btn1.onclick=function(){alert("Hello DOM0级事件处理程序1");}//被覆盖掉
        btn1.onclick=function(){alert("Hello DOM0级事件处理程序2");}
    </script>
</body>

DOM2级事件处理

<body>
    <div id="div">
        <button id="btn1">按钮</button>
    </div>
    <script>
        var btn1=document.getElementById("btn1");
      btn1.addEventListener("click",demo1);
      btn1.addEventListener("click",demo2);
      btn1.addEventListener("click",demo3);
        function demo1(){
            alert("DOM2级事件处理程序1")
       }
        function demo2(){
            alert("DOM2级事件处理程序2")
       }
        function demo3(){
            alert("DOM2级事件处理程序3")
       }
      btn1.removeEventListener("click",demo2);
    </script>
</body>

IE事件处理程序

IE实现了与DOM中类似的两个方法: attachEvent()detachEvent()

事件类型之鼠标事件

 常见事件类型

1 鼠标事件

2 键盘事件

3 表单事件

4 窗口事件

5 焦点/剪贴板事件

6 网页状态事件

7 Touch事件

鼠标事件 

鼠标事件指与鼠标相关的事件,具体的事件主要有以下一些

1 click:按下鼠标时触发

2 dblclick:在同一个元素上双击鼠标时触发

3 mousedown:按下鼠标键时触发

4 mouseup:释放按下的鼠标键时触发

5 mousemove:当鼠标在节点内部移动时触发。当鼠标持续移动时,该事件会连触发。

6 mouseenter:鼠标进入一个节点时触发,进入子节点不会触发这个事件

7 mouseleave:鼠标离开一个节点时触发,离开父节点不会触发这个事件

8 mouseover:鼠标进入一个节点时触发,进入子节点会再一次触发这个事件

9 mouseout:鼠标离开一个节点时触发,离开父节点也会触发这个事件

10 wheel:滚动鼠标的滚轮时触发

var btn1 = document.getElementById("btn1");
btn1.onclick = function(){
    console.log("click事件");
}

 温馨提示

这些方法在使用的时候,除了DOM2级事件,都需要添加前缀 on

事件流 

事件流描述的是从页面中接受事件的顺序,但有意思的是,微软 (IE)和网景(Netscape)开发团队居然提出了两个截然相反的事件流概念,IE的事件流是事件冒泡流(event bubbling),而 Netscape的事件流是事件捕获流(event capturing) 

事件冒泡

IE提出的事件流叫做事件冒泡,即事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body onclick="bodyClick()">
    <div onclick="divClick()">
        <button onclick="btn()">
            <p onclick="p()">点击冒泡</p>
        </button>
    </div>
    <script>
        function p(){
            console.log('p标签被点击')
       }
        function btn(){
            console.log("button被点击")
       }
        function divClick(event){
            console.log('div被点击');
       }
        function bodyClick(){
            console.log('body被点击')
       }
    </script>
</body>
</html>

 事件捕获

事件捕获流的思想是不太具体的DOM节点应该更早接收到事件,而最具体的节点应该最后接收到事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <button>
        <p>点击捕获</p>
    </button>
</div>
<script>
    var oP=document.querySelector('p');
    var oB=document.querySelector('button');
    var oD=document.querySelector('div');
    var oBody=document.querySelector('body');
    oP.addEventListener('click',function(){
        console.log('p标签被点击')
   },true);
    oB.addEventListener('click',function(){
        console.log("button被点击")
   },true);
    oD.addEventListener('click',  function()
   {
        console.log('div被点击')
   },true);
   oBody.addEventListener('click',function(){
        console.log('body被点击')
   },true);
</script>
</body>
</html>

 Event事件对象

事件发生以后,会产生一个事件对象,作为参数传给监听函数。

Event对象属性 

1 Event.currentTarget

2 Event.Target

3 Event.type

Event.currentTarget 

Event.currentTarget属性返回事件当前所在的节点,即正在执行的监听函数所绑定的那个节点

btn.onclick = function(e){
   console.log(e.currentTarget);
}

 Event.target

Event.target属性返回原始触发事件的那个节点,即事件最初发生的节点。事件传播过程中,不同节点的监听函数内部的Event.target与 Event.currentTarget属性的值是不一样的,前者总是不变的,后者 则是指向监听函数所在的那个节点对象

// HTML代码为
// <p id="para">Hello <em>World</em></p>
function hide(e) {
  console.log(this === e.currentTarget);  //总是 true
  console.log(this === e.target);  // 有可能不是 true
  e.target.style.visibility = 'hidden';
}
para.addEventListener('click', hide, false);

Event.type

Event.type属性返回一个字符串,表示事件类型。事件的类型是在 生成事件的时候。该属性只读

Event对象方法 

1、 Event.preventDefault()

2 、Event.stopPropagation()

Event.preventDefault 

Event.preventDefault方法取消浏览器对当前事件的默认行为。比如点击链接后,浏览器默认会跳转到另一个页面,使用这个方法以后,就不会跳转了

btn.onclick = function(e){
    e.preventDefault(); // 阻止默认事件
    console.log("点击A标签");
}

Event.stopPropagation()

stopPropagation方法阻止事件在 DOM 中继续传播,防止再触发定义在别的节点上的监听函数,但是不包括在当前节点上其他的事件监听函数

btn.onclick = function(e){
    e.stopPropagation(); // 阻止事件冒泡
    console.log("btn");
}

事件类型之键盘事件

键盘事件由用户击打键盘触发,主要有keydown、keypress、 keyup三个事件

1 、keydown:按下键盘时触发。

2、keypress:按下有值的键时触发,即按下 Ctrl、Alt、Shift、Meta 这样无值的键,这个事件不会触 发。对于有值的键,按下时先触发keydown事件,再触发这个事件。

3 、keyup:松开键盘时触发该事件 

username.onkeypress = function(e){
    console.log("keypress事件");
}

 event对象

keyCode:唯一标识

var username = document.getElementById("username");
username.onkeydown = function(e){
    if(e.keyCode === 13){
        console.log("回车");
   }
}

事件类型之表单事件

表单事件是在使用表单元素及输入框元素可以监听的一系列事件

1 input事件

2 select事件

3 Change事件

4 reset事件

5 submit事件 

input事件 

input事件当<input> 、<select>、<textarea> 的值发生变化时触发。对于复选 框(<input type=checkbox>  )或单选框(<input type=radio>  ),用户改变选项时,也会触发这个事件 input事件的一个特点,就是会连续触发,比如用户每按下一次按 键,就会触发一次input事件。

var username = document.getElementById("username");
username.oninput = function(e){
    console.log(e.target.value);
}

 select事件

select事件当在 <input>、<textarea> 里面选中文本时触发

// HTML 代码如下
// <input id="test" type="text" value="Select me!" />
var elem = document.getElementById('test');
elem.addEventListener('select', function (e)
{
  console.log(e.type); // "select"
}, false);

Change 事件

Change事件当<input> 、<select>、<textarea> 的值发生变化时触发。它与 input事件的最大不同,就是不会连续触发,只有当全部修改完成时才会触发

var email = document.getElementById("email");
email.onchange = function(e){
    console.log(e.target.value);
}

reset 事件,submit 事件

这两个事件发生在表单对象上,而不是发生在表单的成员 上。 reset事件当表单重置(所有表单成员变回默认值)时触发。

submit事件当表单数据向服务器提交时触发。注意,submit事件的 发生对象是<form> 元素,而不是<button>元素,因为提交的是表单, 而不是按钮

<form id="myForm" onsubmit="submitHandle">
    <button onclick="resetHandle">重置数据</button>
    <button>提交</button>
</form>
var myForm = document.getElementById("myForm")
function resetHandle(){
    myForm.reset();
}
function submitHandle(){
    console.log("提交");
}

Guess you like

Origin blog.csdn.net/m0_58719994/article/details/132162044