当前位置: 首页 > news >正文

产品开发流程及每个流程内容东莞百度快速优化排名

产品开发流程及每个流程内容,东莞百度快速优化排名,wordpress 重启,中国建筑招投标平台前言 需求:显示一个时间刻度尺,鼠标移动会显示当前时间 技术:我们采用canvasfabric进行实现 效果 实现 1.创建canvas(设置宽高)设为全局变量 2.引入fabric包 3.画时间刻度尺(长方形横线) …

前言

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

技术:我们采用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>

如果侵权请联系我删除。

http://www.yayakq.cn/news/510460/

相关文章:

  • 长宁网站设计网站哪些页面会做静态化
  • 电商网站建设代码大全如何做短视频自媒体赚钱
  • 四川响应式网站哪家好设计素材网站导航大全
  • iis7 网站用户权限上海有哪些互联网大厂
  • 淄博高端网站建设wordpress免费别人无法访问
  • 百度站长收录入口app企业开发公司
  • 天水网站开发石家庄模板建站系统
  • 九冶建设有限公司官方网站在百度怎么创建自己的网站
  • 外贸网站模板大全中国供求网
  • 手机的网站有哪些深圳十大高科技企业
  • 网站怎么制作成二维码东莞智通人才网官网首页
  • 东莞南城网站建设价格营销型网站建站步骤是什么意思
  • 做网站有什么比较好看的动效外贸seo网站开发
  • 传统企业营销型网站建设佛山网站设计建设
  • 外贸网站 免费模板 使用 zencart阿里企业邮箱设置
  • 域名禁止网站相关中小企业网络营销现状
  • 学校网站建设设想人才交流网站建设与设计
  • 单位网站服务的建设及维护如何设计网站的首页
  • 长沙做网站建设公司哪家好查分网站制作
  • 做dj网站能赚钱吗dw网页编辑器
  • 海外房地产网站建设怎么免费创建自己的网站平台
  • 西部数码网站管理系统中国住房和城乡建设部网站官网
  • 西安做公司网站公司提供建站服务的网络公司的比较
  • 如何查网站建设者ip淮南网名
  • 什么是网站地址wordpress与cms
  • 代理机构做的网站找不到人了怎么办做网站中山
  • 网站建站主题商城类型的网站怎么做
  • 网站静态化设计地方房产网站APP如何做
  • 深圳知名网站建设wordpress说说伪静态
  • 江门做网站设计上海网站建设官方网站