第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在循環(huán)中多次覆蓋元素的樣式?

在循環(huán)中多次覆蓋元素的樣式?

BIG陽 2022-01-01 18:45:52
我有一個簡單的菜單,它當前正在使用我想要動畫的 CSS 網(wǎng)格。但是,grid-template-columns不能流暢地動畫。我現(xiàn)在正在做完全不同的菜單,但是在我尋找解決方案的過程中,我遇到了一些我無法弄清楚的事情。我的第一個想法是,雖然它可能根本不是一個好主意,并且可能不是關鍵幀動畫的合適替代方案,但我的第一個想法是在 while 循環(huán)中更新樣式以使項目的大小增加動畫。它不起作用。相關的JS:    $('#select-oak').hover(function () {            let start = new Date().getTime();            let elapsed = 0;            while (elapsed <= 1000) {                elapsed = new Date().getTime() - start;                let val = elapsed / 1000;                if (elapsed % 100 === 0) {                    $('.selector-block').css('grid-template-columns', `${1.0 + val}fr 1fr 1fr 1fr`);                    console.log(1 + val);                    console.log(elapsed);                }            }        }CSS:.selector-block {    position: relative;    overflow: hidden;    top: -32.5vh;    background-color: white;    gap: 5px;    width: 100vw;    height: 90vh;    display: grid;    grid-template-columns: 1fr 1fr 1fr 1fr;    clip-path: polygon(0 36%, 100% 0, 100% 60%, 0% 100%);    z-index: 3;}#select-oak {    position: relative;    overflow: hidden;    text-align: center;    background-color: rgb(94, 80, 21);    top: 21.5%;    width: 100%;    height: 200%;}#select-oak img {    position: relative;    left: -10vw;    transform: scale(1.06);    filter: blur(5px);}#select-oak img:hover {    filter: none;    transform: scale(1.1);    transition: ease-in-out 0.5s;}這似乎是一種非常規(guī)的方法,所以我對它不起作用并不感到驚訝,但由于我對 CSS、JS 和 JQuery 相對較新,我很好奇是什么阻止了它的工作,只是為了幫助我理解使用 JQuery 和 CSS。這是結(jié)果。如您所見,即使打印出正確的值,它也不會更新,直到循環(huán)中的最后一次傳遞。所以我有兩個問題:這是我的代碼有問題,還是您不能做的事情?如果可以更新這樣的樣式,這是一種不好的做法,為什么?
查看完整描述

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ā)父項的屬性動畫,這是不可能的。

查看完整回答
反對 回復 2022-01-01
?
瀟湘沐

TA貢獻1816條經(jīng)驗 獲得超6個贊

執(zhí)行 JavaScript 會阻止呈現(xiàn)頁面,這僅在代碼執(zhí)行返回到事件循環(huán)后發(fā)生。

雖然更改樣式屬性可能會更新 DOM 并影響元素位置和大小的動態(tài)計算,但更新屏幕會延遲到腳本完成。這就是為什么您只能看到上次更新的結(jié)果。

A1:您不能影響同步 JavaScript 循環(huán)內(nèi)的頁面顯示。

A2:這不是壞習慣,因為它無法完成:-)


查看完整回答
反對 回復 2022-01-01
  • 2 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號