原生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 ...
随机推荐
- 前端面试题(html篇)
前端面试题(html篇)
- APP源码集中打包大放送!十一个千万级别APP源码随意处置!
小伙伴们还在一个一个苦苦寻找各类APP源码吗?此贴集中打包最常用APP的源码,你想得到的APP,这里都有! 想做商城?这里有天猫! 想做同城服务?这里有大众点评! 想做外卖?这里有饿了么! 想做视频? ...
- 30天,App创业从0到1【7.12西安站】
活动概况 时间:2015年07月12日13:30-16:30 地点:汇天使咖啡(高新路36号智空间二楼) 主办:APICloud.UPYUN.万紫网络 网址:www.apicloud.com 费用:免 ...
- Install .NET Framework 4.5.2 on a Cloud Service Role
October Guest OS rollout is starting today October 15 2015, and projected to be released on November ...
- linux查看公网地址
curl cip.cc curl http://members.3322.org/dyndns/getip
- strip和stripe
- ROC曲线及AUC评价指标
很多时候,我们希望对一个二值分类器的性能进行评价,AUC正是这样一种用来度量分类模型好坏的一个标准.现实中样本在不同类别上的不均衡分布(class distribution imbalance pro ...
- 实现 DIV 固定定位在网页主体部分最右侧
position:fixed 相对于窗口的固定定位,这个窗口可理解为可视窗口,除了浏览器自己的东西,剩下的就是这个可视窗口.而大部分的网页都是窄屏设计,比如说网页主体部分固定宽 1200px,或者自适 ...
- 通用窗口类 Inventory Pro 2.1.2 Demo1(下)
本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如No ...
- vs2015社区版不支持installshield
开始学习vs了 下一步就是在这个平台上提升技术咯. 写了老师上课讲的算法 生成了个VB程序结果不能在别的电脑上运行 .幸好我自己测试了下.要是直接拿去学校不是很~ 然后我就想到当初接触易语言时候的搞静 ...
