【问题标题】:jQuery continuously scales a div element using hover()jQuery 使用 hover() 连续缩放 div 元素
【发布时间】:2011-03-11 03:32:54
【问题描述】:

我最近尝试将 jQuery 的 effect('scale') 函数与 jQuery 中的 hover() 函数一起使用。这个想法是在 mouseenter 上放大 div 元素,并在 mouseleave 上将其缩小回正常。代码如下:

$('.boxgrid').hover(function(){
    $(this).effect('scale', {percent:125}, 1000);
}, function() {
    $(this).effect('scale', {percent:80}, 1000);
});

我尝试在 jsfiddle 中对此进行测试,但不是在鼠标进入元素时放大和缩小一次,而是不断放大它。你可以看到 jsfiddle here。我的问题是我该如何解决?我的理解是 mouseenter 事件只触发了一次,并在 mouseleaves 事件触发时重置,但这似乎另有说明?我错过了什么吗?非常感谢任何帮助。

【问题讨论】:

  • 它在 Firefox 3.6.15 中有奇怪的行为,但我只是在 Chrome 中尝试过,它似乎表现正常。那么让我问一下是否有更好、更跨浏览器的方法来做到这一点?
  • 它适用于 chrome,但不适用于 IE。
  • 在 Chrome 10 中尝试过,如果您进出几次,它就会像您提到的那样开始出现零星的情况。

标签: javascript jquery jquery-ui


【解决方案1】:

每次动画结束时它都会调用悬停函数。我对其进行了如下修改,它似乎可以工作:

window.boxScaled = false;
$('.boxgrid').hover(function(){
    if(!window.boxScaled) {
        window.boxScaled = true;
        $(this).effect('scale', {percent:125}, 1000);
    }
}, function() {
    if(window.boxScaled) {
        window.boxScaled = false;   
    $(this).effect('scale', {percent:80}, 1000)
        }
});

【讨论】:

  • 感谢@Ewan!我正在考虑使用带有该功能的标志,即使它看起来有点变通。我实际上倾向于采用@Adam Ayres 在他的 cmets 中建议的解决方案,因为这似乎是更合适的方法。
【解决方案2】:

我认为如果你在盒子完成缩放之前离开盒子(或者在盒子缩小之前重新进入盒子),你需要强制动画停止:

$('.boxgrid').hover(function(){
    $(this).stop().effect('scale', {percent:125}, 1000);
}, function() {
    $(this).stop().effect('scale', {percent:80}, 1000);
});

http://jsfiddle.net/magicaj/9GLEy/10/

您对悬停 (mouseenter/mouseleave) 的理解是正确的,它们应该只在进入/离开时触发一次。

【讨论】:

  • 我对此进行了测试,并且能够让盒子缩小不存在:o
  • 啊,你是对的,也许使用缩放来缩小不是我们想要的。也许使用“大小”回到原来的大小会更好:jsfiddle.net/magicaj/9GLEy/15
  • 这个例子似乎让你仍然可以继续扩大盒子,如何在两个方向上使用“大小”:jsfiddle.net/magicaj/9GLEy/16
  • 你是个天才!感谢您的“尺寸”建议!
  • 我很乐意以接受的答案的形式接受奖励/付款:)
猜你喜欢
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
相关资源
最近更新 更多