原生开发WebApi知识点总结

WebApi

Web API: 浏览器提供的一套API(方法),通过这套API我们可以非常轻易的操作页面的元素和浏览器的一些功能。API是一些预先定义的方法,这些方法能够实现某些特定的功能,我们无须知道这些API的实现方式,但是我们需要知道这些API如何使用。通俗的讲,API就是编程语言给我提供的一些工具,通过这些工具,我们可以非常轻易的完成一些功能。

案例地址: https://github.com/pengjunshan/WebPJS/WebApi

其它Web文章
HtmlCss基础学习第一章
CSS基础学习第二章
CSS浮动的使用和解决浮动的五种方法
CSS定位relative、absolute、fixed使用总结
开发中常用jQuery知识点总结
C3动画+H5+Flex布局使用总结
ES6常用知识总结
Vue学习知识总结
开发环境到生产环境配置webpack
待续......

主要是操作DOM和BOM

DOM概念

DOM(Document Object Model)可以把HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操作。
经常进行的操作有:获取元素、对元素进行操作(设置其属性或调用其方法)、动态创建元素、事件(什么时机做相应的操作)、等等;

DOM文档树模型

BOM概念

BOM(Browser Object Model) 是指浏览器对象模型,BOM由多个对象组成,其中代表浏览器窗口的Window对象是BOM的顶层对象,其他对象都是该对象的子对象。
经常进行的操作有:对话框、定时器、location对象、history对象、等等;

本编文章会讲到的知识点
  • 获取页面元素
  • 属性操作
  • 创建元素
  • 节点操作
  • 事件对象
  • BOM对象
获取页面元素

需要操作页面上的某部分元素(显示/隐藏,动画),需要先获取到该部分对应的元素,才进行后续操作。

1.根据id获取元素

参数:字符串类型 id,返回值:元素, 如果找不到,返回的是null。

var div = document.getElementById('main');
console.log(div);

2.根据标签名获取元素

get:获取 elements:元素 by:通过 tagName:标签名
返回值:伪数组,伪数组不是数组,但是可以跟数组一样遍历,也可以通过下标操作。不能用数组的方法。

var divs = document.getElementsByTagName('div');
for (var i = 0; i < divs.length; i++) {
  var div = divs[i];
  console.log(div);
}

3.根据name获取元素

和getElementById()差不多,根据元素中name属性值来查找,返回值也是个伪数组。

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

4.根据类名获取元素

ClassName:一目了然是根据class类名来查找,返回值是伪数组。

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

5.根据选择器获取元素

参数: 字符串类型的 css选择器;
querySelector(".cool"),返回值:元素, 如果是多个,只会返回第一个。
querySelectorAll(".cool"),返回值: 伪数组。

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

案例

用到了这六种方式来获取页面中的元素。案例请到https://github.com/pengjunshan/WebPJS中查看

<body>
    <h1 name="pjs"></h1>

    <ul id="imgs">
        <li>
            <a href="../img/1.jpg" title="美女A">
                <img src="../img/1-small.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="../img/2.jpg" title="美女B">
                <img src="../img/2-small.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="../img/3.jpg" title="美女C">
                <img src="../img/3-small.jpg" alt="">
            </a>
        </li>
        <li>
            <a href="../img/4.jpg" title="美女D">
                <img src="../img/4-small.jpg" alt="">
            </a>
        </li>
    </ul>

    <img src="../img/placeholder.png" width="400" height="250" alt="" id="bigImg">


    <!--标签的内容-->
    <p class="des">这是描述信息</p>
    <p class="des">这是描述信息</p>
    <p class="des">这是描述信息</p>

    <script>
        //1. 点击a标签时,能够呵呵就行。
        //2. 修改大图片的src  p标签的innerText

        //1. 找对象
        var imgs = document.getElementById("imgs");//ul
        var links = imgs.getElementsByTagName("a");//所有的a标签
        var bigImg = document.querySelector("#bigImg");//大图片
        var des = document.querySelectorAll(".des");
        var pjs = document.getElementsByName("pjs");

        pjs[0].innerText = "美女相册";

        //2. 给所有的a标签注册点击事件
        for (var i = 0; i < links.length; i++) {
            links[i].onclick = function () {

                //3. 修改大图片的src属性, this.href
                bigImg.src = this.href;

                //4. 修改p标签的内容, innerText:内部的文本
                des[0].innerText = this.title;

                //5. 阻止a跳转
                return false;
            }
        }

    </script>
</body>
属性操作

通过DOM对象也就是我们获取的元素,可以进行属性操作、类名操作、样式操作、等等。

1.非表单元素的属性

href、title、id、src、className、innerHTML、innerText等等属性。
innerHTML可以从字符中识别标签,innerText只认为都是字符串。

var link = document.getElementById('link');
console.log(link.href);
console.log(link.title);
var box = document.getElementById('box');
box.innerHTML = '我是文本<p>我会生成为标签</p>';
console.log(box.innerHTML);
box.innerText = '我是文本<p>我不会生成为标签</p>';
console.log(box.innerText);

2.表单元素属性

value 用于大部分表单元素的内容获取(option除外)、type 可以获取input标签的类型(输入框或复选框等)、disabled 禁用属性、checked 复选框选中属性、selected 下拉菜单选中属性;

                  this.value = "钢琴";
                  if (inputs[i].type === "text") {
                    inputs[i].disabled = true;
                } else if (inputs[i].type === "checkbox") {
                    inputs[i].checked = true;
                }

        var options = document.getElementsByTagName("option");
        btn.onclick = function () {
            //写一个随机数
            //[0,1)
            //随机数需要写在事件里头,每次点击都要重新生成随机数
            var random = parseInt(Math.random() * options.length);
            options[random].selected = true;
        }

3.自定义属性操作

getAttribute() 获取标签行内属性、setAttribute() 设置标签行内属性、removeAttribute() 移除标签行内属性。setAttribute()可以修改属性值也可以添加属性

        <div id="pp" index="1" aa="a"></div>
        var pp = document.getElementById("pp");
        console.log(pp.getAttribute("index"))
        pp.setAttribute("index", "2");
        console.log(pp.getAttribute("index"))
        pp.setAttribute("name", "pjs")
        pp.removeAttribute("aa")
        console.log(pp)

4.样式操作

使用style方式设置的样式显示在标签行内,obj.style.=,始终对应的都是行内样式, 获取的也是行内样式, 设置的也是行内样式。通过样式属性设置宽高、位置的属性类型是字符串,需要加上px。

        <div id="box"></div>
        var box = document.getElementById("box");
        box.style.borderRadius = "50%";
        box.style.backgroundColor = "pink";
        box.style.width = "200px";
        box.style.height = "100px"
        console.log(box.style.backgroundColor)

5.类名操作

修改标签的className属性相当于直接修改标签的类名。

    #sd{
        width: 200px;
        height: 200px;
        background-color: red;
    }
    .show{
        display: block;
    }
    .none{
        display: none;
    }
    <input type="button" value="切换类名">
    <div id="sd" class="show"></div>
       /**
        * 类名操作 切换类名
        */
        var sdDiv = document.getElementById("sd");
        var inputs = document.getElementsByTagName("input");
        for(var i = 0; i<inputs.length; i++){
            if(inputs[i].type == "button"){
                inputs[i].onclick = function(){
                    if(sdDiv.className === "show"){
                        sdDiv.className = "none";
                    }else{
                        sdDiv.className = "show";
                    }
                }
            }
        }

6.案例

table栏切换效果,案例请到https://github.com/pengjunshan/WebPJS中查看

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }

        ul {
            list-style: none;
        }

        .wrapper {
            width: 1000px;
            height: 475px;
            margin: 0 auto;
            margin-top: 100px;
        }

        .tab {
            border: 1px solid #ddd;
            border-bottom: 0;
            height: 36px;
            width: 320px;
        }

        .tab .tab-item {
            position: relative;
            float: left;
            width: 80px;
            height: 34px;
            line-height: 34px;
            text-align: center;
            cursor: pointer;
            border-top: 4px solid #fff;
        }

        .tab span {
            position: absolute;
            right: 0;
            top: 10px;
            background: #ddd;
            width: 1px;
            height: 14px;
            overflow: hidden;
        }

        .products {
            width: 1002px;
            border: 1px solid #ddd;
            height: 476px;
        }

        .products .main {
            float: left;
            display: none;
        }

        .products .main.selected {
            display: block;
        }

        .tab li.active {
            border-color: red;
            border-bottom: 0;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <ul class="tab">
            <li class="tab-item active">国际大牌<span>◆</span></li>
            <li class="tab-item">国妆名牌<span>◆</span></li>
            <li class="tab-item">清洁用品<span>◆</span></li>
            <li class="tab-item">男士精品</li>
        </ul>
        <div class="products">
            <div class="main selected">
                <a href="###"><img src="../img/guojidapai.jpg" alt="" /></a>
            </div>
            <div class="main">
                <a href="###"><img src="../img/guozhuangmingpin.jpg" alt="" /></a>
            </div>
            <div class="main">
                <a href="###"><img src="../img/qingjieyongpin.jpg" alt="" /></a>
            </div>
            <div class="main">
                <a href="###"><img src="../img/nanshijingpin.jpg" alt="" /></a>
            </div>
        </div>
    </div>

    <script>
        //思路:
        //1. 找对象
        //2. 给所有的li注册onmouseover事件
        //3. 排他
        var lis = document.querySelectorAll(".tab-item");
        var divs = document.querySelectorAll(".main");
        //注册事件
        for (var i = 0; i < lis.length; i++) {
            //存储一个下标
            lis[i].index = i;
            lis[i].onmouseover = function () {
                //干掉所有人  仅仅是active这个类清除
                for (var i = 0; i < lis.length; i++) {
                    lis[i].className = "tab-item";
                    divs[i].className = "main";
                }
                //复活我自己
                this.className = "tab-item active";
                divs[this.index].className = "main selected";
            }
        }
    </script>
</body>
</html>
创建元素

动态创建元素有三种方式:document.write()、innerHTML()、document.createElement();

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <div>我是印第安人</div>
    <div id="dd"></div>
    <script>
        /**
          *document.write()
          */
        document.write('我是document.write()创建的标签:<span>标签也可以生成</span>');

        /**
        *   innerHTML
        */
        var dd = document.getElementById("dd");
        dd.innerHTML = "我是innerHTML()创建的标签:<span>标签也可以生成</span>";

        /**
        * document.createElement()
        */
        var dd2 = document.createElement("div");
        dd2.innerText = "我是document.createElement()创建的元素"
        document.body.appendChild(dd2)

    </script>
</body>

</html>
节点操作

整个文档是一个文档节点,每个 HTML 元素是元素节点,HTML 元素内的文本是文本节点,每个 HTML 属性是属性节点,注释是注释节点;

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

1.节点层次,属性

通过DOM对象查找子节点(childNodes children)、父节点(parentNode parentElement)、兄弟节点(previousSibling previousElementSibling nextSibling nextElementSibling)、第一个节点(firstChild firstElementChild)、最后一个节点(lastChild lastElementChild)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <div id="pp">
        <div>敏文兄</div>
        <div>平平</div>
        <div id="dyy">短圆圆</div>
        <p>邱航</p>
        <p>胖子</p>
    </div>

    <script>
        var pp = document.querySelector("#pp");
        var dyy = document.getElementById("dyy");

        //childNodes:可以获取到某个元素所有的子节点
        var childs = pp.childNodes;
        console.log(childs)

        //我们需要的是标签节点,元素 判断一个节点是不是标签: nodeType === 1
        for (var i = 0; i < childs.length; i++) {
            if (childs[i].nodeType === 1) {
                console.log(childs[i]);
            }
        }

        //children : 获取某个元素中所有的子元素(children)
        var childrens = pp.children;
        console.log(childrens)

        //第一个孩子节点
        console.log(pp.firstChild)
        //  console.log(childs[0])
        //第一个孩子元素
        console.log(pp.firstElementChild)
        //  console.log(childrens[0])

        //最后一个孩子节点
        console.log(pp.lastChild)
        // console.log(childs[childs.length-1])
        //最后一个孩子元素
        console.log(pp.lastElementChild)
        // console.log(childrens[childrens.length-1])

        //兄弟姐妹:sibling
        //上一个兄弟节点
        console.log(dyy.previousSibling)
        //上一个兄弟元素
        console.log(dyy.previousElementSibling);

        //下一个兄弟节点
        console.log(dyy.nextSibling);
        //下一个兄弟元素
        console.log(dyy.nextElementSibling);

        //父节点
        console.log(dyy.parentNode)
        //父元素
        console.log(dyy.parentElement)

    </script>
</body>

</html>

2.节点操作,方法

通过节点对象可以进行 添加节点(appendChild())、插入节点(insertBefore())、删除节点(removeChild())、替换节点(replaceChild())、克隆节点(cloneNode());代码中注释请仔细查看

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <div id="pp">
        <div>敏文兄</div>
        <div>平平</div>
        <div id="dyy">短圆圆</div>
        <p>邱航</p>
        <p>胖子</p>
    </div>

    <script>
        var pp = document.querySelector("#pp");
        var dyy = document.getElementById("dyy");

        //克隆节点cloneNode(*) *: 为布尔值,如果为true,那么将克隆原节点,以及所有子节点;为false时,仅复制节点本身
        var cldyy = dyy.cloneNode(true);

        //添加节点appendChild()添加到尾端  
        // pp.appendChild(cldyy);

        //插入节点insertBefore(newChild,*)第一个参数:newChild 需要添加的元素,
        //第二个参数:refChild 添加到哪个子元素前面 传null默认最后末端.
        pp.insertBefore(cldyy, pp.children[0])
        console.log(pp)

        //移除节点removeChild(*) *:要移除的节点 
        pp.removeChild(pp.children[1]);
        console.log(pp)

    </script>
</body>

</html>

3.案例

动态创建table表格、删除表格、增加表格功能。案例请到https://github.com/pengjunshan/WebPJS中查看。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        table {
            border: 1px solid #000;
            /*边框合并*/
            border-collapse: collapse;
        }

        th {
            border: 1px solid #000;
            height: 40px;
            background-color: #ccc;
        }

        td {
            border: 1px solid #000;
            height: 30px;
            text-align: center;
            padding: 0 30px;
        }
    </style>
</head>

<body>
    <button class="addBtn">增加</button>
    <script>

        //js对象  json  ajax
        var data = {
            "header": ["姓名", "性别", "年龄", "描述"],
            "content": [
                { "name": "王琨", "gender": "女", "age": 30, "desc": "曾经是个王者" },
                { "name": "王梦茹", "gender": "女", "age": 18, "desc": "小仙女" },
                { "name": "罗杰", "gender": "男", "age": 23, "desc": "海贼王船长" },
                { "name": "袁小雨", "gender": "男", "age": 38, "desc": "打酱油的" },
                { "name": "黄张龙", "gender": "女", "age": 28, "desc": "社会我龙哥,人狠话不多" },
                { "name": "王浩", "gender": "男", "age": 23, "desc": "死基佬,死基佬" },
                { "name": "孙广明", "gender": "男", "age": 3, "desc": "学霸,大神" },
            ]
        }

        //1. 创建一个table,添加到body
        var mTable = document.createElement("table");
        document.body.appendChild(mTable);
        //2. 创建一个thead,添加到table
        var mThead = document.createElement("thead");
        mTable.appendChild(mThead);
        //2.1 创建一个tr,添加到thead
        var theadTr = document.createElement("tr");
        mThead.appendChild(theadTr);
        //2.2 创建多个th, 添加到tr中, 设置内容
        var headerList = data.header;
        for (let i = 0; i < headerList.length; i++) {
            var mTh = document.createElement("th");
            mTh.innerText = headerList[i];
            theadTr.appendChild(mTh);
        }
        //3. 创建tbody,添加到table
        var mTbody = document.createElement("tbody");
        mTable.appendChild(mTbody);
        //3.1 创建多个tr,添加tbody
        //3.2 创建多个td,添加到tr中, 设置内容
        //4.添加删除功能
        var contentList = data.content;
        for (let i = 0; i < contentList.length; i++) {
            var tr = document.createElement("tr");
            mTbody.appendChild(tr);
            var obj = contentList[i];
            for (const key in obj) {
                var td = document.createElement("td")
                tr.appendChild(td)
                td.innerText = obj[key]
            }
            var delTd = document.createElement("td");
            tr.appendChild(delTd);
            var btn = document.createElement("button");
            btn.innerText = "删除";
            delTd.appendChild(btn);
            btn.onclick = function () {
                mTbody.removeChild(this.parentNode.parentNode);
            }
        }
        var delTh = document.createElement("th");
        delTh.innerText = "删除"
        theadTr.appendChild(delTh)

        //5.新增表格
        var addBtn = document.getElementsByClassName("addBtn")
        console.log(addBtn)
        addBtn[0].onclick = function () {
            console.log("11111111")
            var addTr = document.createElement("tr");
            mTbody.appendChild(addTr);
            var nameTd = document.createElement("td");
            nameTd.innerText = "张三";
            addTr.appendChild(nameTd)
            var sexTd = document.createElement("td");
            sexTd.innerText = "男";
            addTr.appendChild(sexTd);
            var ageTd = document.createElement("td");
            ageTd.innerText = "18";
            addTr.appendChild(ageTd)
            var msTd = document.createElement("td");
            msTd.innerText = "我是描述";
            addTr.appendChild(msTd)
            var delTd = document.createElement("td");
            addTr.appendChild(delTd);
            var btn = document.createElement("button");
            btn.innerText = "删除";
            delTd.appendChild(btn);
            btn.onclick = function () {
                mTbody.removeChild(this.parentNode.parentNode);
            }
        }

    </script>
</body>

</html>

事件对象

捕获阶段、当前目标阶段、冒泡阶段、事件对象.eventPhase属性可以查看事件触发时所处的阶段。

1.对象的属性

在触发某个事件的时候,都会产生一个事件对象Event,这个对象中包含所有与事件相关的一些信息,包括触发事件的元素,事件的类型以及其他与事件相关的信息。

记录了鼠标位置信息的相关属性

screenX与screenY:光标相对于屏幕左上角的水平位置与垂直位置。
clientX与clientY:光标相对于可视区左上角的水平位置和垂直位置。
pageX与pageY:光标相对于网页(文档document)左上角的水平位置与垂直位置(推荐使用)

记录了键盘码的属性

event.keyCode:键盘按下的那个键的键盘码

常见的鼠标事件

onmousedown:鼠标按下事件
onmouseup:鼠标弹起事件
onclick:单击事件
ondblclick:双击事件
onmouseover:鼠标经过事件
onmouseout:鼠标离开事件
onmousemove:鼠标移动事件
onfocus:鼠标获得焦点事件
onblur:鼠标失去焦点事件

常见的键盘事件

onkeydown:键盘按下时触发
onkeyup:键盘弹起时触发

案例

自定义弹窗,随着鼠标按下移动而移动。案例请到https://github.com/pengjunshan/WebPJS中查看。

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    .nav {
      height: 30px;
      background: #036663;
      border-bottom: 1px solid #369;
      line-height: 30px;
      padding-left: 30px;
    }

    .nav a {
      color: #fff;
      text-align: center;
      font-size: 14px;
      text-decoration: none;

    }

    .d-box {
      width: 400px;
      height: 300px;
      border: 5px solid #eee;
      box-shadow: 2px 2px 2px 2px #666;
      position: absolute;
      top: 40%;
      left: 40%;
    }

    .hd {
      width: 100%;
      height: 25px;
      background-color: #7c9299;
      border-bottom: 1px solid #369;
      line-height: 25px;
      color: white;
      cursor: move;
    }

    #box_close {
      float: right;
      cursor: pointer;
    }
  </style>
</head>

<body>
  <div class="d-box" id="d_box">
    <div class="hd" id="drop">注册信息 (可以拖拽)
      <span id="box_close">【关闭】</span>
    </div>
    <div class="bd"></div>
  </div>

  <script>
    var d_box = document.getElementById("d_box");
    var drop = document.getElementById("drop");

    /**
    * 给头部注册点击事件 获取鼠标点距离
    */
    drop.onmousedown = function (e) {
      var leftX = e.pageX - d_box.offsetLeft;
      var topY = e.pageY - d_box.offsetTop;

      /**
      * 给document注册移动事件 动态改变弹窗的位置
      */
      document.onmousemove = function (e) {
        d_box.style.left = e.pageX - leftX + "px";
        d_box.style.top = e.pageY - topY + "px";
      }
    }

    /**
    * 鼠标离开是取消掉document注册移动事件
    */
    drop.onmouseup = function () {
      document.onmousemove = null;
    }

  </script>
</body>

</html>
BOM对象

平时常用的对象有window对象、定时器、location对象、history对象。

1.window对象

  • window对象是一个全局对象,也可以说是JavaScript中的顶级对象
  • 像document、alert()、console.log()这些都是window的属性,其实BOM中基本所有的属性和方法都是属性window的。
  • 所有定义在全局作用域中的变量、函数都会变成window对象的属性和方法
  • window对象下的属性和方法调用的时候可以省略window

2.定时器
2.1延时定时器

延时定时器可以让代码延迟一段时间之后才执行(定时炸弹)

/**
* 设置延时定时器
*/
//语法:setTimeOut(callback, time);
//参数1:回调函数,时间到了就会执行。
//参数2:延时的时间
//返回:定时器的id,用于清除
//示例:
var timer = setTimeOut(function(){
    //1秒后将执行的代码。
}, 1000);

/**
* 清除延时定时器
*/
//语法:clearTimeOut(timerId)
//参数:定时器id
//示例:
clearTimeOut(timer);//清除上面定义的定时器

2.2间歇定时器

间歇定时器让定时器每隔一段时间就会执行一次,并且会一直执行,直到清除定时器为止.

/**
* 设置间歇定时器
*/
//语法:var intervalID = setInterval(func, delay);
//参数1:重复执行的函数
//参数2:每次延迟的毫秒数
//返回:定时器的id,用于清除
//示例:
var timer = setInterval(function(){
    //重复执行的代码。
}, 1000);

/**
* 清除间歇定时器
*/
//语法:clearInterval(intervalID)
//参数:定时器id
//示例:
clearInterval(timer);//清除上面定义的定时器

3.location对象

location对象也是window的一个属性,location其实对应的就是浏览器中的地址栏。

location.href = “http://www.baidu.com”;//让页面跳转到百度首页
location.reload();//让页面重新加载
location.reload(true);//强制刷新,相当于ctrl+F5
location.reload(false);//刷新,相当于F5

console.log(window.location.hash);//哈希值 其实就是锚点
console.log(window.location.host);//服务器 服务器名+端口号
console.log(window.location.hostname);//服务器名
console.log(window.location.pathname);//路径名
console.log(window.location.port);//端口
console.log(window.location.protocol);//协议
console.log(window.location.search);//参数

5.其他对象

//后退:
history.back();
history.go(-1);
//前进:
history.forward();
history.go(1);

console.log(screen.width);//屏幕的宽度 
console.log(screen.height);//屏幕的高度
console.log(screen.availWidth);//浏览器可占用的宽度
console.log(screen.availHeight);//浏览器可占用的高度

6.案例

班级随机点名deml,案例请到https://github.com/pengjunshan/WebPJS中查看。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        table {
            margin: 50px auto;
        }

        td {
            padding: 15px;
            text-align: center;

            /*border: 1px solid #000;*/
        }

        input {
            width: 100px;
            height: 40px;
            margin: 0 auto;
        }
    </style>
</head>

<body>
    <input type="button" value="开始" id="btn1">
    <input type="button" value="结束" id="btn2">
    <script>
        var list = [
            ["@", "@", "@", "老师", "@", "@", "杜嘉晖", "廖国藩", "王浩", "孙广明", "@"],
            ["@", "张萍", "叶继平", "沈阳", "许诚", "@", "罗杰", "武富云", "汪昊", "曹菁", "罗莉"],
            ["@", "黄泽民", "吴永霞", "刘娟", "李琛", "@", "贾海华", "葛玥", "袁小雨", "袁敏", "李佩芸", "窦松婷"],
            ["刘玉军", "尹钦", "冯梓硕", "阙文琦", "唐海华", "@", "许海燕", "张曼玉", "王正来", "顾军", "陈辉", "杨阳"],
            ["王梦茹", "胡佳丽", "何育娟", "郞文静", "刘莹", "@", "王继杰", "王寿南", "何家亮", "杨博文", "路雨", "梅瑶瑶"],
            ["张杰", "李明珠", "王淑华", "谭喜兵", "周云卓", "@", "张陆凯", "宋余乐", "王琨", "胡崇文", "谢凌辉", "王康"],
            ["@", "黄张龙", "王世波", "孙苏霞", "陈振", "@", "刘钦罡", "黄维", "吴伟强", "张童", "李斌"],
        ];

        //1. 创建table,添加到body


        var mTable = document.createElement("table");
        document.body.appendChild(mTable);

        //创建一个tds变量来存所有的td对象 来做随机点名的集合
        let tds = [];

        //2. 根据list的长度,创建tr,添加到table
        for (let i = 0; i < list.length; i++) {

            //根据list的长度来创建响应的tr 并添加到table中
            var mTr = document.createElement("tr");
            mTable.appendChild(mTr);

            //3. 根据list[i]的长度,创建td,添加到tr中
            let sonList = list[i];
            for (let i = 0; i < sonList.length; i++) {
                //根据sonList子集合来创建td 并添加到mTr中
                let mTd = document.createElement("td");
                mTr.appendChild(mTd);

                //如果有人名就设置背景色填充名字
                if (sonList[i] !== "@") {
                    mTd.innerText = sonList[i];
                    mTd.style.backgroundColor = "yellowgreen";

                    //如果是老师 就不添加到tds集合中
                    if (sonList[i] === "老师") {
                        continue;
                    }
                     //添加到tds集合中
                tds.push(mTd)
                }
            }
        }

        let tiemInterval;
        //开始点名
        document.getElementById("btn1").onclick = function () {

            //先清理定时器
            clearInterval(tiemInterval);
            tiemInterval = setInterval(function(){

                //先把所有的td背景色都还原
                for(let i=0; i<tds.length; i++){
                    tds[i].style.backgroundColor = "yellowgreen"
                }

                //随机一个td设置高亮
                let position = parseInt(Math.random() * tds.length);
                tds[position].style.backgroundColor = "hotpink";

            },100);

        }

        //结束点名 清楚定时器
        document.getElementById("btn2").onclick = function () {
            clearInterval(tiemInterval);
        }

    </script>
</body>

</html>
随机点名案例
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269