当前位置: 首页 > 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.rkmt.cn/news/1522.html

相关文章:

  • [node] Linux 环境安装 nvm 并通过 nvm 控制 node 版本
  • Gitee崛起:中国开发者为何纷纷转向本土代码托管平台
  • Vue.js:大屏开发实战
  • xtrabackup8.0本地备份和恢复(xbstream+gzip)
  • Docker网络
  • 后端Coder如何做好代码设计?
  • 前端调试列出方法和属性
  • Linux /boot 目录详解
  • v-model的简单实现
  • 虚拟列表
  • 条码控件Aspose.BarCode教程:使用 C# 构建 Code11 条形码生成器
  • 物理焦距、像素焦距、像元与相机内参(fx, fy)的意义与作用
  • java课前问题列表
  • vue3中两对容易搞混的概念
  • LoadRunner 对 WebTours 实现订票的性能分析
  • Python游戏开发:使用Pygame库的全面教程
  • 限行提醒小程序介绍
  • AP聚类算法实现三维数据点分类
  • 基于MATLAB的多输入多输出空时分组码通信系统仿真
  • 本土开发者生态崛起:Gitee如何重塑中国软件研发基础设施
  • .net code 连接SAP HANA 数据库
  • CentOS 上独立编译 Linux 内核一般性流程
  • VU9P板卡设计方案:565-基于VU9P的32@ SFP28+4@ QSFP28路光纤交换板卡
  • 黑产群控日损百万?设备ID乱象要如何终结?
  • 西门子分布式IO从站与主站的PN连接
  • Mysql:通用mysql备份脚本:纯shell实现:支持自动包含用户数据库、支持压缩、支持自动清理
  • JBOSS CVE-2017-7504 反序列化漏洞
  • 搞机工具箱v11.0.0免Root调试安卓
  • Gorm自定义数据类型
  • PHP流量控制令牌桶算法