vue+canvas绘制时间轴

最近在研究canvas绘制时间轴,直接上代码,希望分享能给大家带来帮助,效果如下:


代码如下,可以拷贝到vue项目中直接预览

<template><div><canvas id="time_line" width="1200" height="27"></canvas></div>
</template><script>
export default {name: 'pathwaytrack',data() {return {screenWidth: document.body.clientWidth}},mounted() {let that = thisthat.carveTimeScale(1200, 1, 10, 0, 10)let canvasColor = '#999999'let initTime = 12000setInterval(() => {initTime += 1000that.carveTimeScale(1200, 1, 10, initTime, 10)}, 1000);},methods: {/*** 分割像素刻度* width: 宽度 ms:一个小刻度的毫秒数 pxMs:10像素一个小刻度 pageShowStartTime:初始时间(毫秒) 一大段间隔时长(秒)*/carveTimeScale(width, ms, pxMs, pageShowStartTime, intervalTime) {let canvasId = document.getElementById('time_line')let ctx = canvasId.getContext('2d')ctx.clearRect(0, 0, 1200, 60)ctx.fillStyle = '#999999'// 为防止苹果屏幕2X显示不正常// 为防止苹果屏幕2X显示不正常var getPixelRatio = function (context) {var backingStore = context.backingStorePixelRatio ||context.webkitBackingStorePixelRatio ||context.mozBackingStorePixelRatio ||context.msBackingStorePixelRatio ||context.oBackingStorePixelRatio ||context.backingStorePixelRatio || 1return (window.devicePixelRatio || 1) / backingStore}let ratio = getPixelRatio(ctx)let msOffset = this.startOffsetTime(pageShowStartTime, ms) // 开始的偏移时间 mslet pxOffset = msOffset / 1000 * pxMs // 开始的偏移距离 pxlet leftDistance = 0 // 到左侧的距离let leftDistanceTime = 0 // 到左侧的时间let beginX = 0let beginY = 0for (let i = 0; i < width / (ms * pxMs); i++) {leftDistance = pxOffset + i * (ms * pxMs) // 距离 = 开始的偏移距离 + 格数 * px/格leftDistanceTime = pageShowStartTime + msOffset + i * ms // 时间 = 左侧开始时间 + 偏移时间 + 格数 * msbeginX = pxOffset + i * (ms * pxMs)let canvasColorlet showTime = pageShowStartTime + beginX / pxMs * 1000if (showTime % (intervalTime * 1000) === 0) {beginY = 0ctx.font = '12px Arial'ctx.fillText(this.changeTime(showTime, 1), beginX + 10, 22)canvasColor = '#999999'ctx.fillStyle = '#B1B1B1'this.drawLine(leftDistance, beginY, leftDistance, 20, canvasColor, 1)} else if (showTime % intervalTime == 0) {beginY = 0canvasColor = '#999999'this.drawLine(leftDistance, beginY, leftDistance, 10, canvasColor, 1)}}},/*** 根据传入参数画线*/drawLine(beginX, beginY, endX, endY, color, width) {let canvasId = document.getElementById('time_line');let ctx = canvasId.getContext('2d');ctx.beginPath();ctx.moveTo(beginX, beginY);ctx.lineTo(endX, endY);ctx.strokeStyle = color;ctx.lineWidth = width;ctx.stroke();},/*** 左侧开始时间的偏移,返回单位ms*/startOffsetTime(timestamp, step) {let remainder = timestamp % stepreturn remainder ? step - remainder : 0},/*** 返回时间*/changeTime(time, num) {let hour = 0let minute = 0let second = 0second = time / 1000if (second >= 3600) {minute = (second - (second % 60)) / 60hour = parseInt((minute / 60).toString())minute = minute % 60/* eslint-disable */hour >= 10 ? hour : hour = '0' + hourminute >= 10 ? minute : minute = '0' + minutesecond = second % 60second >= 10 ? second : second = '0' + second/* eslint-enable */return hour + ':' + minute + ':' + second}if (second < 3600 && second >= 60) {hour = '00'minute = parseInt((second / 60).toString())/* eslint-disable */minute >= 10 ? minute : minute = '0' + minutesecond = second % 60second >= 10 ? second : second = '0' + second/* eslint-enable */return hour + ':' + minute + ':' + second}if (second < 60) {hour = '00'minute = '00'second = parseInt(second)/* eslint-disable */second >= 10 ? second : second = '0' + second/* eslint-enable */return hour + ':' + minute + ':' + second}}}
}
</script><style lang="less" scoped>canvas {background: black;}
</style>

vue+canvas绘制时间轴相关推荐

  1. vue+canvas绘制时间轴组件

    说明: 此组件使用vue2语法以及canvas实现. 效果图: 线上地址: time-select-line 安装: npm i time-select-line --save 导入: import ...

  2. GraphPad Prism绘制时间轴图

    今天教大家如何绘制"时间轴图",并展示网格线的使用方法和坐标后缀的编辑. 通常,在GraphPad中的Column中,新建一组数据后,会自动生成散点图,然后对其进行相应的编辑,即可 ...

  3. vue + canvas绘制扇形圆盘

    vue + canvas绘制扇形圆盘 html: <canvas style="position: fixed;z-index:-1" width="545&quo ...

  4. 【定制项目】【M14 监测预警平台】百度地图区域绘制(时间轴)/柱状图/仪表图 - 关键技术 python flask + echarts

    一.项目需求 项目名称:[某监测预警平台]. 项目需求:气候数据:雨量,温湿度,PM,雷达回波,雷电预报等展示到可视化大屏. 项目工期:10个工作日. 二.项目架构 运行环境支持Windows,Lin ...

  5. Vue.js 实现时间轴功能

    GitHub 时间轴组件封装 Main.js <template><div class="timeline-main"><div class=&quo ...

  6. canvas刻画时间轴

    给同事写的demo,顺带分享下  直接复制代码运行就行了.注释都写的很清楚啦 建议:如写时间轴之类的操作 一切单位换算成毫秒 拖动更新时间轴 其实就是更新初始时间 <!DOCTYPE html& ...

  7. vue 发展历程时间轴动画_PPT时间轴如何做出创意感?海量素材免费分享,网友:收藏...

    时间轴页面,是工作型PPT中常见的页面之一.个人述职或者公司介绍PPT中,使用时间轴,能够让观众更加清晰地了解公司的发展历程. 但是,很多人在制作时间轴页面时,往往是这样的效果: 只有几行字和一根线, ...

  8. vue实现物流时间轴效果

    实现效果 html <ul class="time-axis" :class="{ 'is-done': item.state === 1 }" v-fo ...

  9. Vue如何实现时间轴

    效果: 该时间轴每页最多默认展示三条数据,根据后台数据而定,超过三条前端分页处理: 注: 该时间轴展示的是每条工程数据的鸟瞰图,照片可多张,利用el-carousel.el-image-viewer插 ...

最新文章

  1. 据说看完这21个故事的人,30岁前都成了亿万富翁。你是下一个吗
  2. 6月第一周国内域名解析商:万网继续抢占DNSPod份额
  3. 《从0到1学习Flink》—— Apache Flink 介绍
  4. java最少有多少线程_【并发编程】一个最简单的Java程序有多少线程?
  5. 第一百四十五节,JavaScript,同步动画
  6. C/C++ 指针详解
  7. 为什么NTFS删除超过4G大文件或数据库文件后FILE RECORD大小表现为0
  8. 数据挖掘:围绕 统计与概率、分类与聚类、检索方法 ,原理演示或应用程序
  9. c语言程序设计个人作业,C语言程序设计-作业集.doc
  10. python 与 json
  11. DotNetTextBox控件添加外挂插件功能的图文教程。
  12. java myqq ui_GitHub - ANDRYHU2020/myqq: Java版SWing“高”仿QQ即时通聊天系统
  13. HC-SR04超声波传感器
  14. 逍遥魔兽手动打开mysql_逍遥魔兽gm命令使用
  15. c语言统计大写英文字母的个数,c语言 对任意输入的字符串,统计其中的大写字母和小写字母的个数...
  16. CentOS6.5下MariaDB日志及事物详解和基本操作语句
  17. Jenkins GSoC 2020 机器学习插件项目
  18. 从零开始perp交叉编译及配置
  19. 二类电商运营怎么选品 二类电商怎么运营?
  20. 微信小程序斗地主完整代码及步骤

热门文章

  1. bugzilla忘记管理员密码怎么办?
  2. python-个人贷款违约预测模型
  3. 一打开任务管理器CPU利用率就从百分之百降到正常(TiWorker.exe实锤病毒篇)
  4. input标签的事件汇总
  5. 长期使用笔记本触控板请以中指为主
  6. java 三大框架_java的三大框架是什么,功能各是什么
  7. Vue 角色权限管理设计与实现
  8. 6月3号绝地求生服务器维护,绝地求生6月3日今天维护时间 6.3吃鸡更新维护公告...
  9. 二手3C市场观察|平台掌握“赛点”后,头部综合垂直回收平台出路在哪?
  10. windows11安装docker desktop实现docker环境