javascript - 强制在动画结束时发生溢出变化
问题描述
#div {
width: 20px;
border: 2px solid black;
animation: 5s change-width paused forwards;
}
@keyframes change-width {
from { overflow: hidden; }
to { overflow: visible; width: 100px; }
}
<div id="div">abcdefghijklmnopqrstuvwxyz</div>
<button onclick="document.getElementById('div').style.animationPlayState = 'running'">
Run
</button>
看看动画中间的离散动画是如何overflow
突然变化的。如何强制它在动画结束时发生?
我尝试将overflow: hidden
from转换@keyframes
为.default
rule 但无济于事。
#div {
width: 20px;
border: 2px solid black;
overflow: hidden;
animation: 5s change-width paused forwards;
}
@keyframes change-width {
to {
overflow: visible;
width: 100px;
}
}
<div id="div">abcdefghijklmnopqrstuvwxyz</div>
<button onclick="document.getElementById('div').style.animationPlayState = 'running'">Run</button>
解决方案
===溢出属性不能动画。===
查看接受的动画属性列表
为此,您需要 js 代码:
const myDiv = document.querySelector('#my-div')
document.querySelector('#my-button').onclick =_=>
{
myDiv.classList.add('change_w')
setTimeout(()=>{ myDiv.classList.add('no-overflow')}, 3000)
}
#my-div {
width : 20px;
overflow : hidden;
border : 2px solid black;
transition : width 3s ease-in-out
}
#my-div.change_w {
width : 100px;
}
#my-div.no-overflow {
overflow: visible;
}
<div id="my-div">abcdefghijklmnopqrstuvwxyz</div>
<button id="my-button"> Run </button>
您还可以使用过渡结束事件
const myDiv = document.querySelector('#my-div')
document.querySelector('#my-button').onclick =_=>
{
myDiv.classList.add('change_w')
}
myDiv.ontransitionend =_=> myDiv.classList.add('no-overflow')
#my-div {
width : 20px;
overflow : hidden;
border : 2px solid black;
transition : width 5s ease-in-out
}
#my-div.change_w {
width : 100px;
}
#my-div.no-overflow {
overflow: visible;
}
<div id="my-div">abcdefghijklmnopqrstuvwxyz</div>
<button id="my-button"> Run </button>
记录:进出显示/隐藏
const
myDiv = document.querySelector('#my-div')
mybt = document.querySelector('#my-button')
mybt.onclick =_=>
{
mybt.disabled = true
myDiv.classList.remove('no-overflow')
let largeWidth = myDiv.classList.toggle('change_w')
myDiv.addEventListener('transitionend', finish )
function finish()
{
mybt.disabled = false
if (largeWidth) myDiv.classList.add('no-overflow')
myDiv.removeEventListener('transitionend', finish )
}
}
#my-div {
width : 40px;
overflow : hidden;
border : 1px solid black;
transition : width 3s ease-in-out
}
#my-div.change_w {
width : 100px;
}
#my-div.no-overflow {
overflow: visible;
}
<div id="my-div">abcdefghijklmnopqrstuvwxyz</div>
<button id="my-button"> Run </button>
推荐阅读
- python - AttributeError:模块'tensorflow'没有属性'__version__',但导入tensorflow as tf works
- configuration - Quartz 2.6.2 和 .NET Core?- 错误“无法初始化数据源”
- game-development - 在 Game Maker Studio 2 中实现对话系统的最佳方式
- javascript - JQuery 无法分配给“#back”上的属性“guid”:不是对象
- javascript - 如何验证用户是否点击了联系表格 7 提交后发送的验证链接?
- java - Java BasicDataSource 连接时卡住
- sql - 如何将此“2021 年 6 月 28 日 10:52:16 CDT (GMT-0500)”转换为 2021 年 6 月 28 日
- flutter - Riverpod - 以更好/优雅的方式创建具有异步依赖的服务
- javascript - 如何在 Typescript 的回调中访问类变量/方法?
- reactjs - 如何在子组件中传递道具以使用打字稿做出本机反应