我正在通过Element.animate()构建动画,因此需要创建关键帧,如下面的代码。
但是,在某些方面,我需要设置css属性的默认值(如以下示例中的transformOrigin)。我知道默认值为50%50%,但是我不想列出所有CSS默认值,所以我想知道是否有一种方法可以通过JS获取这些值。
PS:我可以从元素中获取计算样式,但是即使更改了值,我也需要获取它的默认值。
let box = document.querySelector('.box')
let keyframe1 = {
position: 'absolute',
transformOrigin: '0% 0%',
background: 'red',
width: '100px',
height: '100px',
transform: 'rotate(0deg)'
}
let keyframe2 = {
position: 'absolute',
transformOrigin: '0% 0%',
background: 'red',
width: '100px',
height: '100px',
transform: 'rotate(90deg)'
}
box.animate([keyframe1, keyframe2], {
duration: 1000,
iterations: Infinity
})
setTimeout(() => {
keyframe2.transformOrigin = '50% 50%'
box.animate([keyframe1, keyframe2], {
duration: 1000,
iterations: Infinity
})
}, 5000)
<div class="box"></div>
答案 0 :(得分:1)
这是我所知道的做事方式:
除了复制对象外,您还可以在删除元素并返回之前存储defaultStyles[prop].toString()
的输出,但是我在这里的使用方式是开放式的,如果您想要如果要经常运行这些对象,则可以将它们缓存在查找中。
function getDefaultProperty(tag, prop){
try {
const elem = document.createElement(tag)
document.body.appendChild(elem)
const defaultStyles = Object.assign({}, window.getComputedStyle(elem))
document.body.removeChild(elem)
return defaultStyles[prop]
}catch(err){
return err
}
}
document.querySelector('button').addEventListener('click', e => {
const tagname = document.getElementById('elem').value,
property = document.getElementById('prop').value
console.log(getDefaultProperty(tagname, property))
})
<label>Tagname: <input type="text" id="elem" value="div" /></label>
<label>Property: <input type="text" id="prop" value="display" /></label>
<button>Get default property value</button>