2019-06-08 webapi 第五天


01复习indesof

<!--

        indexOf:查找某个字符在字符串中出现的下标

            从左往右起的第一个出现这个字符的下标

            如果是多个字母只是出现首字母的下标

            如果查找的字符不在这个字符串中,那么会得到-1

                反过来说,如果不等于-1,就代表这个字符一定在字符串里面

            特殊情况:

                如果传一个空字符串,那么会得到0

    -->

</head>

<body>


    <script>

        var str = "hello world";

        // 我要获取e这个字母的下标

        // var res = str.indexOf('o');

        // console.log(res);//4

        // var res = str.indexOf('wor');

        // console.log(res);//6

        // var res = str.indexOf(' ');

        // console.log(res);//5

        // var res = str.indexOf('z');

        // console.log(res);//-1

        var res = str.indexOf('');

        console.log(res);//0

02模拟百度搜索框

  <!--

        键盘弹起事件:

            onkeyup:

                因为不管你输入什么,只要输入完了键盘都会弹起,换句话说,键盘弹起了你就是把这个字符输入完了

    -->

    <meta charset="UTF-8">

    <title></title>

    <style>

        * {

            margin: 0;

            padding: 0;

        }

        body {

            font-size: 20px;

        }

        .box {

            width: 600px;

            height: 40px;

            margin: 200px auto;

            position: relative;

        }

        #txt {

            width: 498px;

            height: 38px;

            border: 1px solid #eee;

            font-size: 20px;

        }

        #search {

            width: 100px;

            height: 40px;

        }

        #keywords {

            position: absolute;

            top: 40px;

            left: 0;

            background-color: rgb(12, 255, 24);

            list-style: none;

            width: 500px;


        }

        li {

            line-height: 24px;

        }

        /* li:hover{

            background-color: #f00;

        } */

    </style>

</head>

<body>

    <div class="box">

        <!-- 输入的地方 -->

        <div class="top">

            <input type="text" id="txt" /><input type="button" value="search" id="search" />

        </div>

        <!-- 展现联想结果的地方 -->

        <ul id="keywords"></ul>

    </div>

    <!--

        1. 给文本框加键盘弹起事件

            1.1 拿到输入的内容

            1.2 遍历数组,判断数组中元素是否包含这个内容

            1.3 如果包含,创建li标签,加到ul里面

        2. 每次出新结果之前,清空上一次结果

                就是在事件里一开始把ul.innerHTML = "";

        3. 如果输入的内容为空,会把所有元素都显示出来

            解决办法:判断输入的内容是否为空,如果为空,就立刻return(结束函数)

        4. 给li加事件

                鼠标移入事件,谁移入谁变红

                鼠标移出事件,谁移出谁恢复(改为空)

                鼠标点击事件,谁点击就把谁的内容放到文本框里,并且清空ul

    -->

    <script>

        // 找到ul

        var ul = document.getElementById('keywords');

        // 找到文本框

        var txt = document.getElementById('txt');

        var keywords = ["林利群", "林利群为什么很黑", "林利群的经纪人是周林林吗", "林利群是谁", "广东人", "广东人爱吃", "广东人爱吃福建人", "林丹的生平", "JavaScript", "Java", "王思聪", "王健林", "社会王", "隔壁老王", "林绿群", "你打球像蔡徐坤", 'aaa', 'bbb','王祖蓝','你打球王祖蓝','唐长老','唐长老和女儿国国王不得不说的故事','唐长老取到真经又如何?始终不见伊人笑'];

        // 等用户在文本框输入完了立刻拿到输入的文字,再来遍历数组,看数组元素有没有包含这个文字,包含就做成li标签加到ul里面

        // 我有一段代码,要等你输入完了才触发

        // onkeyup事件 键盘弹起事件

        txt.onkeyup = function(){

            // 清空上一次结果

            ul.innerHTML = "";


            var str = this.value;

            if(str == ""){

                // 立即跳出函数,代码后面代码不执行了

                return;

            }


            // 遍历数组

            for(var i = 0; i < keywords.length; i++){

                // 拿到数组中每个元素,判断你元素包不包含你输入的这个文字

                if(keywords[i].indexOf(str) != -1){

                    //1.创建li

                    var li = document.createElement('li');

                    li.innerHTML = keywords[i];

                    //2.加到ul

                    ul.appendChild(li);

                    // 给每个li加鼠标移入事件

                    li.onmouseover = function(){

                        //谁移入,就让谁变红

                        this.style.backgroundColor = "red";

                    }

                    // 给每个li加鼠标移出事件

                    li.onmouseout = function(){

                        // 给li颜色为空,代表不给她颜色,不给她颜色就用ul的颜色了

                        // 默认就是ul的颜色

                        this.style.backgroundColor = "";

                    }

                    // 给每个li加点击事件

                    li.onclick = function(){

                        // 把被点击的li,赋值给文本框的value去显示

                        txt.value = this.innerHTML;

                        ul.innerHTML = "";

                    }

                }

            }



        }

03删除子元素

<!--

        在原生的JS里,自己想死,还自杀不了,还得找到他爸爸,让他爸爸把他弄死

        所以要删一个元素

        找到他父元素

        父元素的.removeChild() 方法来删除这个儿子

        语法:

            父元素.removeChild(子元素)

                    删除父元素下面的某个子元素

    -->

</head>

<body>


    <input type="button" value="删除li3" id="btn">

    <ul>

        <li>隔壁老王1</li>

        <li>隔壁老王2</li>

        <li id="li3">隔壁老王3</li>

        <li>隔壁老王4</li>

        <li>隔壁老王5</li>

    </ul>

    <script>

        //找到li3

        var li3 = document.getElementById('li3');

        // 找到按钮,加点击事件

        document.getElementById('btn').onclick = function(){

            li3.parentNode.removeChild(li3);

        }

    </script>

04替换子元素

    <!--

        语法:

            父元素.replaceChild( 新元素,被替换的元素 );

        如果新元素是已经存在的元素,那么相当于是移动新元素去替换

    -->

</head>

<body>

    <input type="button" value="创建新的li替换li3" id="btn1">

    <input type="button" value="已经存在的li去替换li3" id="btn2">

    <ul id="ul1">

        <li>隔壁老王1</li>

        <li>隔壁老王2</li>

        <li id="li3">隔壁老王3</li>

        <li>隔壁老王4</li>

        <li id="li5">隔壁老王5</li>

    </ul>

    <script>

        // 找到li3

        var li3 = document.getElementById('li3');

        var li5 = document.getElementById('li5');

        // 找到ul

        var ul1 = document.getElementById('ul1');

        document.getElementById('btn1').onclick = function(){

            var li = document.createElement('li');

            li.innerHTML = "新的li";

            ul1.replaceChild(li,li3);

        }

        document.getElementById('btn2').onclick = function(){

            ul1.replaceChild(li5,li3);

        };

05找第一个子元素和最后一个子元素

<!--

        firstChild:找第一个子节点,节点就包括文本、注释、标签

        firstElementChild:找第一个子元素,只包括标签

        lastChild:找最后一个子节点

        lastElementChild:找最后一个子元素

    -->

</head>

<body>

    <ul id="ul1">

        <li>隔壁老王1</li>

        <li>隔壁老王2</li>

        <li>隔壁老王3</li>

        <li>隔壁老王4</li>

        <li>隔壁老王5</li>

    </ul>

    <script>

        // 我要找到第一个li

        var ul1 = document.getElementById('ul1');

        // console.log(ul1.firstChild); //回车

        // console.log(ul1.firstElementChild);

        // console.log(ul1.lastChild); //回车

        // console.log(ul1.lastElementChild); //隔壁老王5

        // ul1.children[0]

        // 找最后一个

        // ul1.children[ul1.children.length - 1];

        06计时器

<!--

        setInterval:计时器

            作用:可以让一段代码每隔一段时间执行一次

            参数1:要执行的代码,既可以是字符串,也可以是函数

                    如果只有一句话用字符串方便,如果是有多句话,那么传一个函数会更方便

                    传函数也可以传一个已经存在的函数,但是记得函数名不要加小括号,例: setInterval(f1,1000);

            参数2:间隔时间,以毫秒为单位

    -->

    <script>

        //  每隔1000毫秒,去执行console.log(1);  1000毫秒 = 1秒

        //  setInterval('console.log(1);',1000);

        //  setInterval('console.log(1);console.log("abc");',1000);

        // setInterval(function(){

        //    console.log(1);

        //    console.log("abc");


        // },1000);

        // 函数名其实也是一个变量,只不过它里面存的是代码

        function f1(){

            console.log('f1被调用了');


        }

        // console.log(f1);

        // console.log(f1());//undefined


        // 代表每隔1秒调用一次f1

        setInterval(f1,1000);

        // 代表立刻调用f1函数,并把返回值也就是undefined给了计时器

        setInterval(f1(),1000);

07停止计时器

    <!--

        setInterval只要开启,你不写代码停止,它就不会停止,直到网页关闭

        每个计时器一旦开启,就会有它自己的计时器id,它会通过返回值返回

        clearInterval(计时器id)

    -->

</head>

<body>

    <input type="button" value="开启计时器" id="start">

    <input type="button" value="停止计时器" id="stop">


    <script>

        var timerID;

        // 开启计时器

        document.getElementById('start').onclick = function(){

            // 如何保证永远只有一个计时器?

            // 开启新计时器之前,先把旧计时器停止,那么就永远只有一个计时器了

            clearInterval(timerID);

            // 永远只能保存最后一个计时器id

            timerID = setInterval(function(){

                console.log('....');


            },1000);

            console.log(timerID);


        }

        // 停止计时器

        document.getElementById('stop').onclick = function(){

            // 不管点多少次,停的都是最后一个

            clearInterval(timerID);

        }

08  setTimeout

<!--

        setTimeout也是计时器,用法跟setInterval是一毛一样的

        但是它只会执行1次


        它相当于是把一段代码延迟执行

    -->

    <script>

        //  setInterval('console.log("interval")',1000);

        //  setTimeout用法跟setInterval是一样的,但是setTimeout只能执行1次

        //  setTimeout('console.log("timeout")',1000);

        // setTimeout(function(){

        //    console.log('1');

        //    console.log('abc');

        // },1000);

    </script>

</head>

<body>

    <input type="button" value="开启" id="start">

    <input type="button" value="停止" id="stop">

    <script>

        var timerID;

        document.getElementById('start').onclick = function () {

            timerID = setTimeout(function () {

                console.log('1');

                console.log('abc');

            }, 1000);

        };

        document.getElementById('stop').onclick = function(){

            clearTimeout(timerID);

        }

    </script>

</body>

09复习旋转

<style>

        .box{

            width: 5px;

            height: 180px;

            background-color: gold;

            margin: 100px auto;

        }

        /* .box:hover{

            transform: rotate(45deg);

        } */

    </style>

</head>

<body>

    <input type="button" value="旋转" id="btn">

    <div class="box" id="box"></div>

    <script>

        var box = document.getElementById('box');

        // 添加点击事件

        document.getElementById('btn').onclick = function(){

            setInterval(function(){

                box.style.transform += "rotate(15deg)";

            },200);

        }

    </script>

10黑马计时器

<style>

        .clock {

            width: 600px;

            height: 600px;

            background: url(images/clock.jpg);

            margin: 50px auto;

            position: relative;

        }

        .clock>div {

            width: 100%;

            height: 100%;

            position: absolute;

            left: 0;

            top: 0;

            background: url(images/hour.png) no-repeat center;

        }

        #m {

            background: url(images/minute.png) no-repeat center;

        }

        #s {

            background: url(images/second.png) no-repeat center;

        }

    </style>

</head>

<body>

    <div class="clock">

        <div id="h"></div>

        <div id="m"></div>

        <div id="s"></div>

    </div>

    <script>

        // 找到时、分、秒的div

        var h = document.getElementById('h');

        var m = document.getElementById('m');

        var s = document.getElementById('s');

        function setClock() {

            //用Date对象获取当前时间

            var now = new Date();

            //获取时

            var hour = now.getHours();

            //获取分

            var min = now.getMinutes();

            //获取秒

            var sec = now.getSeconds();

            // 旋转时针:表盘360度,一个表盘12小时,所以每小时为 360 / 12 = 30度

            // 算法:现在是几小时,就用几 * 30

            // 如果现在是11:30,30分钟就是0.5小时,所以你应该算11.5 * 30度,但是我们现在只是11*30

            // 所以应该 11*30 + 分/60 * 30

            var hDeg = hour * 30 + min / 60 * 30;

            h.style.transform = 'rotate(' + hDeg + 'deg)';

            // 算法:表盘360度,一个表盘60分,所以每分钟为 360/60 = 6度

            // 算法:现在是几分钟,就用几 * 6

            // 分也要考虑秒带来的影响

            var mDeg = min * 6 + sec / 60 * 6;

            m.style.transform = 'rotate(' + mDeg + 'deg)';

            // 秒的度数跟分的是一样的,算法也一样

            s.style.transform = 'rotate(' + sec * 6 + 'deg)';

        }

        // 页面一打开需要立刻调用获取当前时间

        setClock();

        setInterval(setClock, 1000);

11 offsetwidth和offsetHeight

<!--

        offsetWidth:

            获取的是盒子最终宽

        offsetHeight:

            获取的是盒子最终高

        它们获取到的直接就是数字,可以直接参与数学运算

        只能读取,不能修改(重新赋值),它是只读的

    -->

    <style>

        .box{

            width: 100px;

            height: 100px;

            background-color: #f00;

            padding: 10px;

            border: 10px solid black;

        }

    </style>

</head>

<body>

    <div class="box"></div>

    <script>

        // 找到div

        var box = document.getElementsByClassName('box')[0];

        // 特点:1.获取到的是带单位的字符串  2.只能获取行内样式,其他样式的宽高获取不了

        // console.log(box.style.width);

        // console.log(box.style.height);

        // 特点:1.获取到的是数字可以直接参与数学运算  2.不管是行内还是内嵌都能获取

        console.log(box.offsetWidth);

        console.log(box.offsetHeight);

        // 不能修改

        // box.offsetWidth = 3000;

        // box.offsetHeight = 3000;

15 offsetParent

  offsetParent:获取的是它定位所参照的父级元素

            只要不是固定定位,那么这里获取到的就是它真正定位所参照的父级元素

            如果是固定定位,那么打印的是null

            如果是静态定位(也就是没有改定位),那么打印的是父盒子

    -->

    <style>

        body{

            border-bottom: 1px solid #000;

        }

        .father{

            width: 300px;

            height: 300px;

            background-color: #0f0;

            position: relative;

        }

        .son{

            width: 100px;

            height: 100px;

            background-color: #f00;

            /* position: fixed;

            top:50%; */

        }

    </style>

</head>

<body>

    <div class="father">

        <div class="son"></div>

    </div>

    <script>

        var son = document.getElementsByClassName('son')[0];

        console.log(son.offsetParent);

        16  offsetLeft和offsetTop

<!--

        offsetLeft和offsetTop

            获取到的是自身外边框到他定位所参照的父级元素的内边框的距离

        它们统称为offset家族,都是只能获取不能修改

    -->

    <style>

        .grandFather{

            width: 500px;

            height: 500px;

            background-color: #00f;

            margin-left: 50px;

            position: relative;

            border: 10px solid black;

        }

        .father {

            width: 300px;

            height: 300px;

            background-color: #0f0;

            margin-left: 100px;

            /* position: relative; */

        }

        .son {

            width: 100px;

            height: 100px;

            background-color: #f00;

            position: absolute;

            left: 100px;

            top: 80px;

            margin-left: 20px;

            margin-top: 40px;

            border: 10px solid black;

        }

    </style>

</head>

<body>

    <div class="grandFather">

        <div class="father">

            <div class="son"></div>

        </div>

    </div>

    <script>

        //找到子盒子

        var son = document.getElementsByClassName('son')[0];

        //获取的是数字类型,可以参与数学运算

        console.log(son.offsetLeft, son.offsetTop);

    </script>

17 用js实现简单移动动画

<script>

        //找到div

        var box = document.getElementsByClassName('box')[0];

        //移动到400的点击事件

        document.getElementById('btn1').onclick = function () {

            var timerID = setInterval(function () {

                // 先获取当前位置

                var current = box.offsetLeft;

                // 距离大于10代表够走,那么才走这一步

                if (400 - current > 10) {

                    // 每次点击都在当前位置上加10

                    current += 10;

                    // 再赋值给left

                    box.style.left = current + "px";

                }else{

                    //不够走直接到400

                    box.style.left = 400 + "px";

                }


                if (current == 400) {

                    //停止计时器

                    clearInterval(timerID);

                }

            }, 50);

        }

    </script>

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

推荐阅读更多精彩内容

  • 简述JavaScript起源起源于美国的Netscape公司,原名为LiveScript,后改为JavaScrip...
    3ab670b99521阅读 2,996评论 0 0
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,466评论 1 45
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,063评论 1 10
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,028评论 0 2
  • 第一部分 准入训练 第1章 进入忍者世界 js开发人员通常使用js库来实现通用和可重用的功能。这些库需要简单易用,...
    如201608阅读 1,348评论 1 2