【问题标题】:JavaScript NaN issue on click单击时出现 JavaScript NaN 问题
【发布时间】:2016-12-09 13:33:30
【问题描述】:

我有以下脚本:

function rotateFoo(current) {
  var angle = (current.data('angle') + 90);
  current.data('angle', angle);
  console.log('angle: ', angle);
  current.css({
    'transform': 'rotate(' + angle + 'deg)'
  });

  current.data('angle1', angle);
}

$(document).ready(function() {
  function generateNumb() {
    var start = [0, 90, 180, 270];
    var start = start[Math.floor(Math.random() * 4)];
    return start;
  }

  $('.foo').each(function() {
    $(this).css({
      'transform': 'rotate(' + generateNumb() + 'deg)'
    });
  });

  $('.foo').on('click', function() {
    rotateFoo($(this));
  });
});
.wrapper {
  width: 306px;
  border: 3px solid black;
  margin: 50px auto 0;
  overflow: hidden;
}
.foo {
  width: 100px;
  height: 70px;
  background-color: #faa;
  transition: all .5s ease;
  float: left;
  cursor: pointer;
  text-align: center;
  padding-top: 30px;
  border: 1px solid #fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<section class="wrapper">
  <div class="foo">1</div>
  <div class="foo">2</div>
  <div class="foo">3</div>

  <div class="foo">4</div>
  <div class="foo">5</div>
  <div class="foo">6</div>

  <div class="foo">7</div>
  <div class="foo">8</div>
  <div class="foo">9</div>
</section>

<p>
</p>

这是一个非常简单的益智游戏原型。 https://jsfiddle.net/dg0ugws1/70/

它从每个图块的随机角度开始。但是当我点击它时,我想将它顺时针旋转 90 度。

但是我的 console.log 抛出了这个错误:

angle:  NaN

【问题讨论】:

  • 请记住将所有相关代码放入问题中
  • 什么设置初始data-angle 值?
  • 你没有在任何地方设置data-angle的初始值
  • @Liam 使用所有 CSS 创建 sn-p 为问题添加了一堆不相关的代码。有小提琴很好,因为 JavaScript 是问题所在。
  • @Liam CSS 无关紧要。与所有.foos 一样,您最多只需要两个。

标签: javascript


【解决方案1】:

这是因为在初始旋转时,您没有将任何 data('agle') 设置为元素,并且在单击时会得到 undefined + 90

function rotateFoo(current){
		
    var angle = (current.data('angle') + 90);
    current.data('angle', angle);
    console.log('angle: ', current.data('angle'));
    current.css({'transform': 'rotate(' + angle + 'deg)'});
    
    current.data('angle1', angle);
}

$(document).ready(function(){
	  
    function generateNumb() {
    var start = [0, 90, 180, 270];
    	var start = start[Math.floor(Math.random() * 4)];
      
      return start;
    }
  	
  $('.foo').each(function(){
        var angle = generateNumb();
		$(this).css({'transform': 'rotate(' + angle + 'deg)'}).data('angle', angle);
  });
  
  $('.foo').on('click', function(){
    rotateFoo($(this));
  });
  
});
body {
    font-family: sans-serif;
}

button {
  width: 180px;
  height: 80px;
  padding: 10px;
  cursor: pointer;
  font-size: 20px;
}

.wrapper {
  width: 306px;
  border: 3px solid black;
  margin: 50px auto 0;
  overflow: hidden;
}

.foo {
    width:100px;
    height:70px;
    background-color:#faa;
    transition: all .5s ease;
    float: left;
    cursor: pointer;
    text-align: center;
    padding-top: 30px;
    border: 1px solid #fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<section class="wrapper">
<div class="foo">1</div>
<div class="foo">2</div>
<div class="foo">3</div>

<div class="foo">4</div>
<div class="foo">5</div>
<div class="foo">6</div>

<div class="foo">7</div>
<div class="foo">8</div>
<div class="foo">9</div>
</section>

<p>
</p>

【讨论】:

    【解决方案2】:

    你只需要改变这个

        $('.foo').each(function(){
          $(this).css({'transform': 'rotate(' + generateNumb() + 'deg)'});
        });
    

       $('.foo').each(function(){
          var ang =  generateNumb();
          $(this).css({'transform': 'rotate(' + ang + 'deg)'});
          $(this).data('angle', ang);
       });
    

    这样角度值就设置好了。

    【讨论】:

    • 这就是 CSS 转换的样子。这只不过是字符串连接。将函数的结果移动到变量中丝毫不会改变操作。
    • @Dave Newton,你弄错了,我使用了变量,以便我们也可以对 css 和数据属性使用相同的随机值。这里缺少的主要内容是第一次不要在数据中设置角度属性。
    • 啊,我明白了。明白了。
    猜你喜欢
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 2011-11-27
    相关资源
    最近更新 更多