网页编程和设计 JavaScript语言(ES5)(六)

简介: 网页编程和设计 JavaScript语言(ES5)(六)

16.8 css操作

16.8.1 HTML 元素的 style 属性

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

    var div = document.getElementById("myDiv");
    div.setAttribute(
        'style',
        'background-color:green;' + 'border:1px solid black;'
    );

16.8.2 元素节点的style属性

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

16.8.3 cssText属性

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

十七、事件处理程序

a0488ec8d09c8ec6517b0b8fcadb94aa.png

事件处理程序分为:

  1. HTML事件处理
  2. DOM0级事件处理
  3. DOM2级事件处理

17.1 HTML事件

<button onClick="demo()">点击</button>
function demo(){
    alert("点击了鼠标");
}
143e8bb0e92f45b4a0f2376933f76dbe.png


缺点是HTML和JS没有分开

17.2 DOM0级事件处理

    <button id="btn">点击</button>
    var btn = document.getElementById("btn");
    btn.onclick = function (){
        alert("点击了鼠标")
    }

HTML和JS是分离的,但是无法同时添加多个事件

17.3 DOM2级事件处理(推荐)

    <button id="btn">点击</button>
    var btn = document.getElementById("btn");
    btn.addEventListener("click",click)
    function click(){
        alert("点击了鼠标")
    }

事件不会被覆盖

十八、事件类型

18.1 鼠标事件

97ef3e71a2b6d433350177a106329754.png

鼠标事件

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

  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

18.2 Event事件对象

d25ff92b673609904e99c72cb3f14322.png

事件发生以后,会产生一个事件对象,作为参数传给监听函数。就是函数中自带的隐式参数。

18.2.1 Event对象属性

  1. Event.Target
  2. Event.type

Event.target

Event.target属性返回事件当前所在的节点,就是点击谁返回谁。

    <button id="btn">点击</button>
    var btn = document.getElementById("btn");
    btn.onclick = function (event){
        console.log(event.target)  // <button id="btn">点击</button>
    }

Event.type

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

    <button id="btn">点击</button>
    var btn = document.getElementById("btn");
    btn.onclick = function (event){
        console.log(event.type) //click
    }

18.2.2 Event对象方法

  1. Event.preventDefault()
  2. Event.stopPropagation()

Event.preventDefault

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

    <a id="btn" href="http://www.baidu.com">点击</a>
     var a = document.getElementById("btn");
     a.onclick = function (event){
         event.preventDefault();
     }

Event.stopPropagation()

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

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        #root{
            width: 100px;
            height: 100px;
            background-color: greenyellow;
        }
        #box{
            width: 50px;
            height: 50px;
            background-color: red;
        }
    </style>
</head>
<body>
    <div id = "root">
        <div id = "box"></div>
    </div>
<script>
    var root = document.getElementById("root");
    var box = document.getElementById("box");
    root.onclick = function (){
        console.log("root")
    }
    box.onclick = function (event){
        event.stopPropagation(); //阻止事件冒泡
        console.log("box")
    }
</script>
</body>
</html>

18.3 键盘事件

04dd9ad2260eb611aff82db2ba25b53d.png

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

  1. keydown:按下键盘时触发。
  2. keypress:按下有值的键时触发,即按下 Ctrl、Alt、Shift、Meta 这样无值的键,这个事件不会触发。对于有值的键,按下时先触发keydown事件,再触发这个事件。
  3. keyup:松开键盘时触发该事件
    <input type="text" id="username">
    var username = document.getElementById("username");
     username.onkeydown = function (event){
         console.log("键盘按下事件")
     }
     username.onkeyup = function (event){
         console.log(event.target.value);//value就是输入框的数据
     }

event对象

keyCode:唯一标识

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

18.4 表单事件

c9ce5db7bd837b8e30d6896ea945c7ad.png

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

  1. input事件
  2. select事件
  3. Change事件
  4. reset事件
  5. submit事件

18.4.1 input事件

input事件当<input>、<select>、<textarea>的值发生变化时触发。对于复选框(<input type=checkbox>)或单选框(<input type=radio>),用户改变选项时,也会触发这个事件

input事件的一个特点,就是会连续触发,比如用户每按下一次按键,就会触发一次input事件。

    <input type="text" id="username">
    var username = document.getElementById("username");
    username.oninput = function (event){
        console.log(event.target.value)  //获取表单输入的内容
    }

18.4.2 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);

18.4.3Change 事件

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

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

18.4.4 reset 事件,submit 事件

这两个事件发生在表单对象<form>上,而不是发生在表单的成员上。

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("提交");
}

18.5 事件代理(事件委托)

35b807508f9629add207e18fc472f2d3.png

在js中父元素的事件可以操作子元素触发,也就是事件冒泡。

由于事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件。这种方法叫做事件的代理(delegation)

    <ul id="list">
        <li>list1</li>
        <li>list2</li>
        <li>list3</li>
    </ul>
    var ul = document.querySelector('ul');
    ul.addEventListener('click', function (event) {
        if (event.target.innerHTML() === 'list1') {
            // some code
        }
    });

十九、定时器

6ee269b01661bc4d06f14477e3c0b756.png

19.1 setTimeout

JavaScript 提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()setInterval()这两个函数来完成。它们向任务队列添加定时任务.

setTimeout函数用来指定某个函数或某段代码,在多少毫秒之后执行。它返回一个整数,表示定时器的编号,以后可以用来取消这个定时器。

var timerId = setTimeout(func|code, delay);

setTimeout函数接受两个参数,第一个参数func|code是将要推迟执行的函数名或者一段代码,第二个参数delay是推迟执行的毫秒数

setTimeout(function(){
  console.log("定时器")
},1000)

温馨提示

还有一个需要注意的地方,如果回调函数是对象的方法,那么setTimeout使得方法内部的this关键字指向全局环境,而不是定义时所在的那个对象

    var name = "zhangsan";
    var user = {
        name: "lisi",
        getName: function () {
            console.log(this.name);
        }
    };
    user.getName(); //lisi
    var name = "zhangsan";
    var user = {
        name: "lisi",
        getName: function () {
            setTimeout(function(){
                console.log(this.name);
            },1000)
        }
    };
    user.getName(); //zhangsan
    var name = "zhangsan";
    var user = {
        name: "lisi",
        getName: function () {
            var that = this; //this指的是user
            setTimeout(function(){
                console.log(that.name);
            },1000)
        }
    };
    user.getName(); //lisi

定时器可以进行取消

var id = setTimeout(f, 1000);
clearTimeout(id);

19.2 setInterval

setInterval函数的用法与setTimeout完全一致,区别仅仅在于setInterval指定某个任务每隔一段时间就执行一次,也就是无限次的定时执行

    var timer = setInterval(function() {
        console.log("1秒执行一次");
    }, 1000)

通过setInterval方法实现网页动画

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #someDiv{
            width: 100px;
            height: 100px;
            background: red;
        }
    </style>
</head>
<body>
    <div id="someDiv"></div>
    <script>
        var div = document.getElementById('someDiv');
        var opacity = 1;
        var fader = setInterval(function() {
         opacity -= 0.05;
         if (opacity > 0) {
          div.style.opacity = opacity;
          } else {
          clearInterval(fader);
          }
        }, 60);
    </script>
</body>
</html>


相关文章
|
4月前
|
前端开发 JavaScript 开发者
JavaScript:无处不在的Web语言
JavaScript:无处不在的Web语言
|
9月前
|
JavaScript 算法 开发者
如何用JS实现在网页上通过鼠标移动批量选择元素的效果?
本文介绍了类似电脑桌面通过鼠标选择多个图标的实现原理。主要通过监听mousedown、mousemove和mouseup事件,动态调整选择框大小并计算与元素的重叠情况。提供了角重叠和相交重叠的检测方法,并附有示例代码和在线演示链接,方便开发者参考与测试。
319 56
|
8月前
|
Web App开发 数据采集 JavaScript
动态网页爬取:Python如何获取JS加载的数据?
动态网页爬取:Python如何获取JS加载的数据?
1289 58
|
10月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
547 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
5月前
|
编解码 JavaScript 前端开发
如何在网页播放英文的m3u8文件(基于Javascript搭建的在线网页工具)
什么是m3u8?又该如何在网页中高效、便捷地播放英文的m3u8文件呢?今天这篇文章就带你一起了解,并推荐一种基于Javascript搭建的在线网页工具,让你轻松解决播放问题。
1036 0
|
9月前
|
JavaScript 前端开发 Java
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
278 24
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
|
8月前
|
数据采集 Web App开发 JavaScript
Python爬虫如何获取JavaScript动态渲染后的网页内容?
Python爬虫如何获取JavaScript动态渲染后的网页内容?
|
10月前
|
JavaScript Ubuntu Linux
如何在阿里云的linux上搭建Node.js编程环境?
本指南介绍如何在阿里云Linux服务器(Ubuntu/CentOS)上搭建Node.js环境,包含两种安装方式:包管理器快速安装和NVM多版本管理。同时覆盖全局npm工具配置、应用部署示例(如Express服务)、PM2持久化运行、阿里云安全组设置及外部访问验证等步骤,助你完成开发与生产环境的搭建。
|
11月前
|
JavaScript 前端开发 IDE
【编程向导】Js与Ts差异详解:选择与权衡
JavaScript 一直是 Web 开发的基石,以其灵活性和动态性著称,但其松散类型可能导致大型项目中出现难以调试的错误。TypeScript 作为 JavaScript 的超集,通过引入静态类型系统,提供了更高的类型安全性和更好的工具支持,尤其适合大型团队和复杂项目。本文详细对比了 JavaScript 和 TypeScript 的优缺点,并提供了实际代码示例,帮助开发者根据项目需求选择合适的工具。
1451 2