亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

鏈接多個“transitionend”事件監聽器

鏈接多個“transitionend”事件監聽器

30秒到達戰場 2022-10-13 16:26:11
我想使用帶有“transitionend”的 EventListenner 鏈接多個圖像,例如我有一個石頭剪刀布游戲,每次單擊其中一個按鈕播放時,我希望圖像從石頭旋轉,到紙,最后到剪刀,每次都等待過渡結束,然后再次交換圖像,模擬現實生活中的游戲交互。我已經設法鏈接其中一個轉換,但我堅持如何為多個連續"transitionend"事件執行此操作的邏輯let images = ['https://adiihd.github.io/rock-paper-scissors-game/img/rock.png', 'https://adiihd.github.io/rock-paper-scissors-game/img/paper.png', 'https://adiihd.github.io/rock-paper-scissors-game/img/scissors.png'];const buttons = document.querySelectorAll('button');// we use the .forEach method to iterate through each buttonbuttons.forEach((button) => {  // and for each one we add a 'click' listener  button.addEventListener('click', (e) => {    let userImg = document.querySelector("#userimg");    userImg.classList.add("playing");    userImg.addEventListener('transitionend', () => {      userImg.classList.remove("playing");      userImg.setAttribute('src', images[1]);    });    userImg.addEventListener('transitionend', () => {      userImg.classList.remove("playing");      userImg.setAttribute('src', images[2]);    });  });});#userimg {  transition: all 0.4s ease;  width: 200px;}.playing {  transform: rotate(30deg);}<img id="userimg" src="https://adiihd.github.io/rock-paper-scissors-game/img/rock.png"><br><button id="Rock">Rock</button><button id="Paper">Paper</button><button id="Scissors">Scissors</button>
查看完整描述

1 回答

?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

等待 transitionend 可能會導致更多的問題而不是它的價值。我不確定您的瀏覽器兼容性要求,但如果您可以使用動畫,我建議您使用它們:


let images = ['https://adiihd.github.io/rock-paper-scissors-game/img/rock.png', 'https://adiihd.github.io/rock-paper-scissors-game/img/paper.png', 'https://adiihd.github.io/rock-paper-scissors-game/img/scissors.png'];


const buttons = document.querySelectorAll('button');


// we use the .forEach method to iterate through each button

buttons.forEach((button) => {

  // and for each one we add a 'click' listener

  button.addEventListener('click', async (e) => {

    let userImg = document.querySelector(".userimg");

    userImg.classList.remove("userimg-animation");

    

    // Force a reflow, see https://css-tricks.com/restart-css-animation/

    userImg.offsetWidth;

    

    userImg.classList.add("userimg-animation");

    userImg.setAttribute("choice", button.id.toLowerCase());

  });

});

.imageHolder {

  position: relative;

  display: inline-block;

}


.spacerimg {

  opacity: 0;

}


.userimg-animation {

  width: 100%;

  height: 100%;

  position: absolute;

  animation-name: rockpaperscissors;

  animation-duration: 1.2s;

}


.userimg {

  background-repeat: no-repeat!important;

}


.userimg[choice="rock"] {

  background: url(https://adiihd.github.io/rock-paper-scissors-game/img/rock.png);

}

.userimg[choice="paper"] {

  background: url(https://adiihd.github.io/rock-paper-scissors-game/img/paper.png);

}

.userimg[choice="scissors"] {

  background: url(https://adiihd.github.io/rock-paper-scissors-game/img/scissors.png);

}


@keyframes rockpaperscissors {

  0% {

    background: url(https://adiihd.github.io/rock-paper-scissors-game/img/rock.png);

  }

  33.2% {

    background: url(https://adiihd.github.io/rock-paper-scissors-game/img/rock.png);

  }

  33.3% {

    background: url(https://adiihd.github.io/rock-paper-scissors-game/img/paper.png);

  }

  66.5% {

    background: url(https://adiihd.github.io/rock-paper-scissors-game/img/paper.png);

  }

  66.6% {

    background: url(https://adiihd.github.io/rock-paper-scissors-game/img/scissors.png);

  }

  99.9% {

    background: url(https://adiihd.github.io/rock-paper-scissors-game/img/scissors.png);

  }

  100% {

    background: none;

  }

}

<div class="imageHolder">

  <div class="userimg"></div>

  <img class="spacerimg" src="https://adiihd.github.io/rock-paper-scissors-game/img/rock.png">

</div>

<br>

<button id="Rock">Rock</button>

<button id="Paper">Paper</button>

<button id="Scissors">Scissors</button>


注意:我必須編寫額外的關鍵幀以防止背景之間的動畫(它們在彼此之間淡出)。但是您可能需要動畫,因此如果您刪除每個奇數關鍵幀,您將擁有更少的 CSS 并且它們將在彼此之間進行動畫處理。


查看完整回答
反對 回復 2022-10-13
  • 1 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號