2 回答

TA貢獻1828條經(jīng)驗 獲得超3個贊
該while循環(huán)阻塞渲染過程,因為它是同步的。
我想出了一種使用 CSS 轉(zhuǎn)換的方法,不知道子元素的數(shù)量。 它還處理鼠標離開甚至從一個菜單項移動到另一個菜單項。
$('.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>
實際上,您不能,因為您需要從子項的懸停觸發(fā)父項的屬性動畫,這是不可能的。

TA貢獻1816條經(jīng)驗 獲得超6個贊
執(zhí)行 JavaScript 會阻止呈現(xiàn)頁面,這僅在代碼執(zhí)行返回到事件循環(huán)后發(fā)生。
雖然更改樣式屬性可能會更新 DOM 并影響元素位置和大小的動態(tài)計算,但更新屏幕會延遲到腳本完成。這就是為什么您只能看到上次更新的結(jié)果。
A1:您不能影響同步 JavaScript 循環(huán)內(nèi)的頁面顯示。
A2:這不是壞習慣,因為它無法完成:-)
添加回答
舉報