一:什么是定时器

(一)无限循环定时器

<script>
window.onload = function(){
function test(){
alert("test")
}
// 无限循环的执行函数test,间隔时间为2秒
setInterval(test,2000);
}
</script>

(二)不循环执行定时器

<script>
window.onload = function(){
function test(){
alert("test")
}
// 2秒后,执行test函数,只执行一次
setTimeout(test,2000);
}
</script>

(三)开关定时器

<!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>定时器</title> <script>
window.onload = function(){
var oBtn1 = document.getElementById("btn1");
var oBtn2 = document.getElementById("btn2");
// 控制匿名函数
var timer = null;
oBtn1.onclick = function(){ timer = setInterval(function(){
alert("haha");
},3000)
}
oBtn2.onclick = function(){
clearInterval(timer);
}
}
</script> </head>
<body>
<input type="button" id="btn1" value="开启">
<input type="button" id="btn2" value="关闭">
</body>
</html>

数码时钟

# 自己思路的代码
<!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>数字时钟</title>
<style>
body{
font-size: 150px;
background:gray;
}
img{
width: 100px;
height: 100px;
}
</style>
<script>
window.onload = function(){
var oData = new Date();
var h = oData.getHours().toString();
var m = oData.getMinutes().toString();
var s = oData.getSeconds().toString();
var oImg = document.getElementsByTagName("img")
function set(){
oImg[0].src = "pic/数字" + h[0] + ".png"
oImg[1].src = "pic/数字" + h[1] + ".png"
if(h.length==1){
oImg[0].src = "pic/数字0" + ".png"
oImg[1].src = "pic/数字" + h[0] + ".png"
}else{
}
oImg[0].src = "pic/数字" + h[0] + ".png"
oImg[1].src = "pic/数字" + h[1] + ".png"
if(m.length==1){
oImg[2].src = "pic/数字0" + ".png"
oImg[3].src = "pic/数字" + m[0] + ".png"
}else{
 
oImg[2].src = "pic/数字" + m[0] + ".png"
oImg[3].src = "pic/数字" + m[1] + ".png"
}
 
if(s.length==1){
oImg[4].src = "pic/数字0"+".png"
oImg[5].src = "pic/数字" + s[0]+".png"
}else{
oImg[4].src = "pic/数字" + s[0] + ".png"
oImg[5].src = "pic/数字" + s[1] + ".png"
}
}
set();
}
setInterval(window.onload,1000);
</script>
</head>
<body>
<img src="" alt="">
<img src="" alt="">
:
<img src="" alt="">
<img src="" alt="">
:
<img src="" alt="">
<img src="" alt="">
</body>
</html>

网上的做法

<!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>数字时钟</title>
<style>
body{
font-size: 150px;
background:gray;
}
img{
width: 100px;
height: 100px;
}
</style> <script> function toDoule(n){
if(n<10){
return "0" + n # 字符串和数字相加,会先将数字变成字符串,然后进行拼接
}else{
return "" + n
}
}
window.onload = function(){
var oImg = document.getElementsByTagName("img");
function clock (){
var oData = new Date();
var toStr = toDoule(oData.getHours()) + toDoule(oData.getMinutes()) + toDoule(oData.getSeconds());
for(var i=0; i<oImg.length;i++){
oImg[i].src = "pic/数字" + toStr[i] + ".png"
}
}
setInterval(clock,1000);
// 这里调用,是为了一秒钟的延迟
clock();
}
</script> </head>
<body>
<img src="" alt="">
<img src="" alt="">
:
<img src="" alt="">
<img src="" alt="">
:
<img src="" alt="">
<img src="" alt=""> </body>
</html>

潜在问题:ie7不支持  str[0] 这种写法取字符串的元素,因此要改成 str.chaAt(0) 解决兼容性问题

其他关于 Data的知识点

<script>

        var oData = new Date();
// 获取几号
alert(oData.getDate());
// 0代表周日,国外从周日开始算
alert(oData.getDay());
// 获取年份s
alert(oData.getFullYear());
// 月份从0开始
alert(oData.getMonth()+1);
</script>

延时消失的提示框案例

自己思路

<!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>延时提示框</title> <style>
#div1{
width: 200px;
height: 200px;
background-color: red;
}
#div2{
width: 200px;
height: 200px;
background-color:greenyellow;
display: none;
}
</style>
<script>
window.onload = function(){
var oDiv1 = document.getElementById("div1")
var oDiv2 = document.getElementById("div2")
function tools(){
oDiv2.style.display = "none";
}
oDiv1.onmouseover = function(){
oDiv2.style.display = "block";
}
oDiv1.onmouseout = function(){
setTimeout(tools,2000);
}
}
</script> </head>
<body>
<div id="div1"></div>
<div id="div2"></div>
</body>
</html>

网上做法:

<!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>延时提示框</title> <style> #div1{
width: 200px;
height: 200px;
background-color: red;
}
#div2{
width: 200px;
height: 200px;
background-color:greenyellow;
display: none;
}
</style>
<script>
window.onload = function(){
var oDiv1 = document.getElementById("div1")
var oDiv2 = document.getElementById("div2")
// 用来存储定时器
var timer = null;
function tools(){
oDiv2.style.display = "none";
};
oDiv1.onmouseover = function(){
clearTimeout(timer);
oDiv2.style.display = "block";
};
oDiv1.onmouseout = function(){
// 如果要清除定时器,这里最好有一个变量接收定时器对象
timer = setTimeout(tools,2000);
};
oDiv2.onmouseover = function(){
// clearTimeout(tools)
// 这里要清除的是定时器的对象,而不是函数
clearTimeout(timer);
};
oDiv2.onmouseout = function(){
timer = setTimeout(tools,500);
}
} </script> </head>
<body>
<div id="div1"></div>
<div id="div2"></div>
</body>
</html>

无缝滚动案例

原理:修改left的值

<!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>无缝滚动</title> <style>
#div1{
width: 200px;
height: 200px;
background-color: red;
position: absolute;
left: 0;
top: 20px;
}
</style>
<script> window.onload = function(){
var oDiv = document.getElementById("div1");
setInterval(function(){
// offsetLeft不仅仅不考虑left,还考虑margin
oDiv.style.left = oDiv.offsetLeft + 10 + "px";
},200)
}
</script> </head>
<body>
<div id="div1"></div>
</body>
</html>

缺点是:会一直往右移动,不会再回来

一个方向循环滚动,鼠标悬停暂停滚动,移出继续滚动

缺点:只能往一个方向滚动

<!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>div中图片问题</title> <style>
#div1 {
border: 1px solid red;
width: 1400px;
height: 200px;
position: relative;
left: 50px;
     overflow:hidden; # 超出部分隐藏
}
#div1 li{
float: left;
list-style: none;
width: 200px;
height: 200px;
}
#div1 ul{
margin: 0;
height: 200px;
padding: 0;
position: absolute;
left: 0;
top: 0;
}
</style> <script>
window.onload = function(){
var oDiv = document.getElementById("div1");
var oUl = document.getElementById("ul1");
var aLi = oUl.getElementsByTagName("li");
var timer = null;
// 这里很亮点,直接拼接两份
oUl.innerHTML = oUl.innerHTML + oUl.innerHTML
oUl.style.width = aLi[0].offsetWidth * aLi.length + "px" timer = setInterval(function(){
oUl.style.left = oUl.offsetLeft -2 + "px";
if(oUl.offsetLeft < -oUl.offsetWidth/2){
oUl.style.left = 0 + "px";
}
},30)
// 鼠标悬停上去,停止滚动
oDiv.onmousemove = function(){ clearInterval(timer); }
// 鼠标移开,又开始滑动
oDiv.onmouseout = function(){ timer = setInterval(function(){
oUl.style.left = oUl.offsetLeft -2 + "px";
if(oUl.offsetLeft < -oUl.offsetWidth/2){
oUl.style.left = 0 + "px";
}
},30)
}
} </script> </head>
<body>
<div id="div1">
<ul id="ul1">
<li><img src="pic/美女1.jpg" alt=""></li>
<li><img src="pic/美女2.jpg" alt=""></li>
<li><img src="pic/美女3.jpg" alt=""></li>
<li><img src="pic/美女4.jpg" alt=""></li>
<li><img src="pic/美女5.jpg" alt=""></li>
<li><img src="pic/美女6.jpg" alt=""></li>
<li><img src="pic/美女7.jpg" alt=""></li>
</ul>
</div>
<a href="#">左</a>
<a href="#">右</a>
</body>
</html>

无缝滚动,增加向左,向右按钮

<!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>div中图片问题</title> <style>
#div1 {
border: 1px solid red;
width: 1400px;
height: 200px;
position: relative;
left: 50px;
/* 超出的隐藏 */
overflow: hidden;
}
#div1 li{
float: left;
list-style: none;
width: 200px;
height: 200px;
}
#div1 ul{
margin: 0;
height: 200px;
padding: 0;
position: absolute;
left: 0;
top: 0;
}
</style> <script>
window.onload = function(){
var oDiv = document.getElementById("div1");
var oUl = document.getElementById("ul1");
var aLi = oUl.getElementsByTagName("li");
var timer = null;
var speed = 3;
// 这里很亮点,直接拼接两份
oUl.innerHTML = oUl.innerHTML + oUl.innerHTML
oUl.style.width = aLi[0].offsetWidth * aLi.length + "px" var oArr = document.getElementsByTagName("a") timer = setInterval(function(){
oUl.style.left = oUl.offsetLeft + speed + "px";
if(oUl.offsetLeft < -oUl.offsetWidth/2){
oUl.style.left = 0 + "px";
}
if(oUl.offsetLeft > 0){
oUl.style.left = -oUl.offsetWidth/2 + "px"; }
},30)
// 鼠标悬停上去,停止滚动
oDiv.onmousemove = function(){
clearInterval(timer);
}
// 鼠标移开,又开始滑动
oDiv.onmouseout = function(){ timer = setInterval(function(){
oUl.style.left = oUl.offsetLeft + speed + "px";
if(oUl.offsetLeft < -oUl.offsetWidth/2){
oUl.style.left = 0 + "px";
}
if(oUl.offsetLeft > 0){
oUl.style.left = -oUl.offsetWidth/2 + "px";
}
},30)
} oArr[0].onclick = function(){
speed = -3
}
oArr[1].onclick = function(){
speed = 3
} } </script> </head>
<body>
<div id="div1">
<ul id="ul1">
<li><img src="pic/美女1.jpg" alt=""></li>
<li><img src="pic/美女2.jpg" alt=""></li>
<li><img src="pic/美女3.jpg" alt=""></li>
<li><img src="pic/美女4.jpg" alt=""></li>
<li><img src="pic/美女5.jpg" alt=""></li>
<li><img src="pic/美女6.jpg" alt=""></li>
<li><img src="pic/美女7.jpg" alt=""></li>
</ul>
</div>
<a href="#">左</a>
<a href="#">右</a>
</body>
</html>

# TODO

javascript之定时器的使用的更多相关文章

  1. JavaScript中定时器的暂停和继续

    对于JavaScript的定时器来说没有严格意义上的暂停和重启,只有清除停止,但是可以通过一些‘障眼法’实现 allChild[index].onclick = function(){//当点击目标且 ...

  2. day27—JavaScript实现定时器及其应用案例

    转行学开发,代码100天——2018-04-12 JavaScript中定时器有两种,分别是setInterval和setTimeout;其用法如下: 开启: setTimeout("fun ...

  3. Javascript中定时器的使用方法

    Javascript中定时器的使用方法 1.间隔定时器(每隔一段时间执行一次代码) 格式:setInterval(函数,时间) //时间单位是毫秒,每隔设置的时间执行函数里的内容一遍(一直执行) // ...

  4. JavaScript中定时器

    JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.它们向任务队列添加定时任务. setTimeout() ...

  5. 理解JavaScript的定时器与回调机制

    定时器方法 JavaScript是单线程的.虽然HTML5已经开始支持异步js了. JavaScript的setTimeout与setInterval看起来就像已经是多线程的了.但实际上setTime ...

  6. JavaScript基础 -- 定时器

     js 定时器有以下两个方法: setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式.方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭. set ...

  7. JavaScript的定时器是如何工作的

    理解JavaScript定时器工作原理对于学习JavaScript非常重要.因为JavaScript是单线程运行的,定时器使用场合少,不是很直观.下面通过三个函数来学习JavaScript如何定义,操 ...

  8. JavaScript 之 定时器

    JavaScript 里面有两个定时器:setTimeout() 和 setInterval() . 区别: setTimeout():相当于一个定时炸弹,隔一段时间执行,并且只会执行一次就不在执行了 ...

  9. JavaScript clearInterval定时器失效原因

    检查下是不是setInterval重复执行(两次以上<!-- 文件上传板块 --> <div id="adUploadWindow" class="ea ...

  10. 【javascript】定时器组件

    'use strict'; module.exports = function() { this.timer = {}; this.config = {}; // 初始化参数 this.init = ...

随机推荐

  1. apache禁止默认虚拟主机

    禁止默认虚拟主机:作用使除特定域名外,其它的域名/ip无法访问此站点. 在虚拟主机配置文件中 即:/usr/local/apache2/conf/extra/httpd-vhosts.conf 将其中 ...

  2. 源码安装zabbix4.0.1

    本篇是纯粹安装zabbix4.0.1, 前提需要安装lnmp请安装 https://www.cnblogs.com/effortsing/p/9982028.html 环境准备: 一台虚拟机 192. ...

  3. 自己实现一个list比较器 实现Comparator()接口

    一:一个实体类 成员变量有名字,年龄,分数 )))))); List<User> list = new ArrayList<>(); list.add(user1); list ...

  4. Smartform给文本绑定值

    点击字段显示器, 然后把字段拖过去即可

  5. string中getline,cin的方法getline(),get总结

    一.string中的getline不是string的成员函数,属于全局函数,使用需要include<string>,有两个重载版本: 函数原型参见:http://www.cplusplus ...

  6. LeetCode.1033-移动石头直到连续(Moving Stones Until Consecutive)

    这是小川的第386次更新,第414篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第247题(顺位题号是1033).在a,b和c位置的数字线上有三块石头.每次,你在一个终点 ...

  7. squid的三种模式

    一.squid代理服务器概述: 概述:Squid Cache(简称为Squid)是http代理服务器软件.Squid用途广泛,可以作为缓存服务器也可以作为缓存代理服务器,代理用户向web服务器请求数据 ...

  8. c++ release和debug语句分离

    #ifdef _DEBUG a=1; #else a=2; #endif

  9. springboot基于方法级别注解事务的多数据源切换问题

    springBoot多数据源配置 配置读数据源 @Component @ConfigurationProperties(prefix = "jdbc.read") @Propert ...

  10. 微信小程序与内嵌webview之间来回跳转的几点总结,以及二维码的使用

    截止到发稿小程序支持的功能,后续如果小程序更新在完善文稿. 1. 小程序可以内嵌组件跳转到h5页面,前提是在小程序后台配置相应的业务域名.新打开的h5页面会替代小程序组件内的其它组件,即为h5不能与小 ...