更流畅的 Jquery 动画

     2023-05-08     250

关键词:

【中文标题】更流畅的 Jquery 动画【英文标题】:Smoother Jquery Animation 【发布时间】:2011-09-13 11:13:32 【问题描述】:

有另一个关于这个的帖子,但可能因为我的问题不是很清楚,所以没有解决。

只是想再试一次,希望我能尽快解决这个问题:

我最近的任务是创建一个模拟基本 Flash 动画(即滑入和淡入淡出元素)的单页网站。

当我得到一个交互式模型时,我遇到了一个大问题 - 不连贯的动画。该问题出现在屏幕大于 18 英寸的 Mac 中,而不管浏览器和 18 英寸以下的 Mac 仅适用于 FF 版本 3 及以下版本。在 PC 上,动画几乎接近完美。

这是我的 jquery 代码,受影响的元素用 ID #md1、#md2 和 #md3 标记:

$(document).ready(function () 
    $('#md1').animate( top: "-60px" , 500);
    $('#md2').animate( top: "60px" , 800);
    $('#md3').animate( left: "60px" , 1000);
    $('.home').fadeTo(3000, 0.8);
    $('#bg-img-4').fadeTo(1200, 1);
    $('#menu').fadeTo(4000, 1);
    $('#copyright').fadeTo(4000, 1);
);

我采用了各种优化方法,包括在索引页面上缓存受影响的 div 中存在的图像,稍后将用户重定向到实际页面并将动画排队,但没有任何效果。

这真的很令人沮丧,因为我似乎已经用尽了我所知道的所有可用方法,而且我似乎无法让它在 Mac 上正常工作。

我有一种直觉,我在准备好文档时编译了太多动画,这导致了缓慢 - 任何人都可以确认这是否是主要原因,是否有任何其他方法可以解决这个问题?

非常感谢你们的帮助。非常感谢=)

【问题讨论】:

我测试并确定的一件事是动画元素上的阴影导致明显的波动。另一件总是有帮助的事情是减少图像的表面积。 @Babiker:我同意你的看法;在受影响图像的表面区域部分,您是绝对正确的。我已经尝试在 18 英寸及以上的 Mac 上减小浏览器大小,动画确实改进了很多。不幸的是,我在设计方向上没有发言权,并被指示遵守给我的静态组合..跨度> 【参考方案1】:

最好的方法是为此使用 CSS 过渡/动画。 如果某些浏览器不支持它们,那么这样的浏览器就不适用于任何类型的动画。

CSS 中的过渡和动画可以更好地通过本机代码进行优化,因此理论上可能会表现出明显更平滑(更高 FPS)的行为。

至于您上面的 jquery 动画:

    尝试减少复杂元素上的 fadeTo 数量。 尝试简化样式 - 以透明方式减少 opacityrgba() 的用例数量。

一般来说:你拥有的 DOM 元素越少越好。

【讨论】:

谢谢,我一定会试一试,看看效果如何。我也在决定如何减少 DOM 元素的数量。【参考方案2】:

队列

使用 jQuery animate 时,如果您正在运行超过 1 个动画或重复相同的动画,您应该在动画前加上 dequeue()stop(),否则它们可能会在等待运行时相互堆积并导致意外延迟。

$('#md1').dequeue().stop().animate( top: "-60px" , 500);

Here's a Codepen demo 和 a another slightly more complex demo 使用这个。


帧速率

您可以使用此处记录的jquery.fx.interval 来控制 jQuery 处理动画的帧速率。

可以操作此属性来调整每秒运行动画的帧数。默认值为 13 毫秒。将此值设置为较低的数字可以使动画在速度更快的浏览器(例如 Chrome)中运行更流畅,但这样做可能会对性能和 CPU 产生影响。

由于 jQuery 使用一个全局间隔,因此不应运行动画或停止所有动画以使该属性的更改生效。

参考:http://api.jquery.com/jquery.fx.interval/


间隔

您可以使用 setInterval 将动画分解成更小的部分,这样处理起来会更容易和更快。

例如,如果您想在任何扩展距离上为 div 的位置设置动画,您可以将距离分成小部分,并将其设置为以恒定速度运行,这样看起来就好像它是一个单一的平滑过渡。

Here's a demo.


请求

interval 方法实际上只适用于简单的动画。但是对于更复杂的动画,您可以使用requestAnimationFrame,它可以控制浏览器选择何时是执行代码的最佳时机。

function animLoop( render, element ) 
    var running, lastFrame = +new Date;
    function loop( now ) 
        // stop the loop if render returned false
        if ( running !== false ) 
            requestAnimationFrame( loop, element );
            running = render( now - lastFrame );
            lastFrame = now;
        
    
    loop( lastFrame );


// Usage
animLoop(function( deltaT ) 
    elem.style.left = ( left += 10 * deltaT / 16 ) + "px";
    if ( left > 400 ) 
      return false;
    
// optional 2nd arg: elem containing the animation
, animWrapper );

Code snippet found here.

延伸阅读:"requestAnimationFrame for Smart Animating" - Paul Irish

【讨论】:

有没有办法让这个 jquery 悬停动画更流畅?

】有没有办法让这个jquery悬停动画更流畅?【英文标题】:Isthereawaytomakethisjqueryhoveranimationsmoother?【发布时间】:2012-07-1004:23:29【问题描述】:我目前正在为我公司的网站制作一个简单的交互式地图。我们正在尝试完全摆脱Flash... 查看详情

使 jQuery 可排序更流畅

】使jQuery可排序更流畅【英文标题】:MakejQuerysortablesmoother【发布时间】:2012-03-1411:43:00【问题描述】:我第一次使用jQuery可排序。我试图让排序更顺畅一些,但在在线独库中一无所获。问题是,jQuerysortable只产生一个占位符,... 查看详情

我需要多少图像才能拥有更流畅的动画(Actionscript);

】我需要多少图像才能拥有更流畅的动画(Actionscript);【英文标题】:HowmanyimagesIneedtohavemorefluentlyanimation(Actionscript);【发布时间】:2012-08-1011:19:46【问题描述】:我有一个onEnterFrame事件:packageimportflash.display.MovieClip;importflash.di... 查看详情

自定义 View 动画比自定义 SurfaceView 动画更流畅?

】自定义View动画比自定义SurfaceView动画更流畅?【英文标题】:CustomViewanimationissmootherthanCustomSurfaceViewanimation?【发布时间】:2016-04-0112:46:53【问题描述】:我已经开发了类似的实现来测试我应该选择View还是SurfaceView。我实现了如... 查看详情

我怎样才能使这个动画更流畅?

】我怎样才能使这个动画更流畅?【英文标题】:HowcanImakethisanimationsmoother?【发布时间】:2014-08-0721:43:49【问题描述】:我有一个小plnkr,我用它来玩AngularJS和ngAnimate。我现在正在学习css3转换和转换。折叠/展开动画看起来很酷... 查看详情

我正在为填充但未描边的 CAShapeLayer 的路径值设置动画,我想让它的动画更流畅

...未描边的CAShapeLayer的路径值设置动画,我想让它的动画更流畅【英文标题】:IamanimatingthepathvalueofafilledbutnotstrokedCAShapeLayerandIwouldliketomakeitanimatemoresmoothly【发布时间】:2013-07-2107:23:25【问题描述】:好吧,我再说一遍:。这是基... 查看详情

window.requestanimationframe()的使用,处理更流畅的动画效果

https://blog.csdn.net/w2765006513/article/details/53843169window.requestAnimationFrame()的使用2016年12月23日19:38:38 逆光2016 阅读数:10179 标签: 动画函数源码 更多个人分类: js 版权声明:本文为博主原创文章, 查看详情

JQuery 动画运行不流畅,滚动条闪烁很多,DIV 动画化

】JQuery动画运行不流畅,滚动条闪烁很多,DIV动画化【英文标题】:JQueryanimationdoesnotrunsmoothely,lotsofflickerinscrollbarandDIV\'sbeinganimated【发布时间】:2011-07-2806:10:57【问题描述】:我在一个页面上有几个DIV,只有一个是打开的,其他... 查看详情

GWT 中流畅的类 jQuery 动画

】GWT中流畅的类jQuery动画【英文标题】:SmoothjQuery-likeanimationinGWT【发布时间】:2012-12-2409:52:49【问题描述】:我正在玩GWT的动画课程作为练习。我的目标不是为GWT创建另一个小部件/动画库。另外,我很清楚有很多图书馆可以做... 查看详情

悬停时的Jquery动画子菜单不流畅

】悬停时的Jquery动画子菜单不流畅【英文标题】:Jqueryanimatesubmenuonhoverisn\'tsmooth【发布时间】:2011-08-1018:23:53【问题描述】:我正在开发一个带有子菜单的导航栏。在页面加载时,加载条,并且隐藏子菜单。当您将鼠标悬停在一... 查看详情

Chrome 和 IE:使用鼠标滚轮滚动时视差(jQuery 动画)不流畅

】Chrome和IE:使用鼠标滚轮滚动时视差(jQuery动画)不流畅【英文标题】:ChromeandIE:parallax(jQueryanimate)isnotsmoothwhenusingmousewheeltoscroll【发布时间】:2013-09-0500:09:58【问题描述】:我为jQuery改编了this插件,为我的网站使用视差效果... 查看详情

如何在 iOS 中获得最流畅的动画?

】如何在iOS中获得最流畅的动画?【英文标题】:HowdoIgetthesmoothestanimationpossibleiniOS?【发布时间】:2012-10-1921:43:09【问题描述】:我正在使用UIView方法animateWithDuration:animations为滑动UIView设置动画。它看起来有点波涛汹涌。有没有... 查看详情

Firefox 中的 jQuery 和 CSS 动画 Choppy

...fox(7、8和9)中动画效果非常不稳定。我认为CSS动画会更流畅,所以我adapted网站的iPad版本 查看详情

-webkit-transform:translate3d(0,0,0)触发gpu加速,让网页动画更流畅

前段时间,依照美拍的视频效果写了一个效果类似的网页版的动画。电脑上安装了三种浏览器:IE、Chrome、Firefox。分别作了測试,结果显示Chrome在这方面的渲染效果最差。常常出现卡顿现象。ff表现最好。一直百思不得其解... 查看详情

Bootstrap 折叠动画不流畅

】Bootstrap折叠动画不流畅【英文标题】:Bootstrapcollapseanimationnotsmooth【发布时间】:2015-01-2901:00:01【问题描述】:<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><scriptsrc="https://cdnjs.c 查看详情

如何通过许多子视图保持 iOS 动画流畅

】如何通过许多子视图保持iOS动画流畅【英文标题】:HowtokeepiOSanimationsmoothwithmanysubviews【发布时间】:2011-12-3013:08:36【问题描述】:我正在尝试我正在编写的一个小游戏的不同外观,以便在iOS上玩动画。我的目标是创建一个基... 查看详情

pop简单动画简单使用(入门级别)

...的开源的框架供我们免费使用,底层使用的是c++去实现,流畅度不输苹果的动画效果,甚至有的动画效果看起来比苹果提供的动画更“流畅”。。。。。。 这 查看详情

动作游戏老是卡?试试从这些方面提升流畅度

...类型,经常可以看到一些游戏评论会提到某个游戏的动作流畅、打击感好,直观的感受似乎就是在说游戏的FPS(帧数)比较高而已,但是仔细一想似乎又不那么简单。客户端性能指标本身是包含了FPS数值的,以此来判断一款游戏... 查看详情