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

2018-12-24  本文已影响0人  Leon_520

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有哪些成员?

成员

history对象

navigator对象

定时器

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

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 元素(节点)均可被修改,也可以创建或删除节点。

节点属性

节点父、子和同胞

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属性可以查看事件触发时所处的阶段

事件对象的属性和方法

阻止事件传播的方式

常用的鼠标和键盘事件

特效

偏移量

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
上一篇下一篇

猜你喜欢

热点阅读