JavaScript-定时器

165 阅读4分钟

定时器

JS的程序的执行速度时非常快的,如果希望一段程序,可以每间隔一段时间执行一次,可以使用定时调用

setInterval()

  • 定时调用
  • 可以将一个函数,每隔一段事件执行一次
  • 参数:
    • 1.回调函数,该哈数会每隔一段事件被调用一次
    • 2.每次调用间隔的时间,单位是毫秒
  • 返回值:
    • 返回一个Number类型的数据,这个数字用来作为定时器的唯一标识

clearInterval()

  • 可以用来关闭一个定时器
  • 方法中需要一个定时器的标识作为参数,这样将关闭标识对应的定时器.
  • clearInterval()可以接受任意参数
  • 如果参数时一个有效的定时器的标识,则停止对应的定时器
  • 如果参数不是一个有效的标识,则什么也不做

定时器练习

其中判断索引是否超过最大索引来设置从头播放

高级写法:

分析:

当index为0时 0%5=0

当index为1时 1%5=1

当index为2时 2%5=2

当index为3时 3%5=3

当index为4时 4%5=4

当index为5时 5%5=0

完成循环

问题

目前,我们每点击一次按钮,就会开启一个定时器,点击多次就会开启多个定时器,这就导致图片的切换速度过快,并且我们只能关闭最后一次开启的定时器

解决

在开启定时器之前,需要将上一个定时器关闭

放在点击开启按钮绑定单击函数的最前头 保证只有一个定时器在使用

测试发现

在点击开始的时候不会切到第一张重新开始播放

在连续点击开始的时候会一直停留在当前图片,因为一直在开启关闭定时器,未到换图片的时间,所以不会切换

延时调用

setTieout()

  • 延时调用一个函数不马上执行,而是隔一段时间以后在执行,而且只会执行一次
  • 延时调用和定时调用的区别,定时调用会执行多次,而延时调用只会执行一次
  • 延时调用和定时调用实际上是可以互相代替的,在开发中可以根据自己的需要去选择

clearTimeout()

  • 使用clearTimeout()来关闭一个延时调用

定时器的应用一

调用参数时,需要就调用,不需要不写函数时,如何写

callback && callcack();

解释: 进行判断 两个都为true才执行本条指令

也就是函数存在才调用函数

实现无缝轮播

在最后一张图片后插入第一张 并且判断索引是否是最后一张 如果是将偏移量切换到第一张,实现无缝轮播

类的操作

修改box样式

  • 通过style属性来修改元素的样式,每修改一个样式,浏览器就需要重新渲染一次页面,这样执行的性能是比较差的,而且这种形式当我们要修改多个样式时,也不太方便.

  • 希望一行代码可以同时修改多个样式

  • 可以通过修改元素的clsaa属性来间接的修改样式

  • 这样一来,我们只需要修改一次,即可同时修改多个样式

  • 此时浏览器只需要重新渲染页面一次,性能比较好

  • 并且这种方式,可以使表现和行为进一步的分离

修改box样式,在不去掉原属性上添加或更替新的属性

  • 注意在新加属性的前面要留出空格,否则浏览器会将b1和b2属性名连在一起,不会识别

定义一个函数,用来向一个元素中添加指定的class属性值

  • 参数:
    • obj 要添加的class属性的元素
    • cn 要添加的class值

判断一个元素中是否含有指定的class属性值

  • 如果有该class,则返回true,没有则返回false

删除一个元素中的指定的class属性

切换一个类

  • toggleClass可以用来切换一个类
  • 如果元素中具有该类,则删除
  • 如果元素中没有该类,则添加

二级菜单

  • 当一个div有class="collapsed"属性时,就是叠起来的效果

  • 这个属性在

  • 把高度设置为25

  • 我们的每一个菜单都是一个div

  • 当div具有collapsed这个类时,div就是折叠的状态

  • 当div没有这个类是,div就是展开的状态

获取所有的class为menuSpan的元素

  • 这里使用querySelectorAll而不是getElementById是为了兼容IE8
  • 括号里有点 .menuSpan 因为调用css文件里的 所以必须有点

  • 内联样式优先级高于样式表中样式
  • 紫色框高于红色框