我正在尝试创建一个页面,其中屏幕中间有一条黑线,当我在x轴上移动鼠标时,该线应该倾斜-随着时间的流逝,它应该越来越倾斜,直到最终达到90度
到目前为止,这是我的代码,警告javascript有while(true)循环,可能导致浏览器冻结:https://jsfiddle.net/79ggc2hp/
在此处复制粘贴代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>XYZ</title>
<style>
body, html {
height: 100%;
}
</style>
</head>
<body>
<svg height="100%" width="100%">
<line x1="50%" y1="50%" x2="50%" y2="90%" style="stroke:rgb(0,0,0);stroke-width:10" />
</svg>
<script>
var pressureFactor = 10;
var randomizerCorrection = 0;
var randomizer = 0;
var swingfactor = 1;
var time = 0;
var cursorX;
document.onmousemove = function(e){
cursorX = e.clientX;
}
while (true) {
if (randomizerCorrection < randomizer) {
randomizerCorrection = randomizerCorrection + 0.1;
}
if (randomizerCorrection > randomizer) {
randomizerCorrection = randomizerCorrection - 0.1;
}
var Faktor = ((cursorX / 40) - 10) + (this._rotation / pressureFactor);
this._rotation = this._rotation + Faktor + randomizerCorrection * swingfactor;
rotationLine = this._rotation;
if (rotationLine > 90) {
this._rotation = 90;
}
if (rotationLine < (-90)) {
this._rotation = (-90);
}
pressureFactor = pressureFactor - 1;
if (pressureFactor == 1) {
pressureFactor = 1;
swingfactor =+ 1;
}
randomizer = Math.random(5) - 2;
time = time + 1;
}
</script>
</body>
</html>
您可能会看到,事情无法正常运行,但是我有点纠结于解决问题的地方-因为其中一些内容是复制粘贴通过Google和
rotationLine = this._rotation
最后应该旋转线。
最佳答案
该while循环没有中断条件,因此它将无限运行,并且浏览器中不会呈现任何内容。您可能会误解代码和渲染之间的交互方式。当javascript代码完成运行时,浏览器将更新框架并渲染屏幕。但是您的代码永远不会停止运行。认为它需要“露面”。我将省略关于在多线程环境中可以执行此操作的其他方法的讲义,现在,仅指出您需要停止代码,让浏览器呈现,然后再次启动代码。
过去的传统做法是用一个简单的setInterval替换while循环:
setInterval(function() {
if (randomizerCorrection < randomizer) {
randomizerCorrection = randomizerCorrection + 0.1;
}
if (randomizerCorrection > randomizer) {
randomizerCorrection = randomizerCorrection - 0.1;
}
[etc...]
}, 13) // where the second argument is the number of milliseconds between calls.
新的学校方法是使用requestAnimationFrame,但是我现在才开始使用setInterval,直到您习惯了这些概念。