我爱编程

js基础day05

2018-04-08  本文已影响22人  codeTao

js基础day05

一.简单轮播图

 <style>
        *{
            margin: 0;
            padding: 0;
        }
        #box{
            width: 600px;
            height: 200px;
            border: 1px solid #000;
            margin: 100px auto;

            overflow: hidden;
        }
        #oul{
            width: 9999px;
            list-style: none;

            position: relative;
            left: 0;
        }
        #oul li{
            float: left;
        }

    </style>
<div id="box">
    <ul id="oul">
        <li><img src="images/01.jpg" alt=""></li>
        <li><img src="images/02.jpg" alt=""></li>
        <li><img src="images/03.jpg" alt=""></li>
        <li><img src="images/04.jpg" alt=""></li>
        <li><img src="images/01.jpg" alt=""></li>
        <li><img src="images/02.jpg" alt=""></li>
    </ul>
</div>

<script>
    //1.获取元素
    var oul = document.getElementById('oul');

    //2.偏移量
    var offsetX = 0;

    //3.开启定时器
    var timer = setInterval(function () {
        offsetX -= 10;
        //判断4张图片是否走完
        if(offsetX <= -4 * 300){
            //重置偏移量
            offsetX = 0;
        }
        //没有走4张,继续走
        oul.style.left = offsetX + 'px';
    }, 30);

</script>

二.复杂轮播图

1.页面

<style>
        *{
            margin: 0;
            padding: 0;
        }
        #box{
            width: 640px;
            height: 270px;
            border: 1px solid #000;
            margin: 100px auto;

            position: relative;
            /*overflow: hidden;*/

        }
        #box ul{
            width: 9999px;
            list-style: none;
            position: absolute;
        }
        #box ul li{
            float: left;
        }

        #box span{
            width: 40px;
            height: 40px;
            text-align: center;
            line-height: 40px;

            position: absolute;
            top: 50%;
            margin-top:-20px;

            background-color: red;
        }

        #box span:nth-of-type(1){
            left: 0;
        }
        #box span:nth-of-type(2){
            right: 0;
        }

    </style>
<body>

<div id="box">
    <ul>
        <li><img src="images/01.jpg" alt=""></li>
        <li><img src="images/02.jpg" alt=""></li>
        <li><img src="images/03.jpg" alt=""></li>
        <li><img src="images/04.jpg" alt=""></li>
        <li><img src="images/05.jpg" alt=""></li>
        <li><img src="images/01.jpg" alt=""></li>
    </ul>
    <span>&lt;</span>
    <span>&gt;</span>
</div>
</body>

2.右边

//1.获取元素
    //ul
    var oul = document.getElementById('oul');
    //span
    var spanList = document.getElementById('box').getElementsByTagName('span');

    //定时器
    var timer = 0;
    //偏移量
    var offsetX = 0;
    //图片索引
    var index = 0;

    //2.添加点击事件
    //点击左边按钮,图片往右走
    spanList[0].onclick = function () {

    }

    //点击右边按钮,图片往左走
    spanList[1].onclick = function () {
        //alert(111);
        //清空上一次定时器
        clearInterval(timer);

        //每点击一次,索引加1,并记录
        index++;
        //每次点击,判断是否走完第6张
        //第6次点击,要第一张往第二张走
        //下次点击, 图片从第6张往第2张周, index = 1;
        if(index > 5){
            //还原index
            index = 1; //第7次点击,index应该从1开始累加,往第2张走
            //偏移还原为0, 下次点击,第2张走的起始位置
            offsetX = 0;
        }

        //开启定时器,走一张图片
        timer = setInterval(function () {
            //往左走
            offsetX -= 10;
            //判断是否走了一张图片
            if (offsetX <= -640 * index){
                //重置偏移量
                offsetX = -640 *index;
                //清除定时器
                clearInterval(timer);
            }

            //移动ul
            oul.style.left = offsetX + 'px';

        }, 10);

    }

3.左边

//点击左边按钮,图片往右走
    spanList[0].onclick = function () {

        //清空上一次定时器
        clearInterval(timer);

        //每点击一次,索引减1,并记录
        index--;

        //判断是否走到第1张,如果是立刻切换为第6张 index = -1
        if(index < 0 ){ //
            //偏移还原为第6张,下次点击往第5张走,第6张起始位置
            offsetX = -640 * 5;

            //4 为第5张图片, index * -640 为第五张的终点位置
            index = 4;
        }

        //开启定时器,走一张图片
        timer = setInterval(function () {
            //往右走,累加
            offsetX += 10;
            //判断是否走了一张图片
            //
            if (offsetX >= -640 *index){ // -640 * 5 >= -640 * 4
                //重置偏移量
                offsetX = -640 * index;
                //清除定时器
                clearInterval(timer);
            }

            //移动ul
            oul.style.left = offsetX + 'px';

        }, 10);
    }

4.bug

var flag = false;

//判断动画是否正在执行
if(flag == false){
    //没有执行动画,更改动画状态,记录动画状态
    flag = true;
}else{ //正在执行动画, 不允许点击
    return
}

三.发送验证码

  btn.disabled = true;

四.动态跳转

  1. 循环定时器,显示5秒后, 动态跳转
   var timer = 0;
    var count = 5;

    //开启循环定时器
    //执行5次, 5秒结束定时
    timer = setInterval(function () {
        count--;
        //判断是否走完5秒
        if(count <= 0){
            //动态跳转
            window.location.href = 'http://www.baidu.com';

            //清空定时器
            clearInterval(timer);
        }
        //更新h2文本内容
        oh2.innerText = count + '秒后跳转';
    }, 1000);

2 .递归:自己调自己(了解)

var a = 0;
    function test() {
        a++;
        console.log(a);

        //限制条件
        if(a > 5){
            return;
        }
        //递归调用
        test();
    }

    test();
//3.延时定时器
    var count = 5;
    var timer = 0;

    function fn() {
        count--;
        //判断count 有没有走完5秒
        if(count <= 0){
            //结束定时器
            clearTimeout(timer);

            //动态跳转
            window.location.href = 'https://www.baidu.com';
        }else{
            //递归调用
//            timer = setTimeout(fn, 1000);
//            arguments.length 获取函数实参个数
//            arguments.callee 指向当前执行的函数。
            timer = setTimeout(arguments.callee, 1000);
        }
        oh2.innerText = count + '秒后跳转';
    }

    //开启延时定时器
    timer = setTimeout(fn, 1000);

五.Dom 节点

1.Dom节点

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

2.节点树

HTML DOM 将 HTML 文档视作树结构。这种结构被称为节点树.

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

5.1.gif

3.节点操作

<div id="box">
    <h2 id="oh2">我是标题</h2>
</div>

1.创建节点

var newDiv = document.createElement('div');
console.log(newDiv);

2.添加节点

//获取body
var obody = document.getElementById('obody');
var ele = obody.appendChild(newDiv);

//设置属性
ele.style.width = '100px';
ele.style.height = '100px';
ele.style.backgroundColor = 'red';
console.log(newDiv);

3.删除节点

//获取元素
var box = document.getElementById('box');
var oh2 = document.getElementById('oh2');

//删除h2
//var ele2 = box.removeChild(oh2);

//注意:谁调用removeChild(), 就删除谁里面的子节点
var ele2 = obody.removeChild(oh2);

//注意:只能由父元素调用removeChild(), 不能自己删自己
//var ele2 = oh2.removeChild(oh2);
console.log(ele2);

4.替换子节点

//获取box
var box = document.getElementById('box');
//获取h2
var oh2 = document.getElementById('oh2');

//创建一个p标签
var op = document.createElement('p');
op.innerText = '段落pp';

//用p 替换h2
var ele2 = box.replaceChild(op, oh2);

//注意:replaceChild() 只能由父节点调用,否则不起作用
//var ele2 = obody.replaceChild(op, oh2);
console.log(ele2);

5.insertBefore(newChild, refChild);

    //获取box
    var box = document.getElementById('box');
    //获取h2
    var oh2 = document.getElementById('oh2');

    //创建button
    var btn = document.createElement('button');
    btn.innerText = '按钮';

    //h2前插入button
    var ele5 = box.insertBefore(btn, oh2);

6.克隆节点,复制节点
cloneNode(deep)

//    var copyBox = box.cloneNode(true);
var copyBox = box.cloneNode(false);
console.log(copyBox);

4.获取子节点

节点树中的节点彼此拥有层级关系。

下面的图片展示了节点树的一部分,以及节点之间的关系:

5.4.gif
<div id="box">
    盒子文本内容
    <p id="op">我是段落</p>
    <button id="btn">点我吧</button>
    <!--注释-->
</div>
    //1.获取父节点
    var box = document.getElementById('box');
    //2.获取子节点
    var list = box.childNodes;
    console.log(box.childNodes);

    //3.创建空数组, 保存所有元素节点
    var arr = [];
    //4.遍历数组
    for(var i = 0; i < list.length; i++ ){
        //取出每一个节点
        var ele = list[i];
        //判断每一个节点nodeType值
        if(ele.nodeType == 1){
            //当前节点是元素节点,添加到数组中
            arr.push(ele);
        }
    }
    console.log(arr);
    //--------------------------------
    // children 属性获取当前节点的所有的子元素
    console.log(box.children);

5.获取兄第节点

<div id="box">
    盒子文本
    <button id="btn1">我是按钮1</button>
    <!--注释-->
    <button >我是按钮2</button>
    <button >我是按钮3</button>
</div>
<script>
    //1.获取第一个按钮
    var btn1 = document.getElementById('btn1');

    //2.nextElementSibling 获取当前节点下一个兄弟元素节点
    /*
    var btn2 = btn1.nextElementSibling;
    console.log(btn2);

    //获取第三个按钮
    var btn3 = btn1.nextElementSibling.nextElementSibling;
    console.log(btn3);*/

    //3.nextSibling 获取当前节点的下一个兄弟节点, 兄弟节点包括文本节点和注释节点
   /* var ele2 = btn1.nextSibling;
    console.log(ele2);

    var ele3 = btn1.nextSibling.nextSibling;
    console.log(ele3);*/

    //4.previousElementSibling 获取当前节点上一个兄弟元素节点
    var btn2 = document.getElementById('btn2');
    /*
    var ele2 = btn2.previousElementSibling;
    console.log(ele2);*/

    //5.previousSibling 获取当前节点的上一个兄弟节点, 兄弟节点包括文本节点和注释节点
    var ele2 = btn2.previousSibling;
    console.log(ele2);

    var ele3 = btn2.previousSibling.previousSibling;
    console.log(ele3);
</script>

6.获取父节点

<div id="father">
    <!--注释-->
    <button id="son">点我吧</button>
    <h2>我是h2</h2>
</div>
<script>
    //1.获取按钮
    var btn = document.getElementById('son');

    //2.parentNode 获取父节点
    var ele = btn.parentNode;
    //console.log(ele);

    //3.设置父节点
    ele.style.width = '200px';
    ele.style.height = '200px';
    ele.style.backgroundColor = 'blue';

    //4.firstChild 获取第一个子节点,包含文本节点和注释节点
    console.log(ele.firstChild);

    //firstElementChild 获取第一个子元素节点
    console.log(ele.firstElementChild);

    //5.lastChild 获取最后一个子节点,包含文本节点和注释节点
    console.log(ele.lastChild);

    //lastElementChild 获取最后一个子元素节点
    console.log(ele.lastElementChild);
</script>

六.类名获取元素

getElementsByClassName()

获取所有子节点方法比较

兼容性处理

/**
 * 获取父元素 obj中所有类名为 className的元素
 * @param obj 父元素
 * @param eleclass  类名
 * @returns 返回保存同类名的数组
 */
function getEleByClass(eleclass) {
        //保存同类名元素数组
        var arr = [];
        if(obj.getElementsByClassName){
            alert('浏览器支持此方法');
            //为真,说明浏览器是支持的
            return obj.getElementsByClassName(eleclass);
        }else{
            alert('浏览器不支持此方法, 可能为ie5,6,7,8');
            //1.获取box中所有子元素, 通配符 * 获取所有子节点,包括所有子节点的结构
            //简单说,能获取p
            var btnArr = obj.getElementsByTagName('*');

            //var btnArr = box.children; //获取的只是当前节点的所有子节点,不包括所有子节点的结构
            //简单说,不能获取p
            //2.遍历数组,取出每个子节点,判断class是不是btn
            for(var i = 0; i < btnArr.length; i++ ){
                //3.取出子节点
                var ele = btnArr[i];
                //4.判断当前子节点类名是不是btn
                if(ele.className == eleclass){
                    //5.保存子元素
                    arr.push(ele);
                }
            }
            return arr;
        }
    }

七.获取文档元素

1.document.body 获取文档中body元素

2.document.title 获取文档title元素

document.title = 'sk666';

3.document.head 获取文档head元素

4.document.documentElement 获取文档中 html元素

5.document.write() 可向文档写入 HTML 表达式或 JavaScript 代码

document.write('skv587666');
document.write('<h1>sk666</h1><p>我是段落</p>')

八.九宫格算法

1.算法分析

盒子宽高 100px
盒子间距 10px
总列数 3
行号 = parseInt(i / 3)
列号 = i % 3

盒子x = 列号 * (盒子宽度 + 间距);
盒子y = 行号 * (盒子高度 + 间距);
8.png

2.实现

//1.获取按钮
    var btn1 = document.getElementById('btn1');
    var btn2 = document.getElementById('btn2');

    //2.获取box所有按钮
    var box = document.getElementById('box');
    //var btnList = box.getElementsByTagName('button');
    var btnList = box.children;
    console.log(btnList);

    //3.添加点击事件
    //每行3列
    btn1.onclick = function () {
        //总列数
        var count = 3;
        //行号
        var row = 0;
        //列号
        var col = 0;

        //九宫格排布
        for(var i = 0; i < btnList.length; i++ ){
            //1.计算行号,列号
            row = parseInt(i / count);
            col = i % count;

            //2.计算按钮x和y
            // x = 列号 * (宽度 + 间距)
            var x = col * (100 + 10);

            // y = 行号 * (高度 + 间距)
            var y = row * (100 + 10);

            //3.获取每个按钮
            var btn = btnList[i];
            //设置盒子内容
            btn.innerText = row + '行,'+ col +'列';

            //4.设置按钮x和y
            btn.style.left = x + 'px';
            btn.style.top = y + 'px';

            //5.设置按钮定位
            btn.style.position = 'absolute';
        }
    }

    //每行4列
    btn2.onclick = function () {
        //总列数
        var count = 4;
        //行号
        var row = 0;
        //列号
        var col = 0;

        //九宫格排布
        for(var i = 0; i < btnList.length; i++ ){
            //1.计算行号,列号
            row = parseInt(i / count);
            col = i % count;

            //2.计算按钮x和y
            // x = 列号 * (宽度 + 间距)
            var x = col * (100 + 10);

            // y = 行号 * (高度 + 间距)
            var y = row * (100 + 10);

            //3.获取每个按钮
            var btn = btnList[i];
            //设置盒子内容
            btn.innerText = row + '行,'+ col +'列';

            //4.设置按钮x和y
            btn.style.left = x + 'px';
            btn.style.top = y + 'px';

            //5.设置按钮定位
            btn.style.position = 'absolute';
        }
    }
上一篇下一篇

猜你喜欢

热点阅读