由于jQuery.fadeIn在移动设备上不是很流畅,我尝试使用CSS,但它没有按预期工作。如何使用Javascript创建流畅的CSS动画?
一般来说,这就是我正在尝试的:
$('div')
.css('opacity', 0) // at first, set it transparent
.css('display', 'block') // make it appear
.css('transition', 'opacity 1000ms linear') // set a transition
.css('opacity', 1); // let it fade in
https://jsfiddle.net/8xa89y04/
编辑1:我不是在使用静态 CSS 类搜索解决方案。关键是:我需要在Javascript代码中动态设置它 - 例如jQuerys fadeIn()的替代品。
你的逻辑不太对。首先,你不能对display
进行动画处理,所以要实现你需要的,元素必须始终在 DOM 中渲染(即除了 display: none
之外的任何内容)。其次,transition
属性应放置在 CSS 样式本身中。最后,您可以通过在CSS类中设置所有规则并打开/关闭类来使此操作更加简单。试试这个:
div {
position: absolute;
width: 100px;
height: 100px;
background-color: black;
opacity: 0;
transition: opacity 1000ms linear;
}
.foo {
opacity: 1;
}
$('div').addClass('foo');
工作示例
使用此代码。
.CSS
div {
width: 100px;
height: 100px;
background-color: black;
transition:opacity 2s;
}
JavaScript
$('div').hover(function(){
$(this).css('opacity','0');
})
如果没有正确使用CSS,您将走很长的路。你需要模拟你通常在CSS中做的事情,使用JavaScript,所以你将设置所有的CSS属性,过渡等,然后用js应用它们。
我个人看不到这样做有任何好处。使用实际的CSS会更干净,更高效,更易于维护,并且只是满足您需求的简单更好的解决方案。
我认为这就是你要找的。
$('div').css({"display":"block", "opacity":"0"}) //Make div visible and opacity as "0"
$('div').animate({opacity :1}, 1000); //Animate div to opacity "1"
看看这个演示
在这里找到原因:CSS 过渡在通过 JavaScript 分配时不起作用
为了引起这种关注,我需要给浏览器一些时间 - 或者更好:一个工作槽来激活过渡,因为时间似乎不是问题。
以下代码使用 setTimeout()将进程一分为二...它有效!
var div = $('div');
// first process
div
.css('opacity', 0) // initial opacity
.css('display', 'block') // make it appear (but still transparent)
.css('transition', 'opacity 1s linear'); // set up a transition for opacity
// break - start the transition in a new "thread" by using setTimeout()
window.setTimeout(function(){
div.css('opacity', 1); // start fade in
}, 1); // on my desktop browser only 1ms is enough but this
// may depend on the device performance
// maybe we need a bigger timeout on mobile devices