首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果用户交互,暂停自主功能?

如果用户交互,暂停自主功能?
EN

Stack Overflow用户
提问于 2019-01-14 13:42:04
回答 2查看 48关注 0票数 0

我正在尝试制作一个自动运行的旋转木马,但是如果用户与控件交互,我希望旋转木马重置它的计时器。我构建的东西在一定程度上是可行的,但是如果您与control-dot交互,计时器不会被重置,因此它会抛出一些有趣的结果.

这是我的JS

代码语言:javascript
复制
/* Js for carousel */
$('.steps__step-1').addClass('active');
$(function() {
  var lis = $('.step'),
    currentHighlight = 0;
  N = 5; // Duration in seconds
  setInterval(function() {
    currentHighlight = (currentHighlight + 1) % lis.length;
    lis.removeClass('active').eq(currentHighlight).addClass('active');
  }, N * 1000);
});

$('.control-dot').on('click', function(e) {
  e.preventDefault();
  $('.active').removeClass('active');
  var itemNo = $(this).index() - 1;
  $('.step').eq(itemNo).addClass('active');
});

http://jsfiddle.net/tnzLha3o/1/

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-14 14:01:28

您应该将区间id存储在变量(let intervalId = setInterval(...))中,然后使用它重新启动它。

这是您最新的小提琴:http://jsfiddle.net/gudzdanil/uzoydp6a/2/

这样,您的代码看起来就像:

代码语言:javascript
复制
var duration = 5;
var lis = $('.step'),
    currentHighlight = 0;
var intervalId = null;
$(function() {
  $('.steps__step-1').addClass('active');
  runCarousel();
});

$('.control-dot').on('click', function(e) {
  e.preventDefault();
  $('.active').removeClass('active');
  var itemNo = $(this).index() - 1;
  $('.step').eq(itemNo).addClass('active');
  rerunCarousel();
});

function rerunCarousel() {
  if(intervalId) clearInterval(intervalId);
  intervalId = null;
  runCarousel();
}

function runCarousel() {
  intervalId = setInterval(function() {
    currentHighlight = (currentHighlight + 1) % lis.length;
    lis.removeClass('active').eq(currentHighlight).addClass('active');
  }, N * 1000)
}
票数 0
EN

Stack Overflow用户

发布于 2019-01-14 14:05:47

添加一个变量来阻止它。

代码语言:javascript
复制
 var stop = false
    $('.steps__step-1').addClass('active');
    $(function() {
        var lis = $('.step'),
            currentHighlight = 0;
            N = 5; // Duration in seconds
        setInterval(function() {
            if (!stop) {
            currentHighlight = (currentHighlight + 1) % lis.length;
            lis.removeClass('active').eq(currentHighlight).addClass('active');
            }
        }, N * 1000);

    });

    $('.control-dot').on('click', function(e){
        e.preventDefault();
        $('.active').removeClass('active');
        var itemNo = $(this).index() - 1;
        $('.step').eq(itemNo).addClass('active');
        stop = !stop
    });

http://jsfiddle.net/quvgxz63/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54182691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档