亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用zrender.js繪制體溫單效果

 更新時(shí)間:2019年10月31日 13:34:23   作者:hpr  
這篇文章主要介紹了使用zrender.js繪制體溫單效果,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

今天我們來畫折線圖 效果圖

 以下為模擬數(shù)據(jù)

[{"time":19,"text":"入\n院\n19\n時(shí)\n11\n分","position":42,"cellMin":29.0,"cellSplit":0.2,"type":"text","color":"red","shape":null},{"time":22,"text":"手\n術(shù)","position":42,"cellMin":29.0,"cellSplit":0.2,"type":"text","color":"red","shape":null},{"time":129,"text":"手\n術(shù)","position":42,"cellMin":29.0,"cellSplit":0.2,"type":"text","color":"red","shape":null},{"cellMin":29.0,"cellSplit":0.2,"y":30.0,"type":"baseline","color":"#000","shape":null},{"cellMin":29.0,"cellSplit":0.2,"y":31.0,"type":"baseline","color":"#000","shape":null},{"cellMin":29.0,"cellSplit":0.2,"y":32.0,"type":"baseline","color":"#000","shape":null},{"cellMin":29.0,"cellSplit":0.2,"y":33.0,"type":"baseline","color":"#000","shape":null},{"cellMin":29.0,"cellSplit":0.2,"y":34.0,"type":"baseline","color":"#000","shape":null},{"cellMin":29.0,"cellSplit":0.2,"y":35.0,"type":"baseline","color":"#000","shape":null},{"cellMin":29.0,"cellSplit":0.2,"y":36.0,"type":"baseline","color":"#000","shape":null},{"cellMin":29.0,"cellSplit":0.2,"y":37.0,"type":"baseline","color":"#000","shape":null},{"cellMin":29.0,"cellSplit":0.2,"y":38.0,"type":"baseline","color":"#000","shape":null},{"cellMin":28.0,"cellSplit":0.2,"y":39.0,"type":"baseline","color":"red","shape":null},{"cellMin":29.0,"cellSplit":0.2,"y":40.0,"type":"baseline","color":"#000","shape":null},{"cellMin":29.0,"cellSplit":0.2,"y":41.0,"type":"baseline","color":"#000","shape":null},{"cellMin":29.0,"cellSplit":0.2,"y":42.0,"type":"baseline","color":"#000","shape":null},{"cellMin":29.0,"cellSplit":0.2,"array":[{"time":19,"tips":"體溫37.1","value":"37.1","shape":"x","Break":"false","type":"temperature","extraArr":[],"others":[]},{"time":21,"tips":"體溫36.9","value":"36.9","shape":"x","Break":"false","type":"temperature","extraArr":[],"others":[]},{"time":30,"tips":"體溫36.5","value":"36.5","shape":"x","Break":"false","type":"temperature","extraArr":[],"others":[]},{"time":38,"tips":"體溫36.6","value":"36.6","shape":"x","Break":"false","type":"temperature","extraArr":[],"others":[]},{"time":54,"tips":"體溫36.7","value":"36.7","shape":"x","Break":"false","type":"temperature","extraArr":[],"others":[]}],"type":"line","color":"blue","shape":"x-circle"},{"cellMin":-10.0,"cellSplit":2.0,"array":[{"time":19,"shape":"empty-circle","tips":"呼吸20","value":"20","Break":"false"},{"time":21,"shape":"empty-circle","tips":"呼吸20","value":"20","Break":"false"},{"time":30,"shape":"empty-circle","tips":"呼吸19","value":"19","Break":"false"},{"time":38,"shape":"empty-circle","tips":"呼吸18","value":"18","Break":"false"},{"time":54,"shape":"empty-circle","tips":"呼吸19","value":"19","Break":"false"}],"type":"line","color":"black","shape":"empty-circle"},{"cellMin":-2.0,"cellSplit":1.0,"array":[{"time":19,"tips":"疼痛7","value":"7","Break":"false","type":"pain","extraArr":[{"extra":"3","extraColor":"red","extraTips":"疼痛評價(jià)3"}],"others":[]},{"time":23,"tips":"疼痛3","value":"3","Break":"false","type":"pain","extraArr":[],"others":[]},{"time":27,"tips":"疼痛3","value":"3","Break":"false","type":"pain","extraArr":[],"others":[]},{"time":33,"tips":"疼痛3","value":"3","Break":"false","type":"pain","extraArr":[],"others":[]},{"time":39,"tips":"疼痛3","value":"3","Break":"false","type":"pain","extraArr":[{"extra":"3","extraColor":"red","extraTips":"疼痛評價(jià)3"}],"others":[]},{"time":44,"tips":"疼痛3","value":"3","Break":"false","type":"pain","extraArr":[],"others":[]},{"time":51,"tips":"疼痛3","value":"3","Break":"false","type":"pain","extraArr":[],"others":[]},{"time":58,"tips":"疼痛3","value":"3","Break":"false","type":"pain","extraArr":[{"extra":"3","extraColor":"red","extraTips":"疼痛評價(jià)3"}],"others":[]}],"type":"line","color":"red","shape":"empty-circle"},{"bgColor":"rgba(255,0,0,0.7)","cellMin":30.0,"cellSplit":2.0,"array":[{"time":19,"v1":69,"v1Tips":"心率69","v2":69,"v2Tips":"脈搏69","Break":"false"},{"time":21,"v1":70,"v1Tips":"心率70","v2":70,"v2Tips":"脈搏70","Break":"false"},{"time":30,"v1":83,"v1Tips":"心率83","v2":83,"v2Tips":"脈搏83","Break":"false"},{"time":38,"v1":78,"v1Tips":"心率78","v2":78,"v2Tips":"脈搏78","Break":"false"},{"time":54,"v1":77,"v1Tips":"心率77","v2":77,"v2Tips":"脈搏77","Break":"false"}],"type":"area","color":"red","shape":null},{"text":null,"y":"28","cellMin":-10.0,"cellSplit":2.0,"array":[],"type":"tag","color":"black","shape":null},{"text":null,"y":null,"cellMin":30.0,"cellSplit":2.0,"array":[],"type":"tag","color":"black","shape":null}]

  首先創(chuàng)建filterData方法 用于過濾數(shù)據(jù) text文本 line線段 area圓 tag暫時(shí)用不到 今天說的是折線所以創(chuàng)建zrLine 方法

filterData(){
   const data = chartData
   
   data.forEach(el => {
    switch (el.type) {
     case "text":
      // this.zrText(el)
      break;
     case "line":
      this.zrLine(el)
      break;
     case "area":
      this.zrPolyline(el)
      break;
     case "tag":
      this.zrTag(el)
      break;
    
     default:
      break;
    }
    });
  }

我們在新增一個(gè)文件夾創(chuàng)建utli.js這個(gè)文件夾的作用為我們把創(chuàng)建線創(chuàng)建圓的公共方法寫在這個(gè)js文件里

 utli.js 我們先說 createLine createCircle

 createLine 需要傳5個(gè)參數(shù)分別為開始點(diǎn)的橫縱坐標(biāo) 結(jié)束點(diǎn)的橫縱坐標(biāo) 還有線的樣式

 createCircle 需要傳4個(gè)參數(shù)分別為 圓點(diǎn)的橫縱坐標(biāo) 圓的半徑 和樣式 

addHover 也需要 這時(shí)我們需要在init 方法里添加一段代碼(上一章創(chuàng)建的初始化方法) 這段代碼為創(chuàng)建一個(gè)div到時(shí)我們鼠標(biāo)移到圓上會(huì)彈出文本信息的時(shí)候回用到

var div = document.createElement("div")
   div.classList.add("tips")
   document.getElementById("main").append(div)

 utli.js

//線段
export const createLine = (x1,y1,x2,y2,style)=>{
  return new zrender.Line({
    shape:{
      x1:x1,
      y1:y1,
      x2:x2,
      y2:y2
    },
    style:style,
  });
};
// cx 橫坐標(biāo) cy縱坐標(biāo) r半徑 空心圓
export const createCircle = (cx,cy,r,style)=>{
  return new zrender.Circle({
    shape:{
      cx:cx,
      cy:cy,
      r:r
    },
    style:style,
    zlevel:4
  })
}
//添加horver事件 el 元素對象 config 一些配置項(xiàng) x x軸坐標(biāo) y y軸坐標(biāo) shapeOn鼠標(biāo)移入一些屬性配置 shapeOn鼠標(biāo)移出一些屬性配置 shape配置項(xiàng)看官網(wǎng) 
export const addHover = (el,config,x,y,shapeOn,shapeOut) => {
  const domTips = document.getElementsByClassName("tips")
  el.on('mouseover',function(){
    domTips[0].innerHTML = config.tips
    domTips[0].setAttribute("style",`position:absolute;top:${y-13}px;left:${x}px;display:block;font-size:10px;background-color:rgba(0,0,0,.7);padding:3px;border-radius:3px;color:#fff`)
    el.animateTo({
      shape:shapeOn
    },100,0)
  }).on('mouseout',function () {
    domTips[0].setAttribute("style",`display:none`)
    el.animateTo({
      shape:shapeOut
     },100,0)
  })
}
//多邊形
export const createPolygon = (points,style) => {
  return new zrender.Polyline({
    shape:{
      points:points,
    },
    style:style
  })
}

zrLine方法里的第一段代碼 判斷這個(gè)折線拐點(diǎn)是需要空心圓還是實(shí)心圓還是其他的形狀 都通過shape決定 color為圓的邊框顏色填充色為白色 先定義一個(gè)style變量到時(shí)好實(shí)現(xiàn)自定義

   

var style = {}
   switch (data.shape) {
    case "x-circle":
     style = {
      stroke:data.color,
      fill:"#fff",
      text:"x",
     }
     break;
    case "empty-circle":
     style = {
      stroke:data.color,
      fill:"#fff",
      text:"",
     }
     break;
   
    default:
     break;
   }

這里需要在添加2個(gè)方法

getX

//獲取X坐標(biāo) data當(dāng)前時(shí)間點(diǎn)
  getX(data){
   let XShareOne = this.XShareOne()
   return data * XShareOne
  },

transformY

//轉(zhuǎn)換y軸坐標(biāo)點(diǎn)為正確坐標(biāo)點(diǎn) 因?yàn)閥軸坐標(biāo)是頂點(diǎn)為0遞增的 所有用總高度減去原來坐標(biāo)的高度剩下的高度就是正確坐標(biāo)點(diǎn)
  //i代表一個(gè)格子代表幾個(gè)高度
  transformY(data,i){
   let YHeight = this.YShareOne()
   
   //計(jì)算出剩余高度
   let surplusHeight = this.canavsHeight - (YHeight/i) * data
   return surplusHeight
  },

這段代碼意思是先把數(shù)據(jù)遍歷出來 在通過time屬性計(jì)算出x坐標(biāo) value值計(jì)算出y坐標(biāo) x軸左邊基本是以time為基本來計(jì)算的 y軸坐標(biāo)可能會(huì)隨數(shù)據(jù)變化而有所改變 Break屬性為是否斷線 如果需要斷線就位true

     

data.array.forEach((el,i) =>{
    if (i > 0) {
     let XShareOne = this.XShareOne()
     let firstX = this.getX(data.array[i-1].time) 
     let firstY = this.transformY(data.array[i-1].value,1)
     let x = this.getX(data.array[i].time)
     let y = this.transformY(data.array[i].value,1)
     if (data.array[i-1].Break == "false") {
      let line = createLine(firstX,firstY,x,y,{
        stroke:"#af2377",
        lineWidth:2,
      })
      this.zr.add(line)
     }
    }
    if (el.extraArr && el.extraArr.length > 0) {
      el.extraArr.forEach((item,a) => {
       let x = this.getX(el.time)
       let y = this.transformY(el.value,1)
       let lastY = this.transformY(item.extra,1)
       let dottedLine = createLine(x,y,x,lastY,{
         stroke:"#af2377",
         lineWidth:2,
         lineDash:[2,2]
       })
       this.zr.add(dottedLine)
       el.extraArr.forEach((item,a) => {
        let getY = this.transformY(item.extra,1)
        let Circle = createCircle(x,getY,5,{
         stroke:item.extraColor,
         fill:"#fff",
        })
        this.zr.add(Circle)
        addHover(Circle,{
          tips:item.extraTips,
        },x,getY,{
          r:8,
         },{
          r:5,
        })
       })
      })
     }
    let getX = this.getX(el.time)
    let getY = this.transformY(el.value,1)
    let Circle = createCircle(getX,getY,5,style)
    this.zr.add(Circle)
    addHover(Circle,el,getX,getY,{
      r:8,
     },{
       r:5,
    })
   })

這步完成折線圖應(yīng)該就畫好了

下次我們將陰影的畫法 

總結(jié)

以上所述是小編給大家介紹的使用zrender.js繪制體溫單效果,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Javascript 計(jì)算字符串在localStorage中所占字節(jié)數(shù)

    Javascript 計(jì)算字符串在localStorage中所占字節(jié)數(shù)

    本文給大家分享的是使用Javascript 計(jì)算字符串在localStorage中所占字節(jié)數(shù),分別對UTF-8和UTF-16兩種編碼進(jìn)行了詳細(xì)說明,有需要的小伙伴可以參考下。
    2015-10-10
  • 再談Javascript中的基本類型和引用類型(推薦)

    再談Javascript中的基本類型和引用類型(推薦)

    這篇文章主要介紹了Javascript中的基本類型和引用類型的相關(guān)資料,包括基本類型和引用類型的概念及區(qū)別,數(shù)據(jù)類型檢測給大家詳細(xì)介紹了js基本類型和引用類型,非常不錯(cuò),需要的朋友可以參考下
    2016-07-07
  • js實(shí)現(xiàn)百度地圖定位于地址逆解析,顯示自己當(dāng)前的地理位置

    js實(shí)現(xiàn)百度地圖定位于地址逆解析,顯示自己當(dāng)前的地理位置

    本文分享了基于javascript實(shí)現(xiàn)的百度地圖定位于地址逆解析,顯示自己當(dāng)前的地理位置的實(shí)例代碼,有興趣的朋友可以看下
    2016-12-12
  • 萊鳥介紹window.print()方法

    萊鳥介紹window.print()方法

    這篇文章主要介紹了萊鳥介紹window.print()方法的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Bootstrap基本樣式學(xué)習(xí)筆記之表單(3)

    Bootstrap基本樣式學(xué)習(xí)筆記之表單(3)

    這篇文章主要介紹了Bootstrap學(xué)習(xí)筆記之表單基本樣式的相關(guān)資料,為大家分享了三種表單樣式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 如何用js獲得當(dāng)前視頻播放的狀態(tài)

    如何用js獲得當(dāng)前視頻播放的狀態(tài)

    這篇文章主要給大家介紹了關(guān)于如何用js獲得當(dāng)前視頻播放狀態(tài)的相關(guān)資料,大家在日常應(yīng)用場景中可能會(huì)遇到這么一個(gè)情況,需要判斷用戶是否完整的觀看完了一部視頻,需要的朋友可以參考下
    2023-07-07
  • JS實(shí)現(xiàn)基數(shù)排序的示例代碼

    JS實(shí)現(xiàn)基數(shù)排序的示例代碼

    基數(shù)排序是一種根據(jù)數(shù)字位數(shù)的值,對整數(shù)進(jìn)行排序的算法,本文主要介紹了JS實(shí)現(xiàn)基數(shù)排序的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • BootstrapValidator驗(yàn)證用戶名已存在(ajax)

    BootstrapValidator驗(yàn)證用戶名已存在(ajax)

    這篇文章主要為大家詳細(xì)介紹了BootstrapValidator驗(yàn)證用戶名已存在,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Servlet返回的數(shù)據(jù)js解析2種方法

    Servlet返回的數(shù)據(jù)js解析2種方法

    這篇文章主要介紹了Servlet返回的數(shù)據(jù)js解析2種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 原生JS實(shí)現(xiàn)的碰撞檢測功能示例

    原生JS實(shí)現(xiàn)的碰撞檢測功能示例

    這篇文章主要介紹了原生JS實(shí)現(xiàn)的碰撞檢測功能,涉及javascript鼠標(biāo)事件響應(yīng)及頁面圖形坐標(biāo)位置運(yùn)算、檢測相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05

最新評論