美文网首页
Web开发 | WebAPI 介绍 & 使用总结 (四)

Web开发 | WebAPI 介绍 & 使用总结 (四)

作者: Leon_520 | 来源:发表于2018-12-24 09:44 被阅读0次

    WebAPI 介绍

    浏览器提供的一套操作浏览器功能和页面元素的API (BOM和DOM)
    掌握常见的浏览器提供的API的调用方式 MDN-Web API

    JavaScript的组成

    image.png

    ECMAScript - JavaScript的核心

    定义了javascript的语法规范, JavaScript的核心,描述了语言的基本语法和数据类型,ECMAScript是一套标准,定义了一种语言的标准与具体实现无关

    BOM - 浏览器对象模型

    一套操作浏览器功能的API
    通过BOM可以操作浏览器窗口,比如:弹出框、控制浏览器跳转、获取分辨率等

    DOM - 文档对象模型

    一套操作页面元素的API
    DOM可以把HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操作

    BOM

    BOM的概念

    BOM(Browser Object Model) 是指浏览器对象模型,浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。BOM由多个对象组成,其中代表浏览器窗口的Window对象是BOM的顶层对象,其他对象都是该对象的子对象。

    比如:刷新浏览器、后退、前进、在浏览器中输入URL等

    BOM的顶级对象window

    window是浏览器的顶级对象,当调用window下的属性和方法时,可以省略window
    注意:window下一个特殊的属性 window.name

    对话框

    alert()
    prompt()
    confirm()

    页面加载事件

    onload

    window.onload = function () {
      // 当页面加载完成执行
      // 当页面完全加载所有内容(包括图像、脚本文件、CSS 文件等)执行
    }
    

    onunload

    window.onunload = function () {
      // 当用户退出页面时执行
    }
    

    location对象

    location对象是window对象下的一个属性,时候的时候可以省略window对象, location可以获取或者设置浏览器地址栏的URL

    URL

    统一资源定位符 (Uniform Resource Locator, URL)

    scheme://host:port/path?query#fragment
    scheme:通信协议
        常用的http,ftp,maito等
    host:主机
        服务器(计算机)域名系统 (DNS) 主机名或 IP 地址。
    port:端口号
        整数,可选,省略时使用方案的默认端口,如http的默认端口为80。
    path:路径
        由零或多个'/'符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。
    query:查询
        可选,用于给动态网页传递参数,可有多个参数,用'&'符号隔开,每个参数的名和值用'='符号隔开。例如:name=zs
    fragment:信息片断
        字符串,锚点.
    

    location有哪些成员?

    • 使用chrome的控制台查看
    • 查MDN MDN

    成员

    • assign()/reload()/replace()
    • hash/host/hostname/search/href……

    history对象

    • back()
    • forward()
    • go()

    navigator对象

    • userAgent
      通过userAgent可以判断用户浏览器的类型

    • platform
      通过platform可以判断浏览器所在的系统平台类型.

    定时器

    setTimeout()和clearTimeout()
    在指定的毫秒数到达之后执行指定的函数,只执行一次

    // 创建一个定时器,1000毫秒后执行,返回定时器的标示
    var timerId = setTimeout(function () {
      console.log('Hello World');
    }, 1000);
    
    // 取消定时器的执行
    clearTimeout(timerId);
    

    setInterval()和clearInterval()
    定时调用的函数,可以按照给定的时间(单位毫秒)周期调用函数

    // 创建一个定时器,每隔1秒调用一次
    var timerId = setInterval(function () {
      var date = new Date();
      console.log(date.toLocaleTimeString());
    }, 1000);
    
    // 取消定时器的执行
    clearInterval(timerId);
    

    DOM

    DOM的概念

    文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。Document Object Model的历史可以追溯至1990年代后期微软与Netscape的“浏览器大战”,双方为了在JavaScriptJScript一决生死,于是大规模的赋予浏览器强大的功能。微软在网页技术上加入了不少专属事物,既有VBScriptActiveX、以及微软自家的DHTML格式等,使不少网页使用非微软平台及浏览器无法正常显示。DOM即是当时蕴酿出来的杰作。

    DOM又称为文档树模型

    image.png
    • 文档:一个网页可以称为文档
    • 节点:网页中的所有内容都是节点(标签、属性、文本、注释等)
    • 元素:网页中的标签
    • 属性:标签的属性

    根据id获取元素

    <input type="button" id="btn" value="按钮">
    
    <script>
    document.getElementById('btn').onclick = function () {
            alert('hello.world!');
        }
    </script>
    

    注意:由于id名具有唯一性,部分浏览器支持直接使用id名访问元素,但不是标准方式,不推荐使用

    根据name获取元素*

    var inputs = document.getElementsByName('hobby');
    for (var i = 0; i < inputs.length; i++) {
      var input = inputs[I];
      console.log(input);
    }
    

    根据类名获取元素

    var mains = document.getElementsByClassName('main');
    for (var i = 0; i < mains.length; i++) {
      var main = mains[I];
      console.log(main);
    }
    

    根据选择器获取元素

    // 只能获取一个元素,如果多个元素使用同一个选择器,只会返回第一个
    var text = document.querySelector('#text');
    console.log(text);
    
    // 获取多个
    var boxes = document.querySelectorAll('.box');
    for (var i = 0; i < boxes.length; i++) {
      var box = boxes[I];
      console.log(box);
    }
    

    获取元素总结

    * 根据id属性的值获取元素,返回来的是一个元素对象
      * document.getElementById("id属性的值");
      *
      * 根据标签名字获取元素,返回来的是一个伪数组,里面保存了多个的DOM对象
      * document.getElementsByTagName("标签名字");
      *
      * 下面的几个,有的浏览器不支持
      *
      * 根据name属性的值获取元素,返回来的是一个伪数组,里面保存了多个的DOM对象
      * document.getElementsByName("name属性的值")
      * 根据类样式的名字来获取元素,返回来的是一个伪数组,里面保存了多个的DOM对象
      * document.getElementsByClassName("类样式的名字")
      * 根据选择器获取元素,返回来的是一个元素对象
      * document.querySelector("选择器的名字");
      *
      * 根据选择器获取元素,返回来的是一个伪数组,里面保存了多个的DOM对象
      * document.querySelectorAll("选择器的名字")
    

    常用事件

    点击事件

    obj.onclick = function () {
        this.style.backgroundColor = 'yellow';
    };
    



    鼠标移动

    // 为li注册鼠标进入事件
    obj.onmouseover = function () {
        this.style.backgroundColor = 'yellow';
    };
    // 为li注册鼠标离开事件
    obj.onmouseout = function () {
        this.style.backgroundColor = '';
    };
    

    获取焦点

    // 获取焦点
    my$('text').onfocus = function () {
    };
    // 失去焦点
    my$('text').onblur = function () {
    };
    

    常用 Api

    textContent 与 innerText#####
    //设置标签中的文本内容,应该使用textContent属性,谷歌,火狐支持,IE8不支持
    //设置标签中的文本内容,应该使用innerText属性,谷歌,火狐,IE8都支持
    
    //如果这个属性在浏览器中不支持,那么这个属性的类型是undefined
    //判断这个属性的类型 是不是undefined,就知道浏览器是否支持
    
    //兼容代码
    
    /* 设置文本 */
    function setInnerText(element,text) {
        if((typeof element.textContent) == "undefined"){//不支持
            element.innerText=text;
        }else{
            element.textContent=text;
        }
    }
    
    /* 获取任意标签中间的文本内容 */
    function getInnerText(element) {
        if((typeof element.textContent) == "undefined"){
            return element.innerText;
        }else{
            return element.textContent;
        }
    }
    
    innerHTML和innerText#####

    innerHTML

    • innerHTML是可以设置文本内容,innerHTML主要的作用是在标签中设置新的html标签内容,是有标签效果的

    innerText

    • innerText主要是设置文本的,设置标签内容,是没有标签的效果的
    Attribute

    getAttribute获取自定义属性的值

    <p custom = "10" id="t">1111</p>
    
    <script>
       my$('t').onclick = function () {
           alert(this.getAttribute('custom'));
       };
    </script>
    

    removeAttribute获取自定义属性的值

    //点击按钮移除元素的自定义属性
      my$("btn").onclick=function () {
        //my$("dv").removeAttribute("score");
        //移除元素的类样式
        //值没有了,但是属性还是有的
        //my$("dv").className="";
        //也可以移除元素的自带的属性
        my$("dv").removeAttribute("class");
      };
    

    setAttribute 设置自定义属性

    spans[i].setAttribute("index",i);
    

    节点

    在 HTML DOM 中,所有事物都是节点。DOM 是被视为节点树的 HTML。

    HTML DOM 节点树

    image.png

    通过 HTML DOM,树中的所有节点均可通过 JavaScript 进行访问。所有 HTML 元素(节点)均可被修改,也可以创建或删除节点。

    节点属性

    • nodeType:节点的类型: 1----标签,2---属性,3---文本

    • nodeName:节点的名字:标签节点---大写的标签名字,属性节点---小写的属性名字,文本节点----#text

    • nodeValue:节点的值:标签节点---null,属性节点---属性值,文本节点---文本内容

    节点父、子和同胞

    var ulObj=document.getElementById("uu");
    //父级节点
    console.log(ulObj.parentNode);
    //父级元素
    console.log(ulObj.parentElement);
    //子节点
    console.log(ulObj.childNodes);
    //子元素
    console.log(ulObj.children);
    console.log("==============================================");
    //第一个子节点
    console.log(ulObj.firstChild);//------------------------IE8中是第一个子元素
    //第一个子元素
    console.log(ulObj.firstElementChild);//-----------------IE8中不支持
    //最后一个子节点
    console.log(ulObj.lastChild);//------------------------IE8中是第一个子元素
    //最后一个子元素
    console.log(ulObj.lastElementChild);//-----------------IE8中不支持
    //某个元素的前一个兄弟节点
    console.log(my$("three").previousSibling);
    //某个元素的前一个兄弟元素
    console.log(my$("three").previousElementSibling);
    //某个元素的后一个兄弟节点
    console.log(my$("three").nextSibling);
    //某个元素的后一个兄弟元素
    console.log(my$("three").nextElementSibling);
    

    节点操作

    节点操作,方法
        appendChild()
        insertBefore()
        removeChild()
        replaceChild()
    节点层次,属性
        parentNode
        childNodes
        children
        nextSibling/previousSibling
        firstChild/lastChild
    

    元素创建

    创建元素的三种方式

    document.write()

    document.write('新设置的内容<p>标签也可以生成</p>');
    

    innerHTML

    var box = document.getElementById('box');
    box.innerHTML = '新内容<p>新标签</p>';
    

    document.createElement()

    var div = document.createElement('div');
    document.body.appendChild(div);
    

    事件

    注册/移除事件的三种方式

    var box = document.getElementById('box');
    // 方式一
    box.onclick = function () {
      console.log('点击后执行');
    };
    box.onclick = null;
    
    // 方式二
    box.addEventListener('click', eventCode, false);
    box.removeEventListener('click', eventCode, false);
    
    // 方式三
    box.attachEvent('onclick', eventCode);
    box.detachEvent('onclick', eventCode);
    
    function eventCode() {
      console.log('点击后执行');
    }
    



    兼容模式

    function addEventListener(element, type, fn) {
      if (element.addEventListener) {
        element.addEventListener(type, fn, false);
      } else if (element.attachEvent){
        element.attachEvent('on' + type,fn);
      } else {
        element['on'+type] = fn;
      }
    }
    
    function removeEventListener(element, type, fn) {
      if (element.removeEventListener) {
        element.removeEventListener(type, fn, false);
      } else if (element.detachEvent) {
        element.detachEvent('on' + type, fn);
      } else {
        element['on'+type] = null;
      }
    }
    

    事件的三个阶段

    1. 捕获阶段 (从外向内)
    2. 当前目标阶段 (最开始选择的那个)
    3. 冒泡阶段 (从里向外)
      事件对象.eventPhase属性可以查看事件触发时所处的阶段

    事件对象的属性和方法

    • event.type 获取事件类型
    • clientX/clientY 所有浏览器都支持,窗口位置
    • pageX/pageY IE8以前不支持,页面位置
    • event.target || event.srcElement 用于获取触发事件的元素
    • event.preventDefault() 取消默认行为

    阻止事件传播的方式

    • 标准方式 event.stopPropagation();
    • IE低版本 event.cancelBubble = true; 标准中已废弃

    常用的鼠标和键盘事件

    • onmouseup 鼠标按键放开时触发
    • onmousedown 鼠标按键按下触发
    • onmousemove 鼠标移动触发
    • onkeyup 键盘按键按下触发
    • onkeydown 键盘按键抬起触发

    特效

    偏移量

    • offsetParent用于获取定位的父级元素
    • offsetParent和parentNode的区别
    var box = document.getElementById('box');
    console.log(box.offsetParent);
    console.log(box.offsetLeft);
    console.log(box.offsetTop);
    console.log(box.offsetWidth);
    console.log(box.offsetHeight);
    
    image.png

    客户区大小Client 可视区域

    var box = document.getElementById('box');
    console.log(box.clientLeft);左边边框的宽度console.log(box.clientTop);上面的边框的宽度
    console.log(box.clientWidth); 可视区域的宽(没有边框),边框内部的宽度
    console.log(box.clientHeight);可视区域的高(没有边框),边框内部的高度
    
    image.png

    滚动偏移

    var box = document.getElementById('box');
    console.log(box.scrollLeft) 向左卷曲出去的距离
    console.log(box.scrollTop)  向上卷曲出去的距离
    console.log(box.scrollWidth)  元素中内容的实际的宽(如果内容很少,没有内容,元素自身的宽),没有边框
    console.log(box.scrollHeight)  元素中内容的实际的高(如果内容很少或者没有内容,元素自身的高),没有边框
    
    image.png

    元素的类型

    image.png

    相关文章

      网友评论

          本文标题:Web开发 | WebAPI 介绍 & 使用总结 (四)

          本文链接:https://www.haomeiwen.com/subject/wjsakqtx.html