2 回答
TA贡献1828条经验 获得超3个赞
该while循环阻塞渲染过程,因为它是同步的。
我想出了一种使用 CSS 转换的方法,不知道子元素的数量。 它还处理鼠标离开甚至从一个菜单项移动到另一个菜单项。
$('.selector-block > *').hover(function() {
let frValues = Array($(this).siblings().length+1).fill('1fr');
frValues[$(this).prevAll().length] = '2fr';
$('.selector-block').css({
'grid-template-columns': frValues.join(' ')
});
}, function() {
let frValues = Array($(this).siblings().length+1).fill('1fr');
$('.selector-block').css({
'grid-template-columns': frValues.join(' ')
});
});
.selector-block {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
transition: all 1s ease-in-out;
}
.selector-block > * {
border: solid red 1px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="selector-block"><div id="select-oak">select-oak</div><div>foobar</div><div>baz</div><div>bat</div></div>
实际上,您不能,因为您需要从子项的悬停触发父项的属性动画,这是不可能的。
TA贡献1816条经验 获得超6个赞
执行 JavaScript 会阻止呈现页面,这仅在代码执行返回到事件循环后发生。
虽然更改样式属性可能会更新 DOM 并影响元素位置和大小的动态计算,但更新屏幕会延迟到脚本完成。这就是为什么您只能看到上次更新的结果。
A1:您不能影响同步 JavaScript 循环内的页面显示。
A2:这不是坏习惯,因为它无法完成:-)
添加回答
举报