我正在开发一个网络应用程序;它的设计要求之一是几个大型 CSS3 动画。
具体来说 - 它有一个很大的 <div>将在屏幕上转换以响应用户输入。
由于应用程序的设计方式,<div> 的“内容”可以实现为设置为 <div> 的大型静态图形(例如 .jpg 或 .png)的背景。
或者,内容也可以用标准 HTML 实现。 (内容布局本身是一个“小”技巧 - 它需要几个 float 或定位的嵌套 div 元素和跨度,但没有什么疯狂的。)
我的问题是 - 哪个选项可能会产生最佳(最流畅)的动画效果?
(我当然可以自己测试,但通常很难判断动画的流畅度,尤其是在各种设备上的十几个不同的浏览器上。我也意识到还有其他考虑因素 - 例如,维护。但是在这种情况下,我完全专注于动画性能。)
我想知道浏览器是否通常更擅长动画/呈现简单的 DOM 元素 WITH 图形背景,或更复杂的 DOM 元素(有很多 child )没有图形元素?
此外 - 还有其他指南吗?例如,
position:absolute 时,浏览器是否会更好地为元素设置动画? ,当子元素 float 时,或者当子元素的位置由常规文档流确定时?我对这些事情有直觉(深度嵌套的 DOM 元素的动画不如简单元素流畅),但我的直觉常常是错误的。所以,我想知道是否存在关于浏览器或多或少工作的“规则”。
当包含大量子元素的大型元素被动画化时,我还应该考虑什么?
最佳答案
您的答案将取决于每个实现所使用的特定呈现策略,但如果您同意使用 WebKit 的策略作为“通用”策略,那么您的所有答案都在本文档中:
http://www.chromium.org/developers/design-documents/gpu-accelerated-compositing-in-chrome
首先创建 DOM 树的“RenderObject”克隆
在此之后,遍历树并将每个 RenderObject 合并到其最近祖先的 RenderLayer 中 或者,如果其中一个关于 RenderObject 为真,则进入一个新的 RenderLayer:
<canvas>具有 3D (WebGL) 上下文或加速 2D 上下文的元素<video>元素在此之后,遍历树并将每个 RenderLayer 合并到其最近祖先的 GraphicsLayer 中 或者如果其中一个关于 RenderLayer 为真,则进入一个新的 GraphicsLayer:
<video> 使用使用加速视频解码的元素<canvas> 使用具有 3D 上下文或加速 2D 上下文的元素因此,了解这通常是如何工作的并在这里进行预感,我不得不说首先最小化导致创建新 GraphicsLayer 的事物,然后最小化导致创建新 RenderLayer 的事物。只要额外的节点不会导致创建新的 RenderLayers 或 GraphicsLayers,您就可以摆脱大量的 DOM 节点嵌套或任何您正在谈论的内容。
还有关于发送 DOM 元素向量的位图图像而不是向量本身的想法。我真的怀疑它会更快。对我来说,PNG 或 JPEG 在某种程度上是表示 DOM 节点比矢量更有效的方式,这对我来说没有任何意义。但是嘿,我没有编写 Webkit 代码,所以我想真正了解它的唯一方法是分析它。
关于html - CSS3 动画和过渡——浏览器是否更擅长动画图形背景或 DOM 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15477326/
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我在MiniTest::Spec和Capybara中使用以下规范:find_field('Email').must_have_css('[autofocus]')检查名为“电子邮件”的字段是否具有autofocus属性。doc说如下:has_css?(path,options={})ChecksifagivenCSSselectorisonthepageorcurrentnode.据我了解,字段“Email”是一个节点,因此调用must_have_css绝对有效!我做错了什么? 最佳答案 通过JonasNicklas得到了答案:No
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'
我有一个div,它根据表单是否正确提交而改变。我想知道是否可以检查类的特定元素?开始元素看起来像这样。如果输入不正确,添加错误类。 最佳答案 试试这个:browser.div(:id=>"myerrortest").class_name更多信息:http://watir.github.com/watir-webdriver/doc/Watir/HTMLElement.html#class_name-instance_method另一种选择是只查看具有您期望的类的div是否存在browser.div((:id=>"myerrortes
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda
我想用Nokogiri解析HTML页面。页面的一部分有一个表,它没有使用任何特定的ID。是否可以提取如下内容:Today,3,455,34Today,1,1300,3664Today,10,100000,3444,Yesterday,3454,5656,3Yesterday,3545,1000,10Yesterday,3411,36223,15来自这个HTML:TodayYesterdayQntySizeLengthLengthSizeQnty345534345456563113003664354510001010100000344434113622315