首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >setTimeout与jQuery.hover()重叠

setTimeout与jQuery.hover()重叠
EN

Stack Overflow用户
提问于 2014-01-20 07:54:36
回答 3查看 392关注 0票数 0

我有一个效果,我想要触发一秒后,页面加载,然后随后每3秒(重复)。当用户在元素(#hover),上盘旋时,效果会暂停(暂时)。当他们停止在上面盘旋时,效果在2秒后恢复。

我有很多麻烦与重叠的声音和动画,特别是当我悬停,然后取消悬停在元素迅速。我的代码怎么了?(小提琴)

代码语言:javascript
运行
复制
var test;
function hoverTest(arg) {
  if (arg == 'stop') {
    clearTimeout(test);
  }
  if (arg == 'start') {
    playSound();
    $('#hover').transition({
      opacity: 0,
      duration: 1000,
      complete: function() {
        $('#hover').transition({
          opacity: 1,
          duration: 1000,
          complete: function() {
            test = setTimeout(function() { hoverTest('start'); }, 3000);
          }
        });
      }
    });
  }
}

$('#hover').hover(function() {
  hoverTest('stop');
}, function() {
  setTimeout(function() {
    hoverTest('start');
  }, 2000);
});

function playSound() {
  var sound = new Audio('sound.mp3');
  sound.play();
}

setTimeout(function() {
  hoverTest('start');
}, 1000);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-20 08:00:24

复制粘贴到文件中并运行该html文件。

代码语言:javascript
运行
复制
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<style>
    #hover {
        width: 100px;
        height: 100px;
        background: red;
    }
</style>
<div id="hover"></div>

<script type="text/javascript">
var interval = null;
var hoverTest = function(method){
    playSound();
    $("#hover").fadeOut(1000, function() {
        $(this).fadeIn(1000);
    });

}
var playSound =function() {
    var sound = new Audio('http://www.sounddogs.com/previews/25/mp3/306470_SOUNDDOGS__an.mp3');
    sound.play();
}

$(document).ready(function(){
    interval = setInterval('hoverTest()',3000);
    $("#hover").mouseenter(function(){
        clearInterval(interval);
    }).mouseleave(function(){
        interval = setInterval('hoverTest()',3000);
    })
})

</script>
票数 1
EN

Stack Overflow用户

发布于 2014-01-20 08:27:52

尝试在clearTimeout函数中添加“hoverTest (Test);”。例:

代码语言:javascript
运行
复制
var test;
function hoverTest(arg) {
  clearTimeout(test);
  if (arg == 'stop') {
    clearTimeout(test);
  }
  if (arg == 'start') {
    playSound();
    $('#hover').transition({
      opacity: 0,
      duration: 1000,
      complete: function() {
        $('#hover').transition({
          opacity: 1,
          duration: 1000,
          complete: function() {
            test = setTimeout(function() { hoverTest('start'); }, 3000);
          }
        });
      }
    });
  }
}
票数 1
EN

Stack Overflow用户

发布于 2014-01-20 08:05:22

试一试:(启动前清除定时器)

代码语言:javascript
运行
复制
$('#hover').hover(function() {
  hoverTest('stop');
}, function() {
  clearTimeout(test);
  setTimeout(function() {
    hoverTest('start');
  }, 2000);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21228744

复制
相关文章

相似问题

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