如何使javascript形状与图像中的形状相同,以及动画结束后如何清除javascript画布形状?

john_snow5214

我将这段代码调整为三角形。它使用JavaScript动画来渲染三角形,但是我不能让它移动到设置图像的位置,而是移动太多,并且如果我调整数字,它将不能很好地到达图像中的三角形,并且不能以直角。

此刻,我需要黑色动画三角形与白色图像处于相同的角度,并且黑色三角形也必须移至相同的位置,这意味着三角形必须与图像上的白色完全相同。

另外,我在按下按钮时就拥有了全部功能,那么如何清除javascript形状,然后在调用该形状时又会产生相同的动画?删除按钮必须删除黑色三角形,并且再次按下“开始动画”按钮时,三角形将调用StartAnimation();。功能。

我该怎么做才能达到完美的效果?

	function StartAnimation() {

		let
		canvas = document.getElementById('canvas');
		let
		ctx = canvas.getContext('2d');
		let
		initCoor = {
			x1 : ctx.canvas.width,
			y1 : 0,

			x2 : ctx.canvas.width,
			y2 : ctx.canvas.height / 2,

			x3 : ctx.canvas.width,
			y3 : ctx.canvas.height / 2,

			x4 : (ctx.canvas.width - ctx.canvas.width / 5),
			y4 : 0,

		};
		function initCanvas() {
			ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
			ctx.fillStyle = 'transparent';
			ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);

		}
		function draw_triangle(x1, y1, x2, y2, x3, y3, x4, y4, color) {
			ctx.save();
			ctx.beginPath();
			ctx.moveTo(x1, y1);
			ctx.lineTo(x1, y1);
			ctx.lineTo(x2, y2);
			ctx.lineTo(x3, y3);
			ctx.lineTo(x4, y4)
			ctx.fillStyle = color;
			ctx.fill();
		}
		function setAnimate() {

			initCoor.x4 <= 0 ? initCoor.x4 = 0 : initCoor.x4 -= 10;
			a = true;

			if (a) {

				if (initCoor.y2 >= ctx.canvas.height
						&& initCoor.y3 >= ctx.canvas.height) {

					initCoor.y2 = ctx.canvas.height;
					initCoor.y3 = ctx.canvas.height;
					if (initCoor.x3 <= 300) {
						initCoor.x3 = 300;
						window.clearInterval(int);
					} else {
						initCoor.x3 -= 10;
					}

				} else {
					initCoor.y2 += 40;
					initCoor.y3 += 40;
				}
				draw_triangle(initCoor.x1, initCoor.y1, initCoor.x2,
						initCoor.y2, initCoor.x3, initCoor.y3, initCoor.x4,
						initCoor.y4, '#000');
			}
		}

		initCanvas();
		draw_triangle(initCoor.x1, initCoor.y1, initCoor.x2, initCoor.y2,
				initCoor.x3, initCoor.y3, initCoor.x4, initCoor.y4, '#000');

		let
		int = window.setInterval(setAnimate, 50);
	}
body {
  background-color: lightblue;
}
#canvascontainer
{
	position: absolute;
	width: 360px;
	height: 360px;
  z-index: 2;
}
#image
{
	position: absolute;
	width: 360px;
	height: 360px;
  z-index: 3;
}
#canvascontainer2
{
	position: absolute;
	width: 360px;
  left: 300px;
	height: 360px;
  z-index: 2;
}
      <html>
<body>
      <h2>This is the problem</h2>
     <button type="button" onclick="StartAnimation();">Start animation</button> 
     <button type="button">Remove shape(how to)</button> 
      <div id="image">
       <img src="https://cdn1.imggmi.com/uploads/2019/10/23/8148aef0f880ccf35a2a78c083c40383-full.png">
       </div>
       <div id="canvascontainer">
			<canvas id="canvas" width="360" height="360">
		</canvas>
		</div>
           <div id="canvascontainer2">
			<canvas id="canvas2" width="360" height="360">
		</canvas>
		</div>
    </body>
</html>

Stratubas

看一看。我简化了您的动画逻辑。我制成了所需形状的巨大梯形。它在屏幕外启动,只需将其翻译到左侧即可。

我还制作了“重置”按钮,将其移到initCanvas()外部StartAnimation(),并在按下该按钮时调用它。

这可能不完全是您想要的结果,但是我认为从这一点上您可以更轻松地继续。

function initCanvas() {
    const canvas = document.getElementById('canvas');
    const ctx = canvas.getContext('2d');
    ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
    ctx.fillStyle = 'transparent';
    ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
}

function StartAnimation() {

    let canvas = document.getElementById('canvas');
    let ctx = canvas.getContext('2d');
    let initCoor = {
        x1: ctx.canvas.width,
        y1: 0,

        x2: (4 / 3) * ctx.canvas.width,
        y2: ctx.canvas.height,

        x3: (5 / 3) * ctx.canvas.width,
        y3: ctx.canvas.height,

        x4: (5 / 3) * ctx.canvas.width,
        y4: 0,

    };
    function draw_triangle(x1, y1, x2, y2, x3, y3, x4, y4, color) {
        ctx.save();
        ctx.beginPath();
        ctx.moveTo(x1, y1);
        ctx.lineTo(x1, y1);
        ctx.lineTo(x2, y2);
        ctx.lineTo(x3, y3);
        ctx.lineTo(x4, y4)
        ctx.fillStyle = color;
        ctx.fill();
    }
    function setAnimate() {
        initCoor.x1 -= 10;
        initCoor.x2 -= 10;
        initCoor.x3 -= 10;
        initCoor.x4 -= 10;
        if (initCoor.x2 <= 100) { window.clearInterval(int); }
        draw_triangle(initCoor.x1, initCoor.y1, initCoor.x2,
            initCoor.y2, initCoor.x3, initCoor.y3, initCoor.x4,
            initCoor.y4, '#000');
    }

    initCanvas();
    draw_triangle(initCoor.x1, initCoor.y1, initCoor.x2, initCoor.y2,
        initCoor.x3, initCoor.y3, initCoor.x4, initCoor.y4, '#000');

    let int = window.setInterval(setAnimate, 50);
}
body {
  background-color: lightblue;
}
#canvascontainer
{
	position: absolute;
	width: 360px;
	height: 360px;
  z-index: 2;
}
#image
{
	position: absolute;
	width: 360px;
	height: 360px;
  z-index: 3;
}
#canvascontainer2
{
	position: absolute;
	width: 360px;
  left: 300px;
	height: 360px;
  z-index: 2;
}
      <html>
<body>
      <h2>This is the problem</h2>
     <button type="button" onclick="StartAnimation();">Start animation</button> 
     <button type="button" onclick="initCanvas();">Remove black shape</button> 
      <div id="image">
       <img src="https://cdn1.imggmi.com/uploads/2019/10/23/8148aef0f880ccf35a2a78c083c40383-full.png">
       </div>
       <div id="canvascontainer">
			<canvas id="canvas" width="360" height="360">
		</canvas>
		</div>
           <div id="canvascontainer2">
			<canvas id="canvas2" width="360" height="360">
		</canvas>
		</div>
    </body>
</html>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在画布上排序形状 - JavaScript

来自分类Dev

清除画布形状中的文本

来自分类Dev

重绘画布时如何防止形状拖尾-Javascript

来自分类Dev

Javascript动画-SVG形状消失

来自分类Dev

单击使用Javascript后如何使形状改变颜色?

来自分类Dev

具有公共边界的形状填充后的Javascript画布间隙

来自分类Dev

在Google地图中重绘地图后如何清除形状?

来自分类Dev

如何在CSS或Javascript中制作弯曲的线条形状

来自分类Dev

如何在JavaScript中实现像素内形状算法

来自分类Dev

如何在CSS或Javascript中制作弯曲的线条形状

来自分类Dev

如何使用for循环javascript制作形状

来自分类Dev

如何在WPF中从“画布”中删除特殊形状?

来自分类Dev

如何更改画布中特定形状的属性?

来自分类Dev

如何扩展由许多贝塞尔曲线(JavaScript和画布)创建的形状

来自分类Dev

如何检测透明画布上的形状?

来自分类Dev

如何为绘制的画布形状设置ID?

来自分类Dev

如何用matplotlib填充动画形状?

来自分类Dev

识别图像中的形状

来自分类Dev

如何用画布创建一个永无休止的动画形状循环?

来自分类Dev

如何在自定义形状xml中添加图像

来自分类Dev

如何用工作表中的形状填充图像列表?

来自分类Dev

如何从图像中裁剪多项式形状

来自分类Dev

如何在Phaser 3中更改图像的Hitbox形状?

来自分类Dev

如何使用PIL从图像中裁剪自定义形状?

来自分类Dev

如何在自定义形状xml中添加图像

来自分类Dev

如何在Android中的形状的右侧设置背景图像

来自分类Dev

如何更改类似于Android中的图像的相对布局形状

来自分类Dev

在emgu 3.0.0.0中纠正形状后如何获取像素的坐标?

来自分类Dev

添加新形状后画布不渲染形状

Related 相关文章

  1. 1

    如何在画布上排序形状 - JavaScript

  2. 2

    清除画布形状中的文本

  3. 3

    重绘画布时如何防止形状拖尾-Javascript

  4. 4

    Javascript动画-SVG形状消失

  5. 5

    单击使用Javascript后如何使形状改变颜色?

  6. 6

    具有公共边界的形状填充后的Javascript画布间隙

  7. 7

    在Google地图中重绘地图后如何清除形状?

  8. 8

    如何在CSS或Javascript中制作弯曲的线条形状

  9. 9

    如何在JavaScript中实现像素内形状算法

  10. 10

    如何在CSS或Javascript中制作弯曲的线条形状

  11. 11

    如何使用for循环javascript制作形状

  12. 12

    如何在WPF中从“画布”中删除特殊形状?

  13. 13

    如何更改画布中特定形状的属性?

  14. 14

    如何扩展由许多贝塞尔曲线(JavaScript和画布)创建的形状

  15. 15

    如何检测透明画布上的形状?

  16. 16

    如何为绘制的画布形状设置ID?

  17. 17

    如何用matplotlib填充动画形状?

  18. 18

    识别图像中的形状

  19. 19

    如何用画布创建一个永无休止的动画形状循环?

  20. 20

    如何在自定义形状xml中添加图像

  21. 21

    如何用工作表中的形状填充图像列表?

  22. 22

    如何从图像中裁剪多项式形状

  23. 23

    如何在Phaser 3中更改图像的Hitbox形状?

  24. 24

    如何使用PIL从图像中裁剪自定义形状?

  25. 25

    如何在自定义形状xml中添加图像

  26. 26

    如何在Android中的形状的右侧设置背景图像

  27. 27

    如何更改类似于Android中的图像的相对布局形状

  28. 28

    在emgu 3.0.0.0中纠正形状后如何获取像素的坐标?

  29. 29

    添加新形状后画布不渲染形状

热门标签

归档