canvas动态画一条不同颜色的线

本文介绍了如何使用HTML5 Canvas动态地画出颜色不同的线条。在解决问题的过程中,文章详细阐述了从非动态绘制到动态绘制的思路,特别是如何避免在绘制第二条线时使第一条线消失的技巧,通过在循环中加入长度判断来实现线条的连续显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

##使用canvas动态画一条颜色不同的线,即前五个点连成一条黑线后五个点连成一条红线,并且动态呈现。

思路呈现

首先,了解非动态画一条不同颜色的线。
在这里插入图片描述

代码展示:


    <script>
         //demo1 不渐变线条
 var c = document.getElementById("myCanvas");
  var ctx = c.getContext("2d"); 
  ctx.moveTo(0,0);   
  ctx.lineTo(50,0);  
  ctx.strokeStyle = "blue";    //设定描边颜色为蓝色
  ctx.stroke();  
  
  ctx.beginPath();  //告诉canvas咱们要重新绘制一条全新的路径了,之前画的东西从此再无关系
  ctx.moveTo(50,0); 
  ctx.lineTo(150,0);  
  ctx.strokeStyle = "yellow";    //设定描边颜色为红色
  ctx.stroke();  

  ctx.beginPath();  //告诉canvas咱们要重新绘制一条全新的路径了,之前画的东西从此再无关系
  ctx.moveTo(150,0); 
  ctx.lineTo(200,0);  
  ctx.strokeStyle = "blue";    //设定描边颜色为红色
  ctx.stroke();  
  </script>

动态画线,不外乎循环遍历点,在点之间连线。(稍后附上代码)

遇到的问题

##if判断点的长度是不是大于某位数,再for循环遍历,这样做就会使得前面画的线在第二条线出现时就消失了。

解决办法

##在for循环里加长度判断

代码

 
 var options = this.trackLineOptions;
    var tp0 = this._map.latLngToLayerPoint(L.latLng(trackpoints[0].lat, trackpoints[0].lng));
    this._ctx.save();
    this._ctx.beginPath();//开始

    // 画轨迹线
    this._ctx.moveTo(tp0.x, tp0.y);
    for (var i = 1, len = trackpoints.length; i < len; len<=15,i++) {
      var tpi = this._map.latLngToLayerPoint(L.latLng(trackpoints[i].lat, trackpoints[i].lng));
      this._ctx.lineTo(tpi.x, tpi.y); 
      this._ctx.strokeStyle = options.color; //设定描边颜色为红色
      this._ctx.lineWidth = options.weight;   
      this._ctx.stroke(); 
     //把上一个的最后一个点保存下来
      if(i==15){
      var tp15=this._map.latLngToLayerPoint(L.latLng(trackpoints[15].lat, trackpoints[15].lng));
      this._ctx.save();
      this._ctx.beginPath();
      this._ctx.moveTo(tp15.x,tp15.y); //从上一个点的结束开始
      for(var i=16,len=trackpoints.length;i<len;len<=21,i++){
       var tpi = this._map.latLngToLayerPoint(L.latLng(trackpoints[i].lat, trackpoints[i].lng));
     this._ctx.lineTo(tpi.x, tpi.y); 
      this._ctx.strokeStyle = options.color1;  
      this._ctx.lineWidth = options.weight;  
      this._ctx.stroke();  
     //把上一个的点保存下来
      if(i==21){
        var tp21=this._map.latLngToLayerPoint(L.latLng(trackpoints[21].lat, trackpoints[21].lng));
        this._ctx.save();
        this._ctx.beginPath();
        this._ctx.moveTo(tp21.x,tp21.y); 
        for(var i=21,len=trackpoints.length;i<len;i++){
         var tpi = this._map.latLngToLayerPoint(L.latLng(trackpoints[i].lat, trackpoints[i].lng));
       this._ctx.lineTo(tpi.x, tpi.y); 
        this._ctx.strokeStyle = options.color;  //可以直接写颜色
        this._ctx.lineWidth = options.weight;  //可以直接写上线宽
        this._ctx.stroke();  //描边
        }
      }
      }
    }
    }
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值