canvas-画折线

代码:

		var canvas = document.getElementById('canvas');
		var ctx = canvas.getContext('2d');

		var offset = 100;

		function createGradient(ctx, x0, y0, x1, y1) {
			var grd = ctx.createLinearGradient(x0, y0, x1, y1);
			//设置动画矩形的渐变色
			grd.addColorStop(0, '#49c3f5'); 
			grd.addColorStop(0.6, "#f0f0f0");
			return grd;
		}
		
		function createGradient2() {
			var grii = ctx.createLinearGradient(100,0,1200,0);
			grii.addColorStop(0,'#0a2f5f');
			grii.addColorStop(1,'#84b2ac');
			return grii;
		}

		function animate() {

			ctx.fillRect(0, 0, canvas.width, canvas.height); // 填充一个矩形
			var gri = ctx.createLinearGradient(0,0,0,100);//设置这个矩形的渐变色,从上到下
			gri.addColorStop(0,'#052144');
			gri.addColorStop(1,'#707e8f');
			ctx.fillStyle=gri; //填充矩形的颜色 
			ctx.lineWidth = 3;//设置线条的宽度
			
			ctx.save(); //canvas状态存储

			ctx.beginPath(); //开启路径
			ctx.moveTo(0, 70); //点 1
			ctx.lineTo(367, 70); //点2
			ctx.lineTo(390, 30); //点3
			ctx.lineTo(1240,30); //点4 
			ctx.strokeStyle = createGradient2();
			ctx.stroke(); // 绘制

			ctx.beginPath();
			ctx.rect(offset-126, 0, offset-100,100); // 动态矩形路径的起点横坐标,起点纵坐标,矩形的宽度,矩形的高度
			ctx.clip();
			ctx.beginPath(); //开启路径,和上面的路径分开
			ctx.moveTo(0, 70); //点 1
			ctx.lineTo(367, 70); //点2
			ctx.lineTo(390, 30); //点3
			ctx.lineTo(1240,30); //点4 
			ctx.strokeStyle = createGradient(ctx, offset-60, 0, offset + 660, 0); //设置渐变色
			ctx.lineCap = "round";//设置线段两端的端点是圆形的
			ctx.stroke(); //绘制

			ctx.restore(); //canvas状态恢复

			offset += 2; // 控制动态矩形的变化速度
			if(offset > 1440) { //控制动态矩形在什么位置消失
				offset = 100;
			}
			requestAnimationFrame(animate);
		}

		animate();

效果图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是用Canvas实现折线图并且有鼠标hover显示值的示例代码: HTML代码: ```html <canvas id="canvas" width="400" height="300"></canvas> ``` JavaScript代码: ```javascript // 获取Canvas元素 const canvas = document.getElementById('canvas'); const ctx = canvas.getContext('2d'); // 数据 const data = [10, 20, 30, 40, 50, 60, 70]; // 绘制折线图 ctx.beginPath(); ctx.moveTo(0, canvas.height - data[0]); for (let i = 1; i < data.length; i++) { const x = canvas.width * i / data.length; const y = canvas.height - data[i]; ctx.lineTo(x, y); } ctx.stroke(); // 鼠标hover事件 canvas.addEventListener('mousemove', function (event) { // 获取Canvas元素的尺寸 const rect = canvas.getBoundingClientRect(); const scaleX = canvas.width / rect.width; const scaleY = canvas.height / rect.height; // 获取鼠标位置相对于Canvas元素的坐标 const x = (event.clientX - rect.left) * scaleX; const y = (event.clientY - rect.top) * scaleY; // 判断鼠标位置是否在折线图上 const index = Math.floor(x / (canvas.width / data.length)); if (index >= 0 && index < data.length) { // 显示值 const value = data[index]; ctx.font = '14px Arial'; ctx.fillStyle = '#000'; ctx.fillText(value, x, canvas.height - value - 10); } }); ``` 在上述代码中,我们先通过`moveTo()`和`lineTo()`方法绘制折线图,然后在鼠标移动事件的回调函数中判断鼠标位置是否在折线图上,并在鼠标位置上显示对应的数据值。 需要注意的是,在显示数据值时,我们可以使用`fillText()`方法将数据值绘制Canvas中,但是需要注意数据值的位置和字体、颜色等属性的设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值