js学习笔记----Day05轮播图和节点概念

轮播图

  • 开关的作用, 使其不能连续点击. 造成offsetX累加使速度变快.

  • 原理: 若动画木有放完, 其进行下次点击时控制让其return.

发送验证码

  • 备份指针

var that = this;

动态跳转


window.location.href = 'https://www.baidu.com/';

  • 方法一: 循环定时器

  • 方法二: 延时定时器(使用了递归, 通俗来说就是寄几调用寄几):


//setTimeout() 中再调用setTimeout()
function fn() {
    count--;
    oh2.innerHTML = count +  '秒后跳转';

    //递归限制条件
    if(count <= 0){
        //动态跳转
        window.location.href = 'https://www.baidu.com/';
        //return
    }else{
        //递归
        //setTimeout(fn , 1000);
        //console.log(arguments.callee);
        setTimeout(arguments.callee, 1000);
    }
}

timer = setTimeout(fn, 1000);

  • arguments.callee 获取当前的函数名(对象方法)

注意递归的用法: 一定要设置限制条件, 否则会造成死循环

bug问题:
  • 解决方案:

1. onclick方法里先清除上一个定时器

2. 开关思想: 进入时判断若正在执行动画让其return. 动画结束时使其关闭

innerHTML 用于修改元素的结构

innerText 用于修改内容.

节点概念

节点概念-树状图.gif
  • 子节点: 包含所有的元素节点, 属性节点, 文本节点, 注释节点, nodeType分别是1,2,3,8

  • 子元素: 元素节点.

节点操作

节点操作.gif
js操作DOM一览表.png

1. 创建节点


var h1 = document.createElement('h1'); h1.innerHTML = '我是标题';

2. 添加子节点 .appendChild();

3. 删掉子节点 .removeChild();

注意:

  • 删除时, 只能由父节点删除, 爷爷节点之类的都不可行

  • 若节点找不到, 则返回null

4. 替换子节点 .replaceChild();

5. 插入子节点 .insertBefore(op, h2); //在h2前方插入op

  • 若.insertBefore(op, null); 则插入于末尾, 效果同appendChild();

6. 复制节点 .cloneNode();

获取孩子节点

1. 获取元素的所有节点(包含所有的元素节点, 属性节点, 文本节点, 注释节点, nodeType分别是1,2,3,8):

  • childNodes();

2. 获取元素的所有子元素(指的是元素节点)

  • childrens();
获取兄弟节点

1. 获取当前节点的下一个兄弟元素:

  • nextElementSibling();

2. 获取当前节点的下一个兄弟节点:

  • nextSibling();

3. 获取当前节点的上一个兄弟元素:

  • previousElementSibling();

4. 获取当前节点的上一个兄弟节点:

  • previousSibling();

兼容问题:

nextElementSibling 在IE9以上用这个

nextSibling IE9一下用这个

  • 兼容写法

var next3 = btn.nextElementSibling || btn.nextSibling;

获取父节点
  • parentNode();
    //获取第一个子元素
    console.log(ele.firstElementChild);
   // 或者用
    console.log(ele.firstChild.nextSibling);

    //获取最后一个子节点
    console.log(ele.lastElementChild);    
   //或者用
    console.log(ele.lastChild.previousSibling);
  • firstChild();

  • firstElementChild();

  • lastChild();

  • lastElementChild();

通过类名获取标签的封装

  • getElementsByClassName(); 只支持IE9以上

  • 兼容写法:

    function getEleClassName(dom,className) {
        if (dom.getElementsByClassName){
            // 此方法可以识别   
            return dom.getElementsByClassName(className);
        }else {
            // 方法不能识别 *通配符选择器,可以获取dom下面的所有标签     
            var eles = dom.getElementsByTagName('*');
            // 存放标签    
            var tempArr = [];
            for(var i = 0; i<eles.length; i++){
                if (eles[i].className == className){
                    tempArr.push(eles[i]);            }
            }
            return tempArr;
        }
    }

获取文档元素

  1. 获取文档标题title

2. head

3. body

//用的较多, 不用设置id即可拿到body
document.body

4. html

document.documentElement

5. 往文档中写内容

document.write(); 

九宫格排列

九宫格排列原理.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 函数封装,就一句话:相同的,重复,封起来;不同的,要改的,传进去 DOM(文档对象模型) 我们的JS分为三个部分组...
    AnnQi阅读 273评论 0 0
  • js基础day05 一.简单轮播图 二.复杂轮播图 1.页面 2.右边 3.左边 4.bug bug原因: 每点击...
    codeTao阅读 199评论 0 1
  • 个人博客:https://yeaseonzhang.github.io 花了半个多月的时间,终于又把“JS红宝书”...
    Yeaseon阅读 11,741评论 9 52
  • 原文 链接 关注公众号获取更多资讯 一、基本类型介绍 1.1 Node类型 DOM1级定义了一个Node接口,该接...
    前端进阶之旅阅读 4,063评论 7 34
  • 文/不妥协的纽扣 下雨的午后 邮差没来 思念就这般 荒废在长长的等待里 潮湿的地板上 倒映出季节最后的哀伤 我把心...
    疯狂稻草人阅读 213评论 2 5

友情链接更多精彩内容