javascript - html 中的行收缩和展开

标签 javascript html html5-canvas

我想制作一条沿x轴随机收缩和扩展的线,它应该从 Canvas 的中间开始。我只能以一种方式移动线路,不能双向移动!我有代码,如果您能帮助我,我将非常感激!

<!DOCTYPE html>

<style>
    canvas {
        border: solid;
        border-color: black; }
</style>

<canvas id="canvas">
</canvas>
<script>

    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext("2d");
    ctx.strokeStyle = "black";
    var posX = 0;
    var lineLength = 50;
    var speed = 2;

    function drawLine() {
        ctx.beginPath();
        ctx.moveTo(posX, 50);
        ctx.lineTo(posX + lineLength, 50);
        ctx.stroke();
    }

    function moveLine() {
        posX += speed;
        if (posX < 0 || posX > canvas.width - 50) {
            speed = speed * -1;
        }
    }

    function loop() {
        // clear old frame;
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        moveLine();
        drawLine();
        requestAnimationFrame(loop);
    }
    requestAnimationFrame(loop);
</script>

最佳答案

您想要修改循环中的lineLength 值,而不是posX。像这样:

function moveLine() {
    lineLength += speed;
    if (lineLength < 0 || lineLength > canvas.width - 50) {
        speed = speed * -1;
    }
}

然后你只需要将线居中:

function drawLine() {
    var center = canvas.width/2;
    ctx.beginPath();
    ctx.moveTo(center - (lineLength/2), 50);
    ctx.lineTo(center + (lineLength/2), 50);
    ctx.stroke();
}

由于线条的 X 位置不可变,因此根本不需要 posX

关于javascript - html 中的行收缩和展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52283509/

相关文章:

javascript - 带表的jQuery如何计算用户输入值的总和?

javascript - 在同一域的 iframe 之间共享对象

javascript - 如何只触发一次服务器发送的事件?

javascript - 两次按键不同功能运行

javascript - 如何在 React.js 中渲染变量组件

javascript - 告诉 TypeScript 文件将包含在脚本标签中?

html - CSS counter-increment - 从 100 开始计数器

javascript - 如何在 Javascript 中获取图像颜色模式(CMYK、RGB ...)

javascript - Canvas 宽度/高度更改时, Canvas 上下文会重置

javascript - HTML5 Canvas 位图