javascript - 在完成 javascript css 后重复动画

标签 javascript html css animation

我正在制作轮盘游戏,但遇到一个问题,我的“动画”只能玩一次。如何让动画在每次点击时重复播放?

const ball = document.getElementsByClassName("ball-container")[0]
var deg = 1080;

function onClick() {
  ball.removeAttribute('style');
  ball.setAttribute('style', `-webkit-transform: rotate(${deg}deg)`);
}
.container {
  position: relative;
  background-color: lightgray;
  height: 300px;
  width: 300px;
}

.ball-container {
  height: 300px;
  width: 300px;
  -webkit-transition: -webkit-transform 4s ease-out;
  border-radius: 50%;
  background-color: green;
}

.ball {
  position: absolute;
  top: 0;
  left: 45%;
  background-color: black;
  border-radius: 50%;
  height: 30px;
  width: 30px;
}
<h1>Press black circle</h1>

<div class="container">
  <div class="board"></div>
  <div class="ball-container">
    <div onclick="onClick()" class="ball"></div>
  </div>
</div>

最佳答案

您必须在每次运行时更改度数。比如……

var img = document.querySelector('#ball');
    ball.addEventListener('click', onClick, false);
    

    var deg = 0;

    function onClick() {
        this.removeAttribute('style');

        deg += 1080;

        var css = '-webkit-transform: rotate(' + deg + 'deg);';

        this.setAttribute(
            'style', css
        );           
        
    }
.roulette{
  padding-top: 5em;
    padding-left: 5em;
    
}
.roulette img{

    position: absolute;    
    height: 50em;
    

}
.wheel{
    
    
}
.ball{
    z-index: 1;
    
}
.border{
    
    z-index: 1;
}
#ball {
    -webkit-transition: -webkit-transform 4s ease-out;
    z-index: 1;
    
        
}
<h1>Press the ball</h1>
  <div class="roulette">
        <img class="border" src="http://www.mediafire.com/convkey/0a20/z78myz6x2nk17n76g.jpg">
        <img id="ball" src="http://www.mediafire.com/convkey/8eec/69mn483g0moovs66g.jpg">
        <img class="wheel" id="spin2" src="http://www.mediafire.com/convkey/937f/f4f65gia76l409u6g.jpg">

    </div>

或者设置超时以确保属性在添加回来之前被删除:

var img = document.querySelector('#ball');
ball.addEventListener('click', onClick, false);


function onClick() {
  that = this;
  this.removeAttribute('style');

  setTimeout(function() {
    var css = '-webkit-transform: rotate(1080deg);';
    that.setAttribute(
      'style', css
    );
  }, 0);
}
.roulette {
  padding-top: 5em;
  padding-left: 5em;
}

.roulette img {
  position: absolute;
  height: 50em;
}

.wheel {}

.ball {
  z-index: 1;
}

.border {
  z-index: 1;
}

#ball {
  -webkit-transition: -webkit-transform 4s ease-out;
  z-index: 1;
}
<h1>Press the ball</h1>
<div class="roulette">
  <img class="border" src="http://www.mediafire.com/convkey/0a20/z78myz6x2nk17n76g.jpg">
  <img id="ball" src="http://www.mediafire.com/convkey/8eec/69mn483g0moovs66g.jpg">
  <img class="wheel" id="spin2" src="http://www.mediafire.com/convkey/937f/f4f65gia76l409u6g.jpg">

</div>

关于javascript - 在完成 javascript css 后重复动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42375735/

相关文章:

python - 使用 python 提取 CSS 样式声明

php - 当包含标题时,在 PHP 中,您如何添加内容?

javascript - 如何防止 Chrome 在离线时加载缓存的网页?

javascript - 在按下按钮时 react native 显示触摸 ID View (iOS)

css - HTML 元素向右对齐以将左侧空间填充到另一个动态元素

html - 当我向键盘发送垃圾邮件时文本隐藏了

javascript - Ember 中的空参数变量

html - 如何使单击按钮的效果持续 0.5 秒?

javascript - 如何使用 javascript 向 html 表单下拉列表添加选项

html - 带有堆叠单元格的图像 slider