canvas+fabric实现时间刻度尺(一)

小程序Canvas 画刻度 canvas是前端工作中不可少的一部分,那么今天就用小程序的canvas画一次刻度尺,希望大家喜欢,同事有更好意见的,也可以在评论去留言哦! 1、axml <view> <canvas id="canvas" class="canvas" onTouchStart="start" onTouchMove="move" onTouchEnd="end" /> </... 阅读详情

前言

需求:显示一个时间刻度尺,鼠标移动会显示当前时间

技术:我们采用canvas+fabric进行实现

效果

实现

1.创建canvas(设置宽高)设为全局变量

2.引入fabric包

3.画时间刻度尺(长方形+横线)

4.增加鼠标移动事件并画虚线时间显示

5.增加鼠标离开事件并销毁虚线时间

<template>
  <div>
      <canvas id="rulerCanvas" width="1200" height="400"></canvas>
  </div>
</template>
<script setup>
import * as fabric  from 'fabric';
import {ref, onMounted} from 'vue';


const canvas = ref(null);

onMounted(() => {
  drawRuler();
});



let movDummyLine = null;
let movDummyLineText = null;


const onMouseMove = (options) => {

  if (options.pointer.x >= 40) {
    if (movDummyLine) {
      canvas.value.remove(movDummyLine);
      canvas.value.remove(movDummyLineText);
    }
    // 添加虚线
    movDummyLine = new fabric.Line([0, 800, 1, 0], {
      stroke: 'red',
      strokeDashArray: [5, 5],
      strokeWidth: 1,
      selectable: false,
    }).set({ left: options.pointer.x, top: 36 });
    canvas.value.add(movDummyLine);
    // group.add(movDummyLine);


    // 添加文字  (options.pointer.x)
    let startNumber = options.pointer.x - 40 + 20;
    let timeNumber = parseInt(startNumber / 20);

    movDummyLineText = new fabric.Text(timeToStr(timeNumber), {
      fontSize: 12,
      fill: 'black',
      selectable: false,
      textAlign: 'center',
    }).set({ left: options.pointer.x - 12, top: 20 });
    canvas.value.add(movDummyLineText);
    // group.add(movDummyLineText);

  }

};

const drawRuler = () => {
  canvas.value = new fabric.Canvas('rulerCanvas');

  // 鼠标事件
  canvas.value.on('mouse:move', onMouseMove);
  canvas.value.on('mouse:out', () => {
    if (movDummyLine) {
      canvas.value.remove(movDummyLine);
      canvas.value.remove(movDummyLineText);
      movDummyLine = null;
      movDummyLineText = null;
    }
  });

  // 时间刻度
  const startHour = 0;
  const startMinute = 0;
  const intervalMinutes = 5; // 间隔
  const totalHours = 1; // 当前刻度时间
  let currentMinute = startMinute;
  let currentHour = startHour;

  // 长方形
  const rect = new fabric.Rect({
    left: 0,
    top: 0,
    width: 1100,
    height: 40,
    fill: '#fff',
    strokeWidth: 1, // 边框宽度
    selectable: false,
  });
  canvas.value.add(rect);
  // 底部边框
  const bottomBorder = new fabric.Line([0, 40, 1200, 40], {
    stroke: '#000000',
    strokeWidth: 1,
    selectable: false,
  });
  canvas.value.add(bottomBorder);

  // 时间刻度
  for (let i = 0; i <= totalHours * 60; i += intervalMinutes) {
    const x = (i / (totalHours * 60)) *  canvas.value.width + 40;
    const timeText = formatTime(currentHour, currentMinute);

    // 画刻度线
    const b = new fabric.Line([x, 50, x, 60], {
      stroke: 'black',
      strokeWidth: 1,
      selectable: false,
    }).set({ left: x, top: 28 });
    canvas.value.add(b);

    // 添加时间文本
    const a = new fabric.Text(timeText, {
      fontSize: 12,
      fill: 'black',
      selectable: false,
      textAlign: 'center',
    }).set({ left: x-14, top: 10 });
    canvas.value.add(a);

    // 更新分钟和小时
    currentMinute += intervalMinutes;
    if (currentMinute >= 60) {
      currentMinute = 0;
      currentHour++;
    }
  }
};

const formatTime = (hour, minute) => {
  return `${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}`;
};


const timeToStr = (seconds) => {
  const minutes = Math.floor(seconds / 60);
  const secs = seconds % 60;
  const paddedMinutes = String(minutes).padStart(2, '0');
  const paddedSeconds = String(secs).padStart(2, '0');
  return `${paddedMinutes}:${paddedSeconds}`;
};
</script>
<style>
  #rulerCanvas {
      border: 1px solid black;
  }
</style>

如果侵权请联系我删除。

canvas-scale:采用Canvas绘制的一个可配置的刻度(尺)组件 canvas-scale 采用Canvas绘制的一个可配置的刻度(尺)组件。 主要常用于移动端数值、金额等的滑动选择,增强用户交互体验。 刻度组件 demo,效果图: 链接 采用Canvas绘制一个可配置的刻度(尺)组件:; github地址: 演示地址: 说明 本刻度组件支持的功能: 采用canvas绘制组件,解决移动端绘制模糊问题, 支持刻度尺基本参数配置传入, 监听滑动事件,滑动时实时输出刻度值,同时支持根据外部值动态设置刻度, 支持平滑/缓动滑动、实时绘制刻度, 兼容移动端/pc端滑动, 支持的传入的可配置项参数: // 默认配置 const default_conf = { // width: '', // 不支持设置,取容器宽度 height: 50, // 画布高度 start: 1000, // 刻度开始值 end: 10000, // 刻度结束值 / 立即下载

相关推荐

canvas+svg实现标尺网格效果

使用js+canvas绘图,结合svg图形,实现标尺栏和网格效果。

Canvas实现时间刻度标尺功能

Canvas实现时间刻度标尺功能 前言:项目中需要实现一个时间标尺的功能,展示某个人在某段时间内已经被订单占用的时间,并且展示当前订单在标尺中的占用位置,大概为下图的样子 大概的实现逻辑如下: 计算时间刻度跨度。canvas总宽度为320,高度为40,注意,canvas的宽度不能使用css来写,会导致计算混乱,直接写在标签内,一共显示8个时间区域,所以每个刻度之间的宽度为320/8=40 利用canvas画一条线,X轴起点为0,终点点为320,Y轴起终点都是25,只所以不放到最底下,是因为需要给显示时间

绳墨BigHead 4136

Html+JavaScript 在canvas上绘制带日期显示的时钟 (自己绘制刻度)

Html+JavaScript 在canvas上绘制带日期显示的时钟 (自己绘制刻度)。 想了解此框架以及程序结果图的,可以去博客看一看,再决定下载与否。

canvas 刻度尺

参考链接:https://codepen.io/luren/pen/yEagYO。

风小猪的博客 1604

Uncertainty-Aware Mean Teacher(UA-MT)

本文提出了一种新的基于不确定性的半监督学习框架(UA-MT),通过额外利用未标记的数据从3D MR图像中分割左心房。具体地说,本文建立了一个教师模型和一个学生模型,学生模型通过最小化标注数据上的分割监督损失和所有输入数据上的与教师模型预测输出的一致性损失进行优化。如果没有未标记输入中的注释,教师模型的预测目标可能不可靠且有噪声。:在估计不确定性 U 的指导下,我们过滤掉相对不可靠**(高不确定性),整个体积** U 的不确定性**是 {u} ∈ RH×W ×D。过滤掉高不确定性的,也就是熵大于某个值的。

Alexa_的博客 1869

新年美食鉴赏——基于注意力机制CBAM的美食101分类

新年美食鉴赏——基于注意力机制CBAM的美食101分类一、数据预处理1.数据集介绍2.读取标签3.统一命名4.整理图片路径5.划分训练集与验证集6.定义美食数据集二、注意力机制1.简介2.卷积块注意力网络——CBAM通道注意力模块CAM空间注意力模块SAM3.将通道、空间注意力模块合并三、基于卷积块注意力模块的ResNet-CBAM1.代码实现2.模型测试3.查看网络结构4.模型训练5.模型预测四、总结与升华个人简介 春节是一年当中最隆重、最盛大的节日,吃得最好的一餐可能就是年夜饭了,想想就很激动呢!随着新

zbp_12138的博客 1万+

时钟之Canvas+JS版

上一篇介绍使用CSS+JS方式实现,但元素泰国单一。此篇将以HTML5的canvas标签结合JS来实现。HTML代码JS代码//计时器//钟表半径//时针刻度宽度//分针刻度宽度//时针宽度//分针宽度//秒针宽度} else {})if (!return;//去除透明度//移动中心//设置钟表半径//调整路径结束点样式//开始绘制});//火狐浏览器问题//画时钟圆心ctx.fill()

流沙QuickSand 369

二手分析仪器改造实战:如何用PMT搭建荧光检测电路(附完整电路图)

本文详细介绍了如何利用二手分析仪器中的光电倍增管(PMT)核心部件,进行荧光检测电路的实战改造。内容涵盖从PMT工作原理理解、高压供电电路设计、低噪声前置放大(跨阻放大器)到信号调理的完整流程,并提供了关键电路图与调试排错指南,旨在帮助电子爱好者与工程师低成本构建稳定、高灵敏度的专业检测系统。

weixin_29234239的博客 440

canvas--标尺

项目开发过程中,会遇到标尺的功能,标尺可以通过canvas来实现,具体实现如下:1、html代码:&lt;canvas id='canvas' width='800' height='800' /&gt;2、css代码:body {     background: #eeeeee; } #canvas {     background: #ffffff;     cursor: pointer; ...

蒲厷渶と戀的博客 6688

保姆级教程:用Labelme标注车辆关键点,并一键转成YOLOv8-pose训练格式

本文提供了一份详细的车辆底盘关键点标注教程,从使用Labelme进行标注到一键转换为YOLOv8-pose训练格式的全流程指南。特别针对工业检测和自动驾驶场景,分享了标注规范、格式转换脚本及常见问题解决方案,帮助开发者高效准备训练数据并优化模型性能。

weixin_27419879的博客 306

高通8155车机系统里,安卓和QNX是怎么‘打电话’的?聊聊HAB通信框架那些事

本文深入解析了高通8155车机系统中HAB通信框架如何实现安卓与QNX的高效协同。作为异构系统的通信桥梁,HAB通过共享内存和中断信号机制,在多媒体数据传输中展现出零拷贝、硬件加速等优势,成为智能座舱实现实时性与生态丰富性平衡的关键技术。

weixin_42715608的博客 381

js刻度尺插件_html5 canvas+js刻度尺代码

html5 canvas+js制作的刻度尺代码,有三款样式,代码注释很详细。js代码//调用刻度尺方法ruler.initPlugin({el: “ruler”, //容器idstartValue: 100,background: “#f5f5f5”,success: function (res) {console.log(res);}});//调用刻度尺方法ruler.initPlugin({e...

weixin_39945531的博客 1705

智能车图像处理0-变量释义

这篇文章主要讲述智能车图像处理中,各篇主要变量的含义。如果在看具体分析代码时感到困惑,可以在本篇文章中查询,辅助理解。

taiyuezyh的博客 3669

canvas+fabric实现时间刻度尺+长方形数据展示

我们前面实现了时间刻度尺,现在在时间刻度尺里面画一个长方形,长方形里面有数据展示。

echo_Ae的博客 836

基于Simulink的电机功率因数校正仿真

PF=SP​=视在功率有功功率​=cosϕ⋅Irms​I1​​(非正弦时)位移因数(cosϕ):基波电压电流相位差畸变因数(I1​/Irms​):谐波导致电流有效值增大本文带你完成了电机系统功率因数校正的Simulink仿真,实现了:✅ 理解了低功率因数的成因与危害✅ 搭建了无PFC、无源PFC、有源PFC三种对比模型✅ 掌握了Vienna整流器建模与dq解耦控制方法✅ 实现了PF与THD的自动计算与评估✅ 验证了有源PFC在PF、THD、稳定性上的全面优势。

amy_mhd的博客 154

深度学习与西储大学轴承数据集(一)

西储大学数据集介绍

weixin_50642818的博客 1万+

canvas+fabric实现时间刻度尺(二)

我们前面实现了时间刻度尺,鼠标移动显示时间,接下来我们实现鼠标点击某个时间进行弹框。

echo_Ae的博客 583

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

fireworks-tech-graph Style 12 Ops Pulse 实战指南:用黄金信号、关键路径与关联 Trace 瀑布构建 SRE 事故排查图

Style 12 Ops Pulse 是 fireworks-tech-graph 中面向可观测性(Observability)的专项风格:它以"服务拓扑 + 四个黄金信号 + 一条关键请求路径 + 一条关联 Trace 瀑布"为固定语义契约,专用于事故复盘(Incident Review)、生产就绪评审(Production-Readiness Review)、SLO/错误预算讨论与延迟/依赖排

gitblog_00877的博客 189

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

从CUDA到ROCm:深入解析AMD异构计算软件栈架构与实战

异构计算通过CPU与GPU等不同架构处理器的协同工作,实现计算任务的加速,其核心原理在于将适合并行处理的任务卸载到GPU等加速器上执行。这一技术为人工智能、科学计算和高性能计算等领域带来了显著的性能提升。在工程实践中,开发者需要选择合适的软件栈来充分发挥硬件潜力。AMD ROCm作为一个开源、跨平台的异构计算软件栈,提供了从底层驱动到高层框架的完整解决方案。通过HIP可移植性编程模型,开发者可以便捷地将CUDA代码迁移到AMD平台,同时利用rocBLAS、MIOpen等高度优化的数学库和深度学习原语库加速计

weixin_30372371的博客 434

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

canvas实现刻度尺

canvas实现刻度尺

weixin_48213294的博客 2788

使用canvas实现时间轴上滑块的各种常用操作(仅供参考)

使用canvas,模拟绘制时间轴区域,有时间刻度标尺,时间轴区域上会有多行,每行都有一个滑块。1、时间刻度标尺可以拖动,会自动对齐整数点秒数,最小步数为0.1秒。2、滑块可以自由拖动,当滑块处于选中状态时,左右两边会出现可拖动的按钮,用于拉伸宽度。3、滑块与滑块之间对齐时会出现对齐虚线,滑块与刻度标尺对齐时,刻度标尺会变色用于提醒用户此时已对齐。4、当滑块拉伸到最右侧区域时,右侧空间不足时,会自动增加右侧空间区域。

不怕麻烦的鹿丸的博客 1957

canvas绘制刻度尺

指示线居中的刻度尺

qq_32051663的博客 1584

canvas上纯JS实现可滑动时间刻度轴

canvas上纯JS实现可滑动时间刻度轴、刻度轴

liangpx.blog 9216

canvas绘制时钟刻度表

canvas绘制时钟刻度表1.首先看一下效果图2.基本知识点canvas.drawText:绘制文字,注意基线的位置为文字的左下角y轴所在的线canvas.drawLine:绘制线段,指定起始位置就好canvas.save:保存canvas的状态,比如translate平移之前或者rotate(单位为°,正为顺时针)旋转之前的状态canvas.restore:恢复到保存时候的canvas状态,这么...

libinbin147256369的博客 3240

视频录像时间刻度尺实现

使用QCustomPlot实现时间刻度尺

ZaiLuShang2121的博客 611

uniapp canvas游标卡尺效果

uniapp canvas 游标卡尺

lsswear的专栏 2534
上一篇: uniapp结合movable-area与movable-view实现拖拽功能
下一篇: canvas+fabric实现时间刻度尺(二)
An_s
博客等级 码龄10年 665粉丝 363原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

An_s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值