最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • JS - Web APIs 应用js实现页面交互

    正文概述 掘金(Flavor_)   2021-05-29   471

    Web APIs 和 JS 基础关联性

    1. JS的组成 : js语法 DOM BOM
    2. Web APIs:DOM BOM

    API 和 Web API

    1. API: 应用程序编程接口, 是一些预定义的函数

      简单理解:是一种工具,以便实现想要完成的功能

    2. Web API: 是浏览器提供的一套浏览器功能和页面元素的 API (BOM和 DOM)

    DOM()

    一、DOM简介

    1.什么是DOM 文档对象模型,是接口 改变网页的内容,结构,样式 2.DOM树 文档:一个页面就是一个文档 document 元素:页面中的所有标签 element 节点:网页中所有内容都是节点 node DOM 把以上内容都看做是对象

    二、获取元素

    如何获取网页元素?

    1.根据ID获取 getElementByld()方法

    <div id="time">2020-11-25</div>
        <script>
            //1.因为文档页面从上往下加载 所以得先有标签  所有script写在标签下面
            //2.get获取element 元素 by通过 驼峰命名法
            //3.参数 id是大小写敏感的字符串
            //4.返回的是一个元素对象
            var timer = document.getElementById('time');
            console.log(timer);
            console.log(typeof timer);
            //5.console.dir(timer);  打印我们返回的元素对象 更好的查看里面的属性和方法
            console.dir(timer);
        </script>
    

    2.根据标签名获取 getElementsByTagName()方法 --返回带有指定标签名的对象的集合

    1. 返回的是 获取过来元素对象的集合 以伪数组的形式存储的
    2. 如果页面中只有一个li 返回的还是伪数组形式
    3. 如果页面中没有这个元素 返回的是空的伪数组

    获取某个元素(父元素)内部所有指定标签名的子元素 element.getElementsByTagName('标签名')

    3.通过HTML5新增的方法获取

    1. document.querySelector('选择器') //根据指定选择器返回第一个元素对象
    2. document.getElementsByClassName('类名') //根据类名返回元素对象集合
    3. document.querySelectorAll('选择器') //返回指定选择器的所有元素对象集合

    4.获取特殊元素(body,html)

    1. 获取body : document.body
    2. 获取html: document.documentElement

    三、事件基础

    1.事件三要素: 事件源 事件类型 事件处理程序

    • 事件源: 事件被触发的对象 as:按钮
    • 事件类型: 如何触发? 什么事件? 比如鼠标点击(onclick) 鼠标经过 键盘按下
    • 事件处理程序: 通过一个函数赋值的方式 完成

    2.执行事件的步骤

    • 获取事件源
    • 注册事件(绑定事件)
    • 添加事件处理程序(采取函数赋值方法)

    四、操作元素

    1.改变元素的按钮

    1. element.innerText //从起始位置到终点位置的内容,但它去除html标签 同时空格和换行也会去掉
    2. element.innerHTML //起始位置到终点位置的全部内容 包括html标签 同时保留空格和换行

    区别:

    • 1.innerText 不识别html标签 非标准 去除空格和换行
    • 2.innerHTML 识别html标签 W3C标准 保留空格和换行

    2.常用元素的属性操作

    <button id="ldh">刘德华</button>
        <button id="zxy">张学友</button><br>
        <img src="images/link.jpg"  >
        <script>
            //修改元素属性 src
            //1.获取元素
            var ldh = document.getElementById('ldh');
            var zxy = document.getElementById('zxy');
            var img = document.querySelector('img');
            //2.注册事件
            zxy.onclick = function() {
                img.src = 'images/zhang.jpg';
                img.title = '张学友';
            }
            ldh.onclick = function() {
                img.src = 'images/link.jpg';
                img.title = '刘德华';
            }
        </script>
    

    3.表单元素的属性操作 4.样式属性操作 element.style 行内样式操作 element.className 类名样式操作

    注意:

    1. JS里面的样式采取驼峰命名法 fontSize backgroudColor
    2. JS 修改 sytle 样式操作 产生的是行内样式 css 权重比较高
    3. className 会直接更改元素的类名,会覆盖原先的类名

    5.排他思想 干掉所有人,留下他自己

    <body>
        <button>按钮1</button>
        <button>按钮2</button>
        <button>按钮3</button>
        <button>按钮4</button>
        <button>按钮5</button>
        <script>
            var btns = document.getElementsByTagName('button');
            for (var i = 0; i < btns.length; i++) {
                btns[i].onclick = function() {
                    // 先把所有按钮的背景颜色去掉
                    // 然后才变颜色
                    for (var i = 0; i < btns.length; i++) {
                        btns[i].style.backgroundColor = '';
                    }
                    this.style.backgroundColor = 'pink';
                }
            }
        </script>
    </body>
    

    6.自定义属性的操作

    1. 获取属性值
    • element.属性
    • element.getAttribute('属性')
    1. 设置属性值
    • element.属性='值'
    • element.setAttribute('属性','值')
    1. 移除属性
    • element.removeAttribute('属性')

    7.H5自定义属性

    1. 设置H5自定义属性 规定自定义属性date- 开头 作为属性名并赋值

      <div data-index="2" data-list-name="andy"></div>
      
    2. 获取H5自定义属性

    element.getAttribute('属性') H5新增element.dataset.index 或者 element.dataset['index']

    注意:

    1. dataset 是一个集合 里面存放了所有以data开头的自定义属性
    2. 如果自定义属性有多个- 连接的单词 采取驼峰命名法 console.log(div.dataset.listName)

    五、节点操作

    1.为什么学节点操作:逻辑性强,但兼容性稍差

    1. 利用DOM提供的方法获取元素
    2. 利用节点层次关系获取元素

    2.节点概述 在DOM中 节点用node

    1. nodeType(节点类型) nodeName(节点名称) nodeValue(节点值)
    2. 元素节点 1 属性节点 2 文本节点 3
    3. 元素节点是主要操作

    3.节点层级 父子兄层级关系

    1. 父级节点
    • node.parentNode得到的是离元素最近的父级节点 如果找不到父节点 返回null
    1. 子节点
    • parentNode.childNodes(标准) 得到的是 文本节点 元素节点等等
    • parentNode.children (非标准)是一个只读属性,返回所有的子元素节点
    • parentNode.firstChild 返回第一个节点 不管是文本节点还是元素节点
    • parentNode.lastChild 返回最后一个节点 不管是文本节点还是元素节点
    • parentNode.firstElementChild 返回第一个子元素
    • parentNode.lastElementChild 返回最后一个子元素 //兼任性问题 IE9以上 //实际开发中的写法
    • console.log(ol.children[0]) 第一个子元素
    • console.log(ol.children[ol.children.length - 1])最后一个子元素

    3.兄弟节点

    • node.nextSibling 得到的是下一个兄弟节点 文本节点 元素节点等等
    • node.previousSibling 得到的是上一个兄弟节点 文本节点 元素节点等等
    • node.nextElementSibling 得到的是下一个兄弟元素节点
    • node.previousElementSibling 得到的是上一个兄弟元素节点

    4.创建节点

    • document.createElement('tagName')
    • 添加节点 node.appendChild(child) node 父级 child 子级 后面追加元素类似于push
    • node.insertBefore(child,指定元素) 指定子元素前面插入元素

    5.删除节点

    • node.removeChild(child)

    阻止链接跳转:<a href='javascript:;'>删除</a>

    6.复制节点(克隆) node.cloneNode() 注意:

    1. 如果括号参数为空或者false 则浅拷贝 只复制标签不复制里面的内容
    2. 如果括号参数为 true 则深拷贝 全复制

    7.三种动态创建元素区别

    • document.write() 如果页面文档流加载完毕 会导致页面重绘
    • element.innerHTML 创建多个元素效率更高(不要拼接字符串,采取数组形式拼接)
    • document.createElement() 创建多个元素效率稍微低一点点,但结构更清晰

    DOM重点核心---事件高级

    一、注册事件(绑定事件)

    1. 传统注册方式:具有唯一性,同一个元素同一个事件只能设置一个处理函数,最后注册的处理函数将会覆盖前面注册的处理函数
    2. 方法监听注册方式:元素.addEventListener(type,listener[,useCapture])

    特点:同一个元素同一个事件可以注册多个监听器

    • type:事件类型字符串 要加‘’ 比如click,mouseover 不要带on

    • listener:事件处理函数,事件发生时,会调用该监听函数

    • useCaoture:可选参数,是一个布尔值,默认false

      ie9 以前版本:attachEvent('onclick',回调函数)

    二、删除事件(解绑事件)

    删除事件的方式

    • 传统注册方式: eventTarget.onclick=null
    • 方法监听注册方式:eventTarget.removeEventListener(type,listener[,useCapture])
    • ie9 以前版本:detachEvent('onclick',回调函数)

    三、DOM事件流:事件传播的过程

    捕获阶段 目标阶段 冒泡阶段(石头扔水里)

    四、事件对象

    1. event 就是一个事件对象 写到我们侦听函数的小括号里面 当形参来看
    2. 事件对象只有有了事件才会存在 它是系统给我们创建的 不需要传递参数
    3. 事件对象是 我们是事件的一系列相关数据的集合 跟事件相关 比如鼠标点击里面就包含了鼠标的相关信息,鼠标坐标 如果是键盘事件里面就包含的键盘事件的信息 比如 判断用户按下了那个键
    4. 事件对象可以用别的命名 比如event evt e
    5. 兼容问题 ie678 通过 window.event

    事件对象的常见属性和方法

    e.target 返回的是触发事件的对象(元素) this返回的是绑定事件的对象(元素)

    区别:e.target点击了哪个元素,就返回哪个元素 this 哪个元素绑定这个点击事件 那么就返回谁

    兼容性:

    • ie 用e.srcElement获取触发事件的对象
    • e.type 返回事件对象类型
    • 阻止默认行为(事件)让链接不跳转 或者让提交按钮不提交 e.preventDefault()
    • 低版本浏览器e.returnValue--属性 或者利用return false也能阻止注意后面代码不执行 而且只限于传统的注册方式

    五、阻止事件冒泡

    1.阻止事件冒泡的两种方式

    1. e.stopPropagation(); //标准
    2. e.cancelBubble=true; //ei678

    2.阻止事件冒泡的兼容性解决方案

    if(e && e.stopPropagation){
               e.stopPropagation();
    }else{
               window.event.cancelBubble = true;
    }
    

    六、事件委托(代理,委派)

    事件委托原理:不要给每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点

    事件委托的作用:只操作了一次DOM,提升了程序的性能

    七、常用的鼠标事件

    1. 禁止鼠标右键菜单: contextmenu
    2. 禁止鼠标选中:selectstart

    2.鼠标事件对象:MouseEvent 键盘事件对象:KeyboardEvent

    1. e.clientX/Y 返回的是可视区的x y 坐标
    2. e.pageX/Y 返回的是相对于文档页面的x y坐标
    3. e.screenX/Y 返回的是相对于电脑屏幕的x y坐标
    4. mousemove 鼠标移动
    5. mousedown 鼠标按下
    6. mouseup 鼠标松开

    八、常用的键盘事件

    1. 键盘事件对象:KeyboardEvent
    • onkeyup 某个键盘按键被松开的时候触发
    • onkeydown 某个键盘按键被按下时触发
    • onkeypress 某个键盘按键被按下时触发 但是它不识别功能键 比如ctrl shift 箭头等

    2.keyCode属性 返回该键的ASCII码值 判断用户按下了哪个键

    keydown 和 keypress 在文本框里面的特点: 事件触发的时候 文字还没有落入文本框中

    BOM

    一、BOM概述

    1. 什么时BOM 浏览器对象模型 与浏览器进行交互的对象
    2. BOM的构成 window对象 是浏览器的顶级对象 全局变量,函数都会变成window对象的属性的方法

    二、window对象常见的事件

    1.窗口加载事件

    1. window.onload=function(){}
    2. window.addEventListener('load',function(){}) 最提倡的写法
    3. document.addEventListener('DOMContentLoaded',function(){})DOM元素加载完就能执行 不包含图片 falsh css

    load 等页面内容全部加载完毕 包含页面dom元素 图片 flash css 等

    2.调整窗口大小事件

    1. window.onresize=function(){}
    2. window.addEventListerner('resize',function(){})
    3. window.innerWidth 获取当前屏幕的宽度

    三、定时器

    1.两种定时器

    • setTimeout()
    • setInterval()

    2.setTimeout() 定时器 -----回调函数 callback

    • window.setTimeout(调用函数,延时时间)window可省略 延时时间是毫秒

    3.停止setTimeout() 定时器 clearTimeout()

    4.setInterval() 定时器 每间隔一段时间 调用一次函数

    5.停止setInterval() 定时器 clearInterval()

    6.this

    • 全局作用域和普通函数中this指向window (计时器里面的this指向window)
    • 方法调用中谁调用this指向谁
    • 构造函数中this指向构造函数的实例

    四、js执行队列(事件循环 event loop)

    1.js是单线程

    2.同步(执行栈/主车道)和异步(任务队列/应急车道)

    • 同步是一个一个执行 异步是多个任务同时执行
    • 回调函数为异步任务

    3.js执行机制 :先执行同步任务 ,遇到回调函数 ,放到任务队列 ,同步任务执行完成, 再执行异步任务

    五、location对象

    1.什么是location对象

    location属性用于获取或设置窗体的url 并且用于解析url ----返回的是一个对象

    2.url 统一资源定位符

    3.location 对象属性

    • location.href 获取或者设置整个url
    • location.search 返回参数

    4.location.assign() 重定向 (可后退)

    • location.replace() 替换当前页面(不能后退)
    • location.reload() 重新加载页面 如果强制刷新(true);ctrl+f5

    六、navigator对象

    常用的属性userAgent 用来判断用户用pc端还是移动端打开该页面

    七、history对象

    1. back() 后退
    2. forward() 前进
    3. go(参数) 前进后退功能 参数如果是1 前进1个页面 如果是-1 后退一个页面

    起源地下载网 » JS - Web APIs 应用js实现页面交互

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元