canvas動態畫一條不同顏色的線

問題描述

##使用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();  //描邊
        }
      }
      }
    }
    }
  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章