Javascript可以在Safari上运行,但不能在任何其他浏览器上运行
Javascript working on Safari but not on any other browser
我在Javascript中使用requestAnimationFrame
,通过更改其"top"answers"left"CSS属性来移动html div
。它在Safari7.1.2上运行良好,但div
在Firefox、Chrome或Opera上一点也不移动。
疯狂的是,在Chrome和Opera上,如果你拖动窗口的一角(试图改变其大小),div
就会开始移动。。。然后在从角落释放鼠标时立即停止移动。
这是源代码:
<!DOCTYPE html>
<head>
<meta charset="utf-8"/>
<title>exp_2</title>
<link rel="stylesheet" type="text/css" href="exp_1.css">
</head>
<body>
<div class="box_out" id="b1"><p id="menu_text">gallery</p></div>
<script type="text/javascript">
var middle = document.querySelector("body").clientWidth / 2 - 50;
window.addEventListener("resize", function() {
middle = document.querySelector("body").clientWidth / 2 - 50;
});
var div = document.getElementById("b1");
var angle = 0, lastTime = null;
function animate(time)
{
if (lastTime != null)
angle += (time - lastTime) * 0.0002;
lastTime = time;
div.style.top = (150 + Math.sin(angle) * 100) + "px";
div.style.left = (middle + Math.cos(angle) * 100) + "px";
requestAnimationFrame(animate);
}
requestAnimationFrame(animate);
</script>
</body>
</html>
这是我一直在使用的CSS class
和id
:
body
{
text-align: center;
background-color: #232323;
color: white;
}
#menu_text
{
font-family: Trebuchet MS, Helvetica, Arial;
font-size: 1.5em;
padding-top: 2em;
}
.box_out
{
box-shadow: 2px 4px 15px black;
margin-left: auto;
margin-right: auto;
position: absolute;
text-align: center;
width: 6em;
height: 6em;
background-color: #663300;
-webkit-transition: 0.1s ease-out;
-moz-transition: 0.1s ease-out;
-o-transition: 0.1s ease-out;
}
.box_out:hover
{
-webkit-transform: scale(1.4);
-moz-transform: scale(1.4);
-o-transform: scale(1.4);
-ms-transform: scale(1.4);
}
requestAnimationFrame
是问题还是我的CSS有兼容性问题?我甚至尝试将clientWidth
的事件侦听器排除在外,但问题似乎并不存在。
问题是您的转换CSS导致它无法运行:
-webkit-transition: 0.1s ease-out;
-moz-transition: 0.1s ease-out;
-o-transition: 0.1s ease-out;
http://jsfiddle.net/xs40d7dd/
我不熟悉requestAnimationFrame,但我猜测它是一种转换的替代方式(通过JS而不是CSS)。如果你想使用transition
CSS,我建议你只设置顶部/左侧,而不使用requestAnimationFrame。
如果你在其他动画帧上运行它,它在Firefox中的效果会更好:
var div = document.getElementById("b1");
var angle = 0, lastTime = null, toggle = false;
function animate(time)
{
toggle = !toggle;
if (!toggle) {
var oldangle = angle;
if (lastTime != null)
angle += (time - lastTime) * 0.0002;
lastTime = time;
div.style.top = (150 + Math.sin(angle) * 100) + "px";
div.style.left = (middle + Math.cos(angle) * 100) + "px";
}
requestAnimationFrame(animate);
}
requestAnimationFrame(animate);
忘记供应商前缀的有用工具:
https://leaverou.github.io/prefixfree/
非常有用,只需调用脚本,无需-o -moz -webkit
相关文章:
- PhantomJS - 检查javascript函数是否正在运行的任何方法
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- 找不到在 create-js 中运行的动画,未列出任何错误
- 漂亮的照片在Dreamweaver上完美运行;但不能在任何浏览器上在线工作
- 如何从Node.js运行gullow任务-gullow.start()的任何更好的替代方案
- 使用ajax运行php脚本不会显示任何结果
- 如果发现任何数据,如何停止每7秒运行一次的函数
- Firefox附加组件:cfx-run运行良好,cfx-xpi运行良好,但附加组件没有任何作用
- 自定义Angular.js过滤器在IE8中不返回任何内容,在Chrome/FF中运行良好
- JavaScript无法在我机器上的任何浏览器上运行
- Object.defineProperty()在测试(jpm运行)过程中有效,但不起作用;使用实际xpi时,不要执行任何
- PhantomJS在使用命令行运行任何js时都会出现分段错误
- 如何检测浏览器是否正在运行任何javascript(不更改页面上的js)
- 浏览器中不运行任何东西
- 不能运行任何JS相关的东西.MVC页面
- jQuery插件错误在IE6/7,试图运行任何未使用的键被按下.如何战斗
- 主干集合取回在成功调用中不运行任何东西,但是取回所有的东西
- Magento附加javascript但没有运行任何函数(消息未定义)
- 在webkit浏览器中调用location.replace后,无法运行任何异步ajax请求
- MS CRM 2011汇总12〃;语法错误“;运行任何报告时