CSS转换在通过JavaScript分配时不起作用
我在试图通过JavaScript将CSS3转换应用到幻灯片中时遇到了一些麻烦 基本上,JavaScript获取幻灯片放映中的所有幻灯片,并将CSS类应用于正确的元素以提供良好的动画效果,如果没有CSS3转换支持,它将只应用样式而不进行转换 现在,我的“小”问题。所有工作如预期,所有幻灯片获得正确的样式,代码运行没有bug(到目前为止)。但是指定的转换不起作用,即使应用了正确的样式。此外,当我通过检查器自己应用样式和转换时,它们也会起作用 因为我自己找不到一个合乎逻辑的解释,所以我想这里有人可以回答,拜托 我总结了一个小示例,说明了现在的代码是什么:CSS转换在通过JavaScript分配时不起作用,javascript,css,css-transitions,Javascript,Css,Css Transitions,我在试图通过JavaScript将CSS3转换应用到幻灯片中时遇到了一些麻烦 基本上,JavaScript获取幻灯片放映中的所有幻灯片,并将CSS类应用于正确的元素以提供良好的动画效果,如果没有CSS3转换支持,它将只应用样式而不进行转换 现在,我的“小”问题。所有工作如预期,所有幻灯片获得正确的样式,代码运行没有bug(到目前为止)。但是指定的转换不起作用,即使应用了正确的样式。此外,当我通过检查器自己应用样式和转换时,它们也会起作用 因为我自己找不到一个合乎逻辑的解释,所以我想这里有人可以回
或者使用JSfiddle(无图像):要使
转换
工作,必须发生三件事
opacity:0代码>
transition:opacity代码>
opacity:1
。目标fadein
:
window.setTimeout(function() {
slides[targetIndex].className += " target-fadein";
}, 100);
或者直接将.target fadein begin
放入HTML中,以便在加载时对其进行解析,并为转换做好准备
向元素添加transition
不会触发动画,而更改属性会触发动画
//有效
document.getElementById('fade1')。className+=“淡入”
//不起作用
document.getElementById('fade2')。className='Fadable'
document.getElementById('fade2')。className+=“淡入”
//工作
document.getElementById('fade3')。className='Fadable'
setTimeout(函数(){
document.getElementById('fade3')。className+=“淡入”
},50)
.fadable{
不透明度:0;
}
.淡入{
不透明度:1;
过渡:不透明度2s;
}
fade 1-有效
褪色2-不起作用
fade 3-工作
要使过渡工作,必须发生三件事
opacity:0代码>
transition:opacity代码>
opacity:1
。目标fadein
:
window.setTimeout(function() {
slides[targetIndex].className += " target-fadein";
}, 100);
或者直接将.target fadein begin
放入HTML中,以便在加载时对其进行解析,并为转换做好准备
向元素添加transition
不会触发动画,而更改属性会触发动画
//有效
document.getElementById('fade1')。className+=“淡入”
//不起作用
document.getElementById('fade2')。className='Fadable'
document.getElementById('fade2')。className+=“淡入”
//工作
document.getElementById('fade3')。className='Fadable'
setTimeout(函数(){
document.getElementById('fade3')。className+=“淡入”
},50)
.fadable{
不透明度:0;
}
.淡入{
不透明度:1;
过渡:不透明度2s;
}
fade 1-有效
褪色2-不起作用
fade 3-works
有些人问过为什么会有延迟。该标准希望允许多次转换(称为样式更改事件)同时发生(例如,元素在旋转到视图中的同时淡入)。不幸的是,它没有定义一种明确的方式来分组您希望同时发生的转换。取而代之的是,它允许浏览器根据调用的间隔任意选择同时发生的转换。大多数浏览器似乎都使用它们的刷新率来定义这个时间
如果您需要更多详细信息,请参阅以下标准:
有些人问为什么会有延误。该标准希望允许多次转换(称为样式更改事件)同时发生(例如,元素在旋转到视图中的同时淡入)。不幸的是,它没有定义一种明确的方式来分组您希望同时发生的转换。取而代之的是,它允许浏览器根据调用的间隔任意选择同时发生的转换。大多数浏览器似乎都使用它们的刷新率来定义这个时间 如果您需要更多详细信息,请参阅以下标准:
欺骗布局引擎
函数finalizeAndCleanUp(事件){
如果(event.propertyName=='opacity'){
this.style.opacity='0'
this.removeEventListener('transitionend',finalizeAndCleanUp)
}
}
element.style.transition='opacity 1s'
element.style.opacity='0'
元素。addEventListener('transitionend',finalizeAndCleanUp)
//下一行很重要,但不需要存储值
元素。远视
element.style.opacity='1'
如前所述,transition
s通过从状态A插值到状态B来工作。如果脚本在同一函数中进行更改,布局引擎将无法分离状态A结束和B开始的位置。除非你给它一个暗示
由于没有官方的方法来暗示,你必须依靠一些功能的副作用。在本例中,.offsetHeight
getter隐式生成布局