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

大屏开发

项目

image

  src / utils / useDraw.ts

import { ref } from 'vue'export default function useDraw() {// * 指向最外层容器const appRef = ref()// * 定时函数const timer = ref(0)// * 默认缩放值const scale = {width: '1',height: '1',}// * 设计稿尺寸(px)const baseWidth = 1920const baseHeight = 1080// * 需保持的比例(默认1.77778)const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5))const calcRate = () => {// 当前宽高比const currentRate = parseFloat((window.innerWidth / window.innerHeight).toFixed(5))if (appRef.value) {if (currentRate > baseProportion) {// 表示更宽scale.width = ((window.innerHeight * baseProportion) / baseWidth).toFixed(5)scale.height = (window.innerHeight / baseHeight).toFixed(5)appRef.value.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`} else {// 表示更高scale.height = ((window.innerWidth / baseProportion) / baseHeight).toFixed(5)scale.width = (window.innerWidth / baseWidth).toFixed(5)appRef.value.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`}}}const resize = () => {clearTimeout(timer.value)timer.value = setTimeout(() => {calcRate()}, 200)}// 改变窗口大小重新绘制const windowDraw = () => {window.addEventListener('resize', resize)}// 改变窗口大小重新绘制const unWindowDraw = () => {window.removeEventListener('resize', resize)}return {appRef,calcRate,windowDraw,unWindowDraw}
}

页面使用src/views/index/index.vue

<template><div id="index" ref="appRef"><div class="bg"><dv-loading v-if="loading">Loading...</dv-loading><div v-else class="host-body"><div class="d-flex jc-center"><dv-decoration-10 class="dv-dec-10" /><div class="d-flex jc-center"><dv-decoration-8 class="dv-dec-8" :color="['#568aea', '#000000']" /><div class="title"><span class="title-text">{{ title }}</span><dv-decoration-6class="dv-dec-6":reverse="true":color="['#50e3c2', '#67a1e5']"/></div><dv-decoration-8class="dv-dec-8":reverse="true":color="['#568aea', '#000000']"/></div><dv-decoration-10 class="dv-dec-10-s" /></div><!-- 第二行 --><div class="d-flex jc-between px-2"><div class="d-flex aside-width"><div class="react-left ml-4 react-l-s"><span class="react-before"></span><span class="text">{{ subtitle[0] }}</span></div><div class="react-left ml-3"><span class="text">{{ subtitle[1] }}</span></div></div><div class="d-flex aside-width"><div class="react-right bg-color-blue mr-3"><span class="text fw-b">{{ subtitle[2] }}</span></div><div class="react-right mr-4 react-l-s"><span class="react-after"></span><span class="text">{{ timeInfo.dateYear }} {{ timeInfo.dateWeek }}{{ timeInfo.dateDay }}</span></div></div></div><div class="body-box"><!-- 第三行数据 --><div class="content-box"><div><dv-border-box-12><center-left1 /></dv-border-box-12></div><div><dv-border-box-12><center-left2 /></dv-border-box-12></div><!-- 中间 --><div><center /></div><!-- 中间 --><div><center-right1 /></div><div><dv-border-box-13><center-right2 /></dv-border-box-13></div></div><!-- 第四行数据 --><div class="bototm-box"><dv-border-box-13><bottom-left /></dv-border-box-13><dv-border-box-12><bottom-right /></dv-border-box-12></div></div></div></div></div>
</template><script lang="ts">
import {defineComponent,ref,reactive,onMounted,onBeforeUnmount,
} from 'vue'
import { formatTime } from '@/utils/index'
import { WEEK } from '@/constant/index'
import useDraw from '@/utils/useDraw'
import { title, subtitle, moduleInfo } from '@/constant/index'
import CenterLeft1 from '../centerLeft1/index.vue'
import CenterLeft2 from '../centerLeft2/index.vue'
import Center from '../center/index.vue'
import CenterRight1 from '../centerRight1/index.vue'
import CenterRight2 from '../centerRight2/index.vue'
import BottomLeft from '../bottomLeft/index.vue'
import BottomRight from '../bottomRight/index.vue'export default defineComponent({components: {CenterLeft1,CenterLeft2,Center,CenterRight1,CenterRight2,BottomLeft,BottomRight},setup() {// * 加载标识
    const loading = ref<boolean>(true)// * 时间内容
    const timeInfo = reactive({setInterval: 0,dateDay: '',dateYear: '',dateWeek: ''})// * 适配处理
    const { appRef, calcRate, windowDraw, unWindowDraw } = useDraw()// 生命周期
    onMounted(() => {cancelLoading()handleTime()// todo 屏幕适应
      windowDraw()calcRate()})onBeforeUnmount(() => {unWindowDraw()clearInterval(timeInfo.setInterval)})// methods// todo 处理 loading 展示
    const cancelLoading = () => {setTimeout(() => {loading.value = false}, 500)}// todo 处理时间监听
    const handleTime = () => {timeInfo.setInterval = setInterval(() => {const date = new Date()timeInfo.dateDay = formatTime(date, 'HH: mm: ss')timeInfo.dateYear = formatTime(date, 'yyyy-MM-dd')timeInfo.dateWeek = WEEK[date.getDay()]}, 1000)}// returnreturn {loading,timeInfo,appRef,title,subtitle,moduleInfo}}
})
</script><style lang="scss" scoped>
@import '@/assets/scss/index.scss';
</style>

 

http://www.hskmm.com/?act=detail&tid=700

相关文章:

  • 检测域名证书有效期
  • PostgreSQL 内机器学习的关键智能算法研究
  • [node] Linux 环境安装 nvm 并通过 nvm 控制 node 版本
  • Gitee崛起:中国开发者为何纷纷转向本土代码托管平台
  • TCP反向代理:将局域网内部的TCP/HTTP服务暴露在公网上
  • 告别数月等待:数字孪生场景生成从此进入“日级”时代
  • Vue.js:大屏开发实战
  • xtrabackup8.0本地备份和恢复(xbstream+gzip)
  • Docker网络
  • 神器内存分配器(Allocator)设计:从原理到高性能实现的深度探索
  • 后端Coder如何做好代码设计?
  • Symfony学习笔记 - Symfony Documentation - Frontend
  • xtrabackup8.0本地备份和恢复(xbstream+compress)
  • 安装云图解析python模块碰到的问题
  • 计算机使用问题集
  • Docker
  • 前端调试列出方法和属性
  • JDK环境变量配置
  • Gitee DevOps:打造中国开发者专属的全流程效能引擎
  • vue可视化大屏开发
  • Linux /boot 目录详解
  • 手把手教你如何用yolo算法进行运动监测
  • vi 文本编辑器的使用方法
  • java将指定的两张图片合成pdf并在指定坐标位置写入内容
  • v-model的简单实现
  • 旧版本Flutter使用xcode16打包上架时报错
  • 国产化Excel处理组件Spire.XLS教程:C# 读取 CSV 文件,从基础读取到 DataTable 转换
  • 常用redis客户端对比
  • 智能引擎驱动软件工业化革命:Gitee PPM如何重塑企业级开发范式
  • 深入解析Web Components:Shadow DOM实战指南