javascript - 过渡事件在高度过渡时过早触发
问题描述
我有一个如下所示的 JavaScript 文件:
function hideIt(body_id, icon_id) {
var x = document.getElementById(body_id);
var y = document.getElementById(icon_id);
if (x.style.height==="0px") {
x.style.height= x.scrollHeight + 'px';
x.addEventListener("webkitTransitionBegin", fullStyle(body_id));
y.src = "<%= asset_path('show_icon.png') %>";
} else {
x.style.height= '0px';
x.addEventListener("webkitTransitionEnd", noStyle(body_id));
y.src = "<%= asset_path('hide_icon.png') %>";
}
}
function noStyle(body_id) {
console.log("noStyle");
var x = document.getElementById(body_id);
x.style.padding = '0px';
x.style.margin = '0px';
x.style.border = 'none';
}
function fullStyle(body_id) {
console.log("fullStyle");
var x = document.getElementById(body_id);
x.style.padding = '10px';
x.style.marginBottom = '5px';
x.style.marginTop = '5px';
x.style.border = '1px solid #eaeaea';
}
我操作的元素的 CSS 如下所示:
.post-body-preview{
color: $black;
height: 0px;
overflow: hidden;
transition: height 1000ms;
}
现在的问题是,noStyle
只要我单击带有icon_id
触发hideIt
脚本以隐藏正文的图标,就会触发该问题。元素x
会立即被剥离其边距、填充和边框,因此webkitTransitionEnd
只要我按下按钮就会被触发
有人可以指出我在这里做错了什么吗?
解决方案
问题是我这样做了:
x.addEventListener("webkitTransitionBegin", fullStyle(body_id));
而不是这个:
x.addEventListener("webkitTransitionBegin", function(){ fullStyle(body_id); });
所以它总是触发这个功能。
推荐阅读
- sql - 优化秘密圣诞老人随机化器的存储过程
- excel - 在vba中隐藏工作表上的所有行?
- docker - 使用 SSH 的 Docker 容器不使用 --user 标志运行
- sql - 根据 BigQuery 中的另一个表在组内过滤
- r - 如何通过 ggplot2 构造带有上标的标题?
- sql - SQL获取比例数字
- visual-studio-code - 我试图将多个文件夹移回 windows10 的 vscode 文件系统中。我的文件夹系统如下所示:-
- javascript - ajax页面刷新后jQuery添加到购物车代码不起作用
- coq - 在 Coq 的假设中明确强制转换
- python - 将透明图像转换为黑色背景会改变颜色