平滑这个 jQuery 切换动画?

Posted

技术标签:

【中文标题】平滑这个 jQuery 切换动画?【英文标题】:Smooth out this jQuery toggle animation? 【发布时间】:2012-01-26 21:02:01 【问题描述】:

我的 jQuery 函数生成的动画不稳定,我一直在寻找不同的 SO 解决方案,例如添加 jquery.easing,但没有运气。问题是每个 div 中的 iframe 吗?

关于如何平滑动画的任何想法?我的基本切换功能是最好的方法吗?

JSFiddle: http://jsfiddle.net/gwLcD/8/

基本标记如下所示,并在页面上重复多次(每个“videotoggle”div 之间有文本块):

 <div class="videotoggle">

    <p><h2 class="entry-title">View a few minutes of the (title) video </h2></p>

    <div class="videoblock">

    <iframe   src="http://www.youtube.com/embed/????????"
    frameborder="0" allowfullscreen></iframe>

    </div></div>

以及功能:

$(document).ready(function()
$(".videoblock").hide();  //closes all divs on first page load
$(".entry-title").click(function() 
    $this = $(this);  //this next code only allows one open div at a time
    $content = $this.closest('.videotoggle').find(".videoblock");
    if (!$this.is('.active-title')) 
        $('.active-title').removeClass('active-title');
        $this.addClass('active-title');
        $(".videoblock:visible").slideToggle(400);  //slide toggle
        $content.slideToggle(400);
    
);
);

【问题讨论】:

你能在 jsfiddle 上复制它吗? 在 Chrome 中对我来说似乎可以正常工作:jsfiddle.net/gwLcD/3 实际上,在 win ff 9.x 上观看 Jivings 的小提琴确实会导致动画有点断断续续。 @Jivings:啊,我应该先设置一个 jsfiddle。这是一个:jsfiddle.net/gwLcD/8,带有更完整的代码和活动的 youtube 链接。由于某种原因仍然波涛汹涌。集成 jquery.easing 会有帮助吗? @songdogtech 有趣。我认为这与视频有关。您是否考虑过隐藏视频,仅在打开选项卡时显示一个占位符。然后当动画完成时你展示它? 【参考方案1】:

Andrew 的解决方案是正确的,但我仍然会这样放置 css(如果 javascript 已关闭): .videoblock宽度:560px;高度:315px;溢出:隐藏

并添加同步动画:

$('.videoblock').css('height','0');
$(".entry-title").click(function() 
    $this = $(this);
    $content = $this.closest('.videotoggle').find(".videoblock");
    if (!$this.is('.active-title')) 

        $('.active-title').removeClass('active-title');
        $this.addClass('active-title');
        $(".videoblock:visible").animate(height: "0",  duration: 400, queue: false );
        $content.animate(height: "315",  duration: 400, queue: false );
    
);

这是决赛的链接:http://jsfiddle.net/gwLcD/21/

【讨论】:

谢谢!效果很好,任何时候都只允许打开一个 div,就像我需要的那样。【参考方案2】:

检查一下 - http://jsfiddle.net/vbXVR/。

它使用这个 jquery

$(document).ready(function()
    $(".entry-title").click(function() 
        $(".videoblock").animate(height: "315", 1500);
    );
);

【讨论】:

我个人遇到过 jquery 的“自动”切换、显示、淡入淡出等奇怪行为……关于“未成熟”元素的动画。我也可以说,正如 Andrew 在这里建议的那样,经常手动为属性设置动画可以解决问题。 我添加了一个 jsfiddle:jsfiddle.net/gwLcD/8 稍微复杂的部分是我将函数设置为一次只允许打开一个 div。【参考方案3】:

让我们这样看吧!

我不确定您要在此处的一个页面上加载多少个 iframe,但有一件事似乎非常确定;如果你有太多,你就会有足够的 iframe 和足够的 youtube 视频加载。

这意味着,不必要的负载。用户可能不会点击所有这些链接。用户可能不会观看所有这些视频。

所以:

    不必要的资源膨胀,以及不必要的用户带宽消耗。

    此外,这是不可扩展的。考虑一下,一个页面上需要 50 个这样的链接。好的。只需 10 个。即使这样也不少!

我正在为这个制作一个 jsfiddle。完成后会在这里发布!

【讨论】:

【参考方案4】:

您主要针对哪种浏览器?如果它是任何 webkit 浏览器或 FireFox,那么您可以利用带有 jquery 回退的硬件加速 CSS3 转换。

http://msdn.microsoft.com/en-us/scriptjunkie/hh304380

我不认为 jQuery 缓动目前使用 CSS3 过渡作为第一选择,但如果我错了,请纠正我。

看看: http://css3.bradshawenterprises.com/all/

使用 CSS3 破解一些东西一点也不费力。

【讨论】:

【参考方案5】:

您不想直接使用手风琴插件的任何具体原因? jQuery UI 库应该很好地处理这个问题。

另外,如果不能按预期工作,您可以尝试 css3 动画吗?你可以在这里获得 CSS3 动画的要点:http://titansturf.in/2012/01/12/using-css3-transitions/

您将必须创建两个类,一个带有div-hide,它具有height: 0,另一个带有div-show,它具有所需的height 集。每当您想切换时,只需使用 jQuery 更改类即可。

IMO,如果您的目标受众使用现代浏览器,使用 CSS3 将是一个不错的选择。如果没有,您可以使用 Modernizr 根据所使用的浏览器类型更改工作方式。

【讨论】:

以上是关于平滑这个 jQuery 切换动画?的主要内容,如果未能解决你的问题,请参考以下文章

动画控制器中的混合树如何在动画之间平滑切换?

jQuery 淡入淡出切换

平滑的 CSS 过渡动画旋转

动画切换的比较 (jQuery)

jQuery垂直切换相册图片js动画效果

JQuery 总结 jQuery 效果动画