javascript之定时器的使用
一:什么是定时器
(一)无限循环定时器
<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> 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之定时器的使用的更多相关文章
- JavaScript中定时器的暂停和继续
对于JavaScript的定时器来说没有严格意义上的暂停和重启,只有清除停止,但是可以通过一些‘障眼法’实现 allChild[index].onclick = function(){//当点击目标且 ...
- day27—JavaScript实现定时器及其应用案例
转行学开发,代码100天——2018-04-12 JavaScript中定时器有两种,分别是setInterval和setTimeout;其用法如下: 开启: setTimeout("fun ...
- Javascript中定时器的使用方法
Javascript中定时器的使用方法 1.间隔定时器(每隔一段时间执行一次代码) 格式:setInterval(函数,时间) //时间单位是毫秒,每隔设置的时间执行函数里的内容一遍(一直执行) // ...
- JavaScript中定时器
JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.它们向任务队列添加定时任务. setTimeout() ...
- 理解JavaScript的定时器与回调机制
定时器方法 JavaScript是单线程的.虽然HTML5已经开始支持异步js了. JavaScript的setTimeout与setInterval看起来就像已经是多线程的了.但实际上setTime ...
- JavaScript基础 -- 定时器
js 定时器有以下两个方法: setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式.方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭. set ...
- JavaScript的定时器是如何工作的
理解JavaScript定时器工作原理对于学习JavaScript非常重要.因为JavaScript是单线程运行的,定时器使用场合少,不是很直观.下面通过三个函数来学习JavaScript如何定义,操 ...
- JavaScript 之 定时器
JavaScript 里面有两个定时器:setTimeout() 和 setInterval() . 区别: setTimeout():相当于一个定时炸弹,隔一段时间执行,并且只会执行一次就不在执行了 ...
- JavaScript clearInterval定时器失效原因
检查下是不是setInterval重复执行(两次以上<!-- 文件上传板块 --> <div id="adUploadWindow" class="ea ...
- 【javascript】定时器组件
'use strict'; module.exports = function() { this.timer = {}; this.config = {}; // 初始化参数 this.init = ...
随机推荐
- CentOS mysql安装
MySQL For Excel 1.3.5MySQL for Visual Studio 1.2.5MySQL Fabric 1.5.6 & MySQL Utilities 1.5.6Conn ...
- 【SSM】---Spring+SpringMVC+Mybatis框架整合
参考 百度经验 https://jingyan.baidu.com/article/2a1383288a85a9074a134f1b.html CSDN http://blog.csdn.net/ge ...
- Pytorch笔记 (3) 科学计算1
一.张量 标量 可以看作是 零维张量 向量 可以看作是 一维张量 矩阵 可以看作是 二维张量 继续扩展数据的维度,可以得到更高维度的张量 ————> 张量又称 多维数组 给定一个张量数据 ...
- Java 8中处理集合的优雅姿势——Stream
在Java中,集合和数组是我们经常会用到的数据结构,需要经常对他们做增.删.改.查.聚合.统计.过滤等操作.相比之下,关系型数据库中也同样有这些操作,但是在Java 8之前,集合和数组的处理并不是很便 ...
- 【VS开发】模态对话框和非模态对话框
MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box). 一.模态对话框(model dialog box) 在程 ...
- Python 类的私有属性与私有方法
1.隐藏的使用场景 在Python类中,有些属性和方法只希望在对象的内部被使用,而不希望在外部被访问到, 2.定义方式, 在属性名或方法名前增加两个下划线,定义的就是私有属性或方法 #其实这仅仅这是一 ...
- Editor placeholder in source code错误
When you insert code via autocompletion (or via a code snippet, sometimes), there may be placeholder ...
- 关于eclipse设置JRebel
版本:eclipse ee Version: 2018-09 (4.9.0) jrebel:最新2019-2 1.在eclipse->help->eclipse Marketplace 2 ...
- Ubuntu下火狐浏览器播放视频出现解码问题
问题描述 点击视频播放按钮,视频不会出现缓冲条,也没任何提示,视频界面就一直是黑屏的状态.右键该视频界面,选择检查元素,点击控制台,发现如下问题: The video on this page can ...
- 基于Caffe训练AlexNet模型
数据集 1.准备数据集 1)下载训练和验证图片 ImageNet官网地址:http://www.image-net.org/signup.php?next=download-images (需用邮箱注 ...
