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

创新的营销型网站外包软件开发

创新的营销型网站,外包软件开发,长春市网络公司,申请一个电子邮箱号1.引言 在做数字大屏时#xff0c;图表能跟着浏览器的尺寸自动变化#xff0c;本文采用Vue3前端框架#xff0c;采用TypeScript语言#xff0c;封装了一个大屏自适应组件#xff0c;将需要显示的图表放入组件的插槽中#xff0c;就能实现自适应屏幕大小的效果。 2.实际…1.引言 在做数字大屏时图表能跟着浏览器的尺寸自动变化本文采用Vue3前端框架采用TypeScript语言封装了一个大屏自适应组件将需要显示的图表放入组件的插槽中就能实现自适应屏幕大小的效果。 2.实际效果 3.组件代码 /** * ScaleScreen.vue * author: zgr * createTime: 2023/9/22 */templatediv classscreen-wrapper refscreenWrapper :stylewrapperStyleslot/slot/div /templatescript langts setup import { CSSProperties, PropType } from vue import { useFullscreen } from vueuse/core const { toggle } useFullscreen()defineOptions({ name: ScaleScreen }) interface IState {originalWidth: string | numberoriginalHeight: string | numberwidth?: string | numberheight?: string | numberobserver: null | MutationObserver } type IAutoScale | boolean| {x?: booleany?: boolean}const props defineProps({width: {type: [String, Number] as PropTypestring | number,default: 1920},height: {type: [String, Number] as PropTypestring | number,default: 1080},fullScreen: {type: Boolean as PropTypeboolean,default: false},autoScale: {type: [Object, Boolean] as PropTypeIAutoScale,default: true},delay: {type: Number as PropTypenumber,default: 500},boxStyle: {type: Object as PropTypeCSSProperties,default: () ({})},wrapperStyle: {type: Object as PropTypeCSSProperties,default: () ({})},bodyOverflowHidden: {type: Boolean as PropTypeboolean,default: true} })const state reactiveIState({currentWidth: 0,currentHeight: 0,originalWidth: 0,originalHeight: 0,observer: null }) //ref const screenWrapper refHTMLElement()//全屏函数 const toggleFullscreen () {toggle() } //按键F11全屏退出全屏 const KeyDown (event: KeyboardEvent) {if (event.code F9) {toggleFullscreen()} }const listenKeyDown () {window.addEventListener(keydown, KeyDown, true) //监听按键事件 } const removeListenKeyDown () {window.removeEventListener(keydown, KeyDown, false) //监听按键事件 }let bodyOverflowHiddenStr: string /*** 防抖函数* param {Function} fn* param {number} delay* returns {() void}*/ const debounce (fn: Function, delay: number) {let timer: NodeJS.Timeoutreturn function (...args: any[]): void {if (timer) {clearTimeout(timer)}timer setTimeout(() {typeof fn function fn.apply(null, args)clearTimeout(timer)},delay 0 ? delay : 100)} } const initBodyStyle () {if (props.bodyOverflowHidden) {bodyOverflowHiddenStr document.body.style.overflowdocument.body.style.overflow hidden} } const initSize () {return new Promise((resolve) {// console.log(初始化样式);nextTick(() {// region 获取大屏真实尺寸if (props.width props.height) {state.currentWidth props.widthstate.currentHeight props.height} else {state.currentWidth screenWrapper.value?.clientWidthstate.currentHeight screenWrapper.value?.clientHeight}// endregion// region 获取画布尺寸if (!state.originalHeight || !state.originalWidth) {state.originalWidth window.screen.widthstate.originalHeight window.screen.height}// endregionresolve()})}) } const updateSize () {if (state.width state.height) {screenWrapper.value!.style.width ${state.width}pxscreenWrapper.value!.style.height ${state.height}px} else {screenWrapper.value!.style.width ${state.originalWidth}pxscreenWrapper.value!.style.height ${state.originalHeight}px} } const autoScale (scale: number) {if (!props.autoScale) returnconst domWidth screenWrapper.value!.clientWidthconst domHeight screenWrapper.value!.clientHeightconst currentWidth document.body.clientWidthconst currentHeight document.body.clientHeightscreenWrapper.value!.style.transform scale(${scale},${scale})let mx Math.max((currentWidth - domWidth * scale) / 2, 0)let my Math.max((currentHeight - domHeight * scale) / 2, 0)if (typeof props.autoScale object) {!props.autoScale.x (mx 0)!props.autoScale.y (my 0)}screenWrapper.value!.style.margin ${my}px ${mx}px } const updateScale () {// 获取真实视口尺寸const currentWidth document.body.clientWidthconst currentHeight document.body.clientHeight// 获取大屏最终的宽高const realWidth state.width || state.originalWidthconst realHeight state.height || state.originalHeight// 计算缩放比例const widthScale currentWidth / realWidthconst heightScale currentHeight / realHeight// 若要铺满全屏则按照各自比例缩放if (props.fullScreen) {screenWrapper.value!.style.transform scale(${widthScale},${heightScale})return false}// 按照宽高最小比例进行缩放const scale Math.min(widthScale, heightScale)autoScale(scale) }const onResize debounce(async () {await initSize()updateSize()updateScale() }, props.delay)const initMutationObserver () {const observer (state.observer new MutationObserver(() {onResize()}))observer.observe(screenWrapper.value!, {attributes: true,attributeFilter: [style],attributeOldValue: true}) } //设置数字大屏背景颜色为黑色 const setBgColor () {document.getElementsByTagName(body)[0].setAttribute(style, background: black) }onMounted(() {setBgColor()initBodyStyle()nextTick(async () {await initSize()updateSize()updateScale()window.addEventListener(resize, onResize)initMutationObserver()})listenKeyDown() })onBeforeUnmount(() {window.removeEventListener(resize, onResize)removeListenKeyDown()state.observer?.disconnect()if (props.bodyOverflowHidden) {document.body.style.overflow bodyOverflowHiddenStr} }) /scriptstyle scoped langscss .screen-wrapper {transition-property: all;transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);transition-duration: 500ms;position: relative;overflow: hidden;z-index: 100;transform-origin: left top; } /style4.感谢 1.GitHub - Alfred-Skyblue/v-scale-screen: Vue large screen adaptive component vue大屏自适应组件 2.koi-screen-plus: vue3版本数据大屏模板 3.DataV - Vue3 | DataV - Vue3
http://www.dnsts.com.cn/news/153775.html

相关文章:

  • 郑州企业建网站制作金华做网站最专业的公司
  • 企信网查询官网seo是什么意思广东话
  • 网站建设与管理的通知顺口大气三个字公司名字
  • 安丘市住房与城市建设路网站公司汇报网站建设方案
  • 网站开发毕设文档wordpress 电商网站
  • 广东网站建设微信官网开发无锡seo管理
  • 谷歌站长平台wordpress主题支持分页
  • 公司网站建设策划书怎样用源代码做网站
  • 做网站必须注册的商标在阿里云建设一个网站的全流程
  • 网站建设要求报告免费网站建设域名
  • 网站建设经验会议讲话稿正规网站建设学习网公司哪家好
  • 东乡做网站注册一家公司需要多少钱
  • 论坛网站建设软件网页美术设计主要学什么
  • 西安市干部教育网站建设微信seo什么意思
  • 怎么做站旅游网站上泡到妞郑州网站建设及托管
  • pc网站是什么哪个网页设计培训机构好
  • 做网站需要找什么客户西安哪里做网站
  • 网站优化试卷给手机做网站的公司
  • 做网站ps分辨率给多少钱wordpress用户前台
  • 计算机网站建设维护的目的轻量级WordPress
  • 网站架设流程凡科互动小游戏
  • 郑州微网站建设公司名字注册查询
  • 网站建设要实现的目标网站开发工程师绩效
  • 创建网站收费wordpress破解论坛主题
  • 咸阳做企业网站现在写博客还是做网站
  • 学校html网站模板厦门企业网站制作
  • 英语故事网站建设网站开发 请示
  • 网站前台登录模板公司网站建设需要什么资质
  • 何炅做的网站广告济南泰安网站建设公司
  • 苏州工业园区劳动局网站做不了合同域名解析查询工具