原生js轮播以及setTimeout和setInterval的理解
下面这个代码是从一个群下载下来的,为了帮助自己理解和学习现在贴出来,与初学者共勉。
<!DOCTYPE html>
<html> <head>
<meta charset="UTF-8">
<title>原生JS图片轮播</title>
<style>
* {margin: 0;padding: 0;}
#box {width: 520px;height: 280px;margin: 100px auto 0;overflow: hidden;position: relative;box-shadow: 0 0 15px black;}
ul {width: 400%;height: 100%;position: absolute;left: 0;top: 0;}
li {width: auto;display: block;float: left;}
#btnBox {width: 360px;height: 30px;margin: 50px auto 0;}
.btn {display: block;width: 80px;height: 30px;margin: 0 50px;background: peru;color: white;text-align: center;line-height: 30px;float: left;cursor: pointer;-webkit-user-select: none;}
</style>
</head> <body>
<div id="box">
<ul>
<li><img src="https://aecpm.alicdn.com/simba/img/TB1wjqpLFXXXXa0aXXXSutbFXXX.jpg" /></li>
<li><img src="https://aecpm.alicdn.com/simba/img/TB13rqpLpXXXXavXVXXSutbFXXX.jpg" /></li>
<li><img src="https://aecpm.alicdn.com/simba/img/TB1QJsLLpXXXXc2XFXXSutbFXXX.jpg" /></li>
<li><img src="https://img.alicdn.com/tps/TB1wPXTLFXXXXa8XFXXXXXXXXXX-520-280.jpg" /></li>
</ul>
</div>
<div id="btnBox">
<span class="btn" onclick="btnRight()">向左滚</span>
<span class="btn" onclick="btnLeft()">向右滚</span>
</div>
</body>
<script>
var moveAnimationTime,
moveIng = false,
box = document.getElementById("box"),
ul = box.getElementsByTagName("ul")[0],
liList = ul.getElementsByTagName("li"),
liLength = liList.length,
onceMaxLeft = boxWidth = box.clientWidth;//这里一次定义了 moveAnimationTime,moveIng,box,ul,liList,liLength,onceMaxLeft 等全局变量 function moveAnimation(callBack) {//callBack是回调函数
if (moveIng) return false;
moveIng = true;
var moveInterval,
name = callBack.name;
if (name == "moveItemRight") {
var moveS = 0;
moveInterval = setInterval(function() {
moveS -= 20;
ul.style.left = moveS + "px";
if (Math.abs(moveS) === onceMaxLeft) {
clearInterval(moveInterval);
callBack();//调用回调函数
moveIng = false;
};
}, 20);
} else {
var moveS = boxWidth * (-1),
li = liList[3];
ul.insertBefore(li, liList[0]);
ul.style.left = "-" + boxWidth + "px";
moveInterval = setInterval(function() {
moveS += 20;
ul.style.left = moveS + "px";
if (moveS >= 0) {
clearInterval(moveInterval);
callBack();
moveIng = false;
};
}, 20);
};
}; function moveItemRight() {
var li = liList[0];
ul.appendChild(li);
ul.style.left = "0px";
moveAnimationTime = setTimeout(function() {
moveAnimation(moveItemRight);
}, 3000);
}; function moveItemLeft() {
moveAnimationTime = setTimeout(function() {
moveAnimation(moveItemLeft);
}, 3000);
}; function btnLeft() {
if (moveAnimationTime) clearTimeout(moveAnimationTime);//moveAnimationTime 有值就是true 否则就是false
moveAnimation(moveItemLeft);
}; function btnRight() {
if (moveAnimationTime) clearTimeout(moveAnimationTime);
moveAnimation(moveItemRight);
};
moveAnimationTime = setTimeout(function() {
moveAnimation(moveItemRight);
}, 2000);
</script> </html>
setTimeout和setInterval的使用
这两个方法都可以用来实现在一个固定时间段之后去执行JavaScript。不过两者各有各的应用场景。
方 法
实际上,setTimeout和setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。
不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复执行代码,而setTimeout只执行一次那段代码。
虽然表面上看来setTimeout只能应用在on-off方式的动作上,不过可以通过创建一个函数循环重复调用setTimeout,以实现重复的操作。
深入学习:http://www.cnblogs.com/qiantuwuliang/archive/2009/06/20/1507304.html
Window clearTimeout() 方法
定义和用法
clearTimeout() 方法可取消由 setTimeout() 方法设置的 timeout。
clearTimeout()方法的参数必须是由setTimeout()返回的ID值。
语法
Window clearInterval() 方法
定义和用法
clearInterval() 方法可取消由 setInterval() 设置的 timeout。
clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。
语法
在javascript中如果
设置 var xx,xxb=7;
if(xxb){
alert("5")
} else{
alert("000!")
} //弹出 5
if(xx){
alert("5")
} else{
alert("000!")
}//弹出000!
说明 条件语句中只要有值就是true 否则是false。
typeof "John" // 返回 string
typeof 3.14 // 返回 number
typeof false // 返回 boolean
typeof [1,2,3,4] // 返回 object
typeof {name:'John', age:34} // 返回 object
Null
在 JavaScript 中 null 表示 "什么都没有"。
null是一个只有一个值的特殊类型。表示一个空对象引用。
![]() |
用 typeof 检测 null 返回是object。 |
|---|
你可以设置为 null 来清空对象:
Undefined
在 JavaScript 中, undefined 是一个没有设置值的变量。
typeof 一个没有值的变量会返回 undefined。
任何变量都可以通过设置值为 undefined 来清空。 类型为 undefined.
Undefined 和 Null 的区别
typeof undefined // undefined
typeof null // object
null === undefined // false
null == undefined // true
var bba=null;
if(bba){alert("bbbaaa")}else{alert("yyyyyy")}; //弹出 yyyyyy
var ppp=undefined;
if(ppp){alert("bbbaaa")}else{alert("yyyyyy")}; //弹出 yyyyyy
Js中的window.parent ,window.top,window.self 详解
在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法打开当前窗口的那个窗口。
window.self
功能:是对当前窗口自身的引用。它和window属性是等价的。
语法:window.self
注:window、self、window.self是等价的。
window.top
功能:返回顶层窗口,即浏览器窗口。
语法:window.top
注:如果窗口本身就是顶层窗口,top属性返回的是对自身的引用。
window.parent
功能:返回父窗口。
语法:window.parent
注:如果窗口本身是顶层窗口,parent属性返回的是对自身的引用。
在框架网页中,一般父窗口就是顶层窗口,但如果框架中还有框架,父窗口和顶层窗口就不一定相同了。
判断当前窗口是否在一个框架中:
<script type="text/javascript">
var b = window.top!=window.self;
document.write( "当前窗口是否在一个框架中:"+b );
</script>
你应当将框架视为窗口中的不同区域,框架是浏览器窗口中特定的部分。一个浏览器窗口可以根据你的需要分成任意多的框架,一个单个的框架也可以分成其它多个框架,即所谓的嵌套框架。
转载:http://blog.csdn.net/zdwzzu2006/article/details/6047632
原生js轮播以及setTimeout和setInterval的理解的更多相关文章
- js___原生js轮播
原生js轮播 作为一名前端工程师,手写轮播图应该是最基本掌握的技能,以下是我自己原生js写的轮播,欢迎指点批评: 首先css代码 a{text-decoration:none;color:#3DBBF ...
- 原生JS轮播-各种效果的极简实现(二)面向对象版本的实现和优化
之前写了一篇原生JS轮播,不过是非面向对象的,并且也没有添加上自动轮播.这里来写一下如何优化和进阶. 这里简单地介绍一下之前的代码,这是html结构 <body> <div clas ...
- javascript原生js轮播图
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 原生js轮播图
//用原生js实现了一个简单的轮播图效果 <!DOCTYPE html><html> <head> <meta charset="UTF-8&quo ...
- 手把手原生js轮播图
在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用 ...
- 用require.js封装原生js轮播图
index.html页面: <!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- 原生JS轮播-各种效果的极简实现
寒假持续摸鱼中~此为老早以前博客的重写,当时还是分开写的,这里汇总重写,正好复习一遍~ 春招我来了! 所有有意思的,一股脑先扔进收藏,然后再也不看哈哈,真是糟糕. 今日事,今日毕,说起来容易. 当时竟 ...
- 原生js轮播图实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 面向对象原生js轮播图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum. For example: Given the below binary tree andsum =
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- Fedora8上Apache Httpd与Tomcat6初集成
系统信息: 环境: Linux version :2.6.23.1-42.fc8,gcc version 4.1.2 20070925 Apache Httpd version: 2.2.6.3-3 ...
- oracle语句随笔
oracle语句随笔 dmp数据的导入. ; --创建用户 GRANT CONNECT,RESOURCE,DBA TO memsspc; --赋值权限 --cmd 中导入命令 IMP memsspc@ ...
- 修改seacherbar 取消按钮属性
继承UISearchBar. 重载setShowCancelButton. [super xxx]; ... for (UIView *subview in self.subview) { if ...
- iOS:城市级联列表的使用
1.介绍: 现在越来越多的项目都用到了地址,尤其是电商O2O的购物平台,我之前做的教育产品和电商产品都用到了,而实现地址的设置用到的技术就是城市级联列表,即普遍的做法就是自定义选择器控件UIPicke ...
- saltstack之(九)配置管理源码部署Nginx
场景:rpm包安装的nginx服务,无法满足定制模块的需求,故线上环境使用nginx源码进行安装.本片文章详细介绍如何使用saltstack的配置管理功能实现nginx软件的源码安装. 下载源码:pc ...
- shell脚本编程-使用结构化命令(if/else)(转)
11.1 使用if-then语句 格式如下 if语句会执行if行定义的那个命令,如果该命令的退出状态码是0,则then部分的语句就会执行,其他值,则不会 1 2 3 4 if command th ...
- SQLSERVER 数据库查看各表的记录数
select a.name as 表名,max(b.rows) as 记录条数 from sysobjects a ,sysindexes b where a. ...
- dstat
$ dstat You did not select any stats, using -cdngy by default. ----total-cpu-usage---- -dsk/total- - ...
- eclipse 插件未安装成功定位
以gef未安装成功为例 在eclipse根目录下: eclipse –clean –console –noExit 右击窗口标题栏,属性,勾中快速编辑模式,这样可以在命令行窗口点击右键将剪贴板上的内容 ...
