【问题标题】:Can we use += to transform:rotate( 'x'deg); css property via Javascript我们可以使用 += 来变换吗:rotate('x'deg);通过 Javascript 的 css 属性
【发布时间】:2015-11-02 22:40:06
【问题描述】:

这是我的代码:

#move{
	height:70px;
	width:70px;
	border:2px solid black;
    border-radius:15px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

		<input type="button" value="Move Right" onclick="
		$('#move').css({'background-color':'aqua'});
		$('#move').css({'position':'absolute',
                               'transition':'500ms ease-in-out',
                               'right':'-=50px',
                               'transform':'rotate(+=5deg)'});
		"></input>
        
        <br>
        OBJECT
        <br>
		<div id="move"></div>

我的问题是这样的:

每次单击“向右移动”按钮时,是否可以通过将 += 等运算符添加到 CSS 属性中的 rotate 值,使我的 div 移动和旋转 +5 度,如下所示:

'transform':'rotate(+=5deg)' 

【问题讨论】:

  • 你为什么不试试看它是否有效?我不认为它会......
  • 已经在这里回答了 - stackoverflow.com/questions/5462275/…
  • 你可以做纯JS或者纯CSS动画,否则你可以创建不同的CSS类如rotate5rotate10rotate15 ...并使用Js来切换它们

标签: javascript jquery css transform


【解决方案1】:

注意transform 属性可以有不同的值,它们是不可交换的。例如,以下值会产生不同的结果:

transform: translateX(100px) rotate(90deg); /* This is different... */
transform: rotate(90deg) translateX(100px); /* ... than this!       */

.box {
  height: 100px;
  width: 100px;
  background: red;
}
#box1 {
  transform: translateX(100px) rotate(90deg);
}
#box2 {
  transform: rotate(90deg) translateX(100px);
}
<div class="box" id="box1"></div>
<div class="box" id="box2"></div>

有人可能认为旋转45deg 更多会是

transform: translateX(100px) rotate(135deg); /* OK    */
transform: rotate(135deg) translateX(100px); /* FAIL! */

.box {
  height: 100px;
  width: 100px;
  background: red;
}
#box1 {
  transform: translateX(100px) rotate(135deg);
}
#box2 {
  transform: rotate(135deg) translateX(100px);
}
<div class="box" id="box1"></div>
<div class="box" id="box2"></div>

但是,这仅适用于第一个示例,因为 rotate 是最后一个转换函数。一般来说,正确的方法是

transform: translateX(100px) rotate(90deg) rotate(45deg); /* OK */
transform: rotate(90deg) translateX(100px) rotate(45deg); /* OK */

.box {
  height: 100px;
  width: 100px;
  background: red;
}
#box1 {
  transform: translateX(100px) rotate(90deg) rotate(45deg);
}
#box2 {
  transform: rotate(90deg) translateX(100px) rotate(45deg);
}
<div class="box" id="box1"></div>
<div class="box" id="box2"></div>

然后,你可以添加这个方法:

$.fn.addTransform = function(val) {
  return this.each(function() {
    var tr = $(this).css('transform');
    if(tr === 'none') tr = '';
    $(this).css('transform', tr + ' ' + val);
  });
};

并像使用它

$('#move').addTransform('rotate(5deg)');

$.fn.addTransform = function(val) {
  return this.each(function() {
    var tr = $(this).css('transform');
    if(tr === 'none') tr = '';
    $(this).css('transform', tr + ' ' + val);
  });
};
$('input').click(function() {
  $('#move').css({
    backgroundColor: 'aqua',
    position: 'absolute',
    transition: '500ms ease-in-out',
    right: '-=50px'
  }).addTransform('rotate(5deg)');
});
#move {
  height: 70px;
  width: 70px;
  border: 2px solid black;
  border-radius: 15px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="button" value="Move Right" />
<div id="move"></div>

【讨论】:

  • 哇!非常感谢 !感谢您的友好回复和帮助!这正是我想要的。
猜你喜欢
  • 2018-03-08
  • 1970-01-01
  • 2011-04-12
  • 2018-10-06
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 2019-02-20
  • 2021-12-25
相关资源
最近更新 更多