CSS3和JS:每点击90°到一个完整的圆圈
CSS3 and JS: Rotation on click per 90° to a full circle?
这可能是一个简单的问题,但……我不知道。
<a href="#" id="line">|</a>
单击将#line
旋转90°的链接时,我切换类active
。如果再次移除该类,#line
将旋转回0°。
我想知道如何使它在一个完整的圆圈内旋转?
所以我第一次点击它,它向右旋转90°。如果我再次单击它,它会向后(向左)旋转到0°。然而,我希望它再次向右旋转,直到达到180°。等等所以它应该在一个完整的圆圈内旋转。
http://jsfiddle.net/5mCTd/2/
简单,请在此处查看。
var angle = 90;
$('#line').click(function() {
$(this).css ({
'-webkit-transform': 'rotate(' + angle + 'deg)',
'-moz-transform': 'rotate(' + angle + 'deg)',
'-o-transform': 'rotate(' + angle + 'deg)',
'-ms-transform': 'rotate(' + angle + 'deg)'
});
angle+=90;
});
我已经评论掉了CSS&不需要的JS。如果这不是你想要的效果,一定要告诉我。希望能有所帮助。:)
最简单的方法:使用JavaScript。每次将旋转量增加90,并将元素的内联样式设置为新的旋转量。
最大的问题是,理论上你希望它从270到360,而不是0。所以仅仅设置四个类(0,90,180,270,…呃…0)是没有帮助的。
这里的棘手部分(感谢Anthony Mills指出)是从270到360的过渡——你不能简单地返回到0,你必须转到360、450等。因此,我们需要取当前角度,并始终将其添加90。
尝试从transform
属性中获取当前角度并将其添加90是不值得的,因为浏览器将转换存储为矩阵,您必须从矩阵中反向工程角度(不是很难,而且有脚本可以做到这一点,但为什么要麻烦呢?)
相反,我将使用N、E、W、S(北、东、西和南)来表示州,这样你就知道字母来自哪里。默认值为N,因此…
<a href="#" id="line" class="N" data-turns="0">|</a>
然后是一些jQuery。我使用该类来计算当前角度,因此不必将矩阵从transform
反转。
$('#line').click(function() {
var rot = 360 * $(this).attr('data-turns');
switch ($(this).attr('class'))
{
case 'N':
rot += 0;
$(this).removeClass('N').addClass('E');
break;
case 'E':
rot += 90;
$(this).removeClass('E').addClass('S');
break;
case 'S':
rot += 180;
$(this).removeClass('S').addClass('W');
break;
case 'W':
rot += 360;
$(this).attr('data-turns', $(this).attr('data-turns') + 1);
$(this).removeClass('W').addClass('N');
break;
default:
$(this).attr('class', 'N');
}
$(this).css('transform', 'rotate('+rot+'deg)');
});
请注意,只有在#line
上不使用任何类的情况下,这才有效。如果是,则必须将if
/else if
/else
与hasClass()
一起使用,而不是将switch
与attr('class')
一起使用。实际上,可能有比类更好的字段来存储这些信息(例如HTML5data-
字段);我之所以使用class,是因为它可以更快/更容易地编写CSS和jQuery。
EDIT:为360deg
选项添加了N2
,从而完成旋转。不能100%确定N2
到E
的转换是否会根据需要旋转。感谢安东尼·米尔斯提到这一点。
EDIT2:完全删除了CSS样式,改为基于类和特定的data-
字段(即data-turns
)计算正确的旋转。
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 我如何制作一个JS函数,它可以从相似的原始颜色双向更改为某个颜色
- 如何将变量传递到另一个js文件
- 我怎么能让流星简单模式中的一个字段等于一个js变量,并且仍然让用户填写简单模式的其余部分
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 从另一个JSAppleScript运行另一个JS AppleScript时出现权限错误
- hapi:包括一个js自定义库
- 我们可以在一个js文件中有多个module.exports语句吗
- Java,nashorn访问另一个js文件
- ajax没有;t成功后调用另一个js函数
- 我上传了客户's服务器一个js函数不起作用
- 另一个.js文件中的函数不起作用
- 如何让一个变量从一个控制器到一个js文件,再到一个渲染的分部
- 如何调用另一个js文件中的函数或触发一个自定义事件,该事件将参数作为Jquery中的数据对象传递
- Nodejs:在节点服务器启动时运行一个js文件
- 我想放一个JS函数,它适用于列表的所有元素,但我可以't将其复制到每个元素中
- 声明一个js变量,该变量将被我的2个jsp访问
- 将一个js变量传递给onkeyup输入文本
- 在另一个.js文件中调用js函数
- MongoDB:如何调用另一个JS文件中定义的函数