setTimeout和setInterval实现滚动轮播中,清除定时器的思考
PS:希望各路大神能够指点
setTimeout(function,time):单位时间内执行一次函数function,以后不执行;对应清除定时器方法为clearTimeout;
setInterval(function,time):单位时间内执行一次函数function,以后一直重复执行函数;对应清除定时器方法为clearInterval;
其中function为函数名,假设其函数名为AutoPlay,其中如果写成AutoPlay,则表示这个函数,写成AutoPlay()则表示函数执行后的结果。但是两种写法函数最终都会执行。
当然我们也可以通过函数可以调用自身的特性用setTimeout来创建一个永久循环的函数,那么它的效果似乎和setInterval一样了,但实际上在细微之处是有区别的
setTimeout:
eg1:
function Automatism(){
func1... //函数执行话费时间400ms
setTimeout(Automatism(), 300);
}
setTimeout(Automatism(), 600); //实际是:func1 400s,600ms后在执行400s
setInterval:
eg2:
function Automatism(){
func1... //函数执行话费时间400ms
} setInterval(Automatism(), 600); //实际是:func1开始执行时已开始计时,每隔600ms执行一次
清除定时:
清除定时人人都会,但这次我在撸轮播的过程中却发现无论如何也清不掉,经过几次测试才发现是因为使用setTimeout调用了自身的缘故.如何eg1中例子,即当我们使用setTimeout来达到重复执行的时候clearTimeout似乎失效了(目前不知道原因,请高手指点啊)。
最后换用setInterval可以正常工作。
最后贴上代码:
HTML:
<div class="companyBusiness" id="companyBusiness">
<dd id="album">
<img src="../images/companyBusiness.png" />
<img src="../images/companyBusiness.png" />
<img src="../images/companyBusiness.png" />
<img src="../images/companyBusiness.png" />
</dd>
<p id="circle">
<span class="on"></span>
<span></span>
<span></span>
<span></span>
</p>
</div>
CSS:
.companyBusiness{position: relative;width: 340px;height: 200px;overflow: hidden;display: inline-block;vertical-align: top;}
.companyBusiness dd{position: relative;display: inline-block;vertical-align: top;width: 1360px;transition: margin-left 0.8s ease-in-out;}
.companyBusiness dd img{width: 340px;height: auto;vertical-align: top;}
.companyBusiness p{position: absolute;bottom: 14px;right: 14px;}
.companyBusiness p span{display: inline-block;width: 7px;height: 7px;border-radius: 20px;background-color: #fff;margin-left: 5px;}
.companyBusiness p span.on{background-color: #da1622;}
.foucs_middle dt{width: 311px;display: inline-block;vertical-align: top;}
.foucs_middle dt img{width: 100%;height: auto;}
JS(清除定时器):
var timer = null;
$("#circle span").click(function(){
clearTimeout(timer);
var _thisIndex = $(this).index();
var dis = -(_thisIndex) * parseInt($("#companyBusiness").width());
$("#album").css("margin-left", dis);
$(this).addClass("on").siblings().removeClass("on");
timer = setTimeout("AutoPlay()", 3000);
});
function AutoPlay() {
var _thisIndex = $("#circle span.on").index();
_thisIndex++;
if (_thisIndex > 3) _thisIndex = 0;
$("#circle span").eq(_thisIndex).trigger("click");
setTimeout("AutoPlay()", 3000);
}
$(function() {
timer = setTimeout("AutoPlay()", 3000);
})
JS(不能清除定时器):
var timer = null;
$("#circle span").click(function(){
clearInterval(timer);
var _thisIndex = $(this).index();
var dis = -(_thisIndex) * parseInt($("#companyBusiness").width());
$("#album").css("margin-left", dis);
$(this).addClass("on").siblings().removeClass("on");
timer = setInterval("AutoPlay()", 3000);
});
function AutoPlay() {
var _thisIndex = $("#circle span.on").index();
_thisIndex++;
if (_thisIndex > 3) _thisIndex = 0;
$("#circle span").eq(_thisIndex).trigger("click");
}
$(function() {
timer = setInterval("AutoPlay()", 3000);
})
setTimeout和setInterval实现滚动轮播中,清除定时器的思考的更多相关文章
- H5滚动轮播插件
概述 JRedu 随着前端技术的发展,越来越多的H5技术被应用到实际开发中,尤其是js插件更是无处不用,本章节我们主要分享下如何去自己封装一个滚动轮播插件. 1效果图如下: 2主要功能 支持超 ...
- bootstrap中的动态加载出来的图片轮播中的li标签中的class="active"的动态添加移除
//该方法是在slide改变时立即触发该事件, $('#myCarousel').on('slide.bs.carousel', function () { $("#myCarousel o ...
- layui轮播中箭头不起作用问题
layui轮播中箭头不起作用问题 layui轮播插件在使用中发现箭头不起作用其他都合适,是什么原因造成的呢?发现单独提出layui中的demo是合适的,通过仔细慢慢的寻找,发现layui.use('c ...
- iOS swift版本无限滚动轮播图
之前写过oc版本的无限滚动轮播图,现在来一个swift版本全部使用snapKit布局,数字还是pageConrrol样式可选 enum typeStyle: Int { case pageContro ...
- 滚动轮播插件——jCarouselLite
jcarousellite(上下.水平滚动元素插件)插件使用: 参数说明: btnPrev string 上一个按钮的class名, 比如 btnPrev: ".prev" ...
- Android自动滚动 轮播循环的ViewPager
主要介绍如何实现ViewPager自动播放,循环滚动的效果及使用.顺便解决ViewPager嵌套(ViewPager inside ViewPager)影响触摸滑动及ViewPager滑动速度设置问题 ...
- js原生选项卡(自动播放无缝滚动轮播图)二
今天分享一下自动播放轮播图,自动播放轮播图是在昨天分享的轮播图的基础上添加了定时器,用定时器控制图片的自动切换,函数中首先封装一个方向的自动播放工能的小函数,这个函数中添加定时器,定时器中可以放向右走 ...
- bootstrap 获得轮播中的索引 getActiveIndex
今天想用bootstrap做一个轮播,当轮播滚到每张图的时候,在页面下面就显示相对应的内容,那么问题来了:我肯定需要知道当前活动(显示图片)的索引号,那么bootstrap的轮播组件要怎么获得这个索引 ...
- JavaScript+HTML+CSS 无缝滚动轮播图的两种方式
第一种方式 在轮播图最后添加第一张,一张重复的图片. 点击前一张,到了第一张,将父级oList移动到最后一张(也就是添加的重复的第一张),在进行后续动画. 点击下一张,到了最后一张(也就是添加的重复的 ...
随机推荐
- This application failed to start because it could not find or load the Qt platform plugin "windows" 的问题原因以及解决方案
1. 问题原因非常简单,经过各种百度,都没有找到解决方案,在此做一个记录备用. 2.原因就在于,项目目录使用了中文路径,然后出现了这个问题. 3.我是在使用 syncfusion 下的HTML 转PD ...
- Android Annotations(1)
特性: Android Annotations是一个开源的框架,用于加速 Android应用的开发,可以让你把重点放在功能的实现上,简化了代码,提升了可维护性. 特性: 依赖注入: inject ...
- 基于HTML5和WebGL的碰撞测试
这是公司大神写的一个放官网上给用户学习的例子,我一开始真的不知道这是在干嘛,就只是将三个形状图元组合在一起,然后可以同时旋转.放大缩小这个三个图形,点击"Animate"就能让中间 ...
- Java常用类(一)之Object类详解
大家都知道Object是所有类的父类,任何类都默认继承Object 理论上Object类是所有类的父类,即直接或间接的继承java.lang.Object类.由于所有的类都继承在Object类,因此省 ...
- 【转】C语言中内存分配
原文:C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要 ...
- MySQL锁类型以及子查询锁表问题、解锁
MySQL中select * for update锁表的范围 MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主 ...
- (七)php运算符
一:算数运算符 +(加).-(减).*(成)./(除) %(取模,求余的意思) <?php $a=7/3; echo $a; //2.3333333333333.因为float类型的最大精度为1 ...
- LINUX 笔记-vmstat命令
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff ...
- django-rest-framework之序列化
前言:昨天学习了rest-framework序列化方面的知识,故写了博客记录一下.官网:http://www.django-rest-framework.org/tutorial/1-serializ ...
- 使用canvas实现环形进度条
html代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...