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移动到最后一张(也就是添加的重复的第一张),在进行后续动画. 点击下一张,到了最后一张(也就是添加的重复的 ...
随机推荐
- 【转载】十条jQuery代码片段助力Web开发效率提升
文章转载自 51CTO http://www.51cto.com/ 原文链接:http://developer.51cto.com/art/201604/509093.htm原文摘要:JQuery是继 ...
- Scrapy框架--Requests对象
Scrapy使用request对象来爬取web站点. request对象由spiders对象产生,经由Scheduler传送到Downloader,Downloader执行request并返回resp ...
- win10 uwp 自定义控件 SplitViewItem
本文主要是因为汉堡菜单里面列出的菜单很多重复的图标和文字,我把它作为控件,因为是随便写,可能存在错误,如果发现了,请和我说或关掉浏览器,请不要发不良言论. 我们使用汉堡菜单,经常需要一个 需要一个图标 ...
- KindEditor文件上传成功前端显示上传失败
一.使用kindeditor 上传图片 ,根据kindeditor 要求返回了相应的数据, 但是kindeditor 插件显示上传失败!!! 解决方法: 各个版本位置可能不同!!! 1.修改kinde ...
- Node.js之异步流控制
前言 在没有深度使用函数回调的经验的时候,去看这些内容还是有一点吃力的.由于Node.js独特的异步特性,才出现了"回调地狱"的问题,这篇文章中,我比较详细的记录了如何解决异步流问 ...
- CoreCLR源码探索(八) JIT的工作原理(详解篇)
在上一篇我们对CoreCLR中的JIT有了一个基础的了解, 这一篇我们将更详细分析JIT的实现. JIT的实现代码主要在https://github.com/dotnet/coreclr/tree/m ...
- 为什么C++没有对应realloc的new操作符呢?
http://blog.csdn.net/rabbit729/article/details/3400260 这个用memcpy明显是有问题的.如果类有资源分配的话,直接memcpy不能复制资源,会导 ...
- js 两个日期比较相差多少天
var day1 = new Date("2017-9-17"); var day2 = new Date("2017-10-18"); console.log ...
- grunt-contrib-connect自动刷新html页面
grunt-contrib-connect可以在我们开发的时候自动刷新页面,省去了手动刷新的时间. 下面说一下如何配置grunt-contrib-connect 1.下载插件包 npm install ...
- Problem Q
Problem Description A factory produces products packed in square packets of the same height h and of ...