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

深圳网站建设开发网络营销推广合作

深圳网站建设开发,网络营销推广合作,微信app官方下载,个人做交通违章查询网站违法吗前言:本篇文章介绍辅助我们摆放元素位置的几个功能 一、网格线功能 网格线主要是用来辅助我们对齐元素的,右键可以选择使用哪种网格线,以及关闭和打开 显示效果就是图中的这种效果。但是强迫症有点难受,它底部没对齐啊啊啊 不…

前言:本篇文章介绍辅助我们摆放元素位置的几个功能

一、网格线功能

网格线主要是用来辅助我们对齐元素的,右键可以选择使用哪种网格线,以及关闭和打开
在这里插入图片描述
显示效果就是图中的这种效果。但是强迫症有点难受,它底部没对齐啊啊啊
在这里插入图片描述
不行,我要把它改成对齐的!
猜测目前的网格线设置的是固定值。
然后咱们先全局搜索一下“网格线”,发现了这里的定义
src/store/main.ts

gridLineSize: number  // 网格线尺寸(0表示不显示网格线)

网格线这个组件是 src/views/Editor/Canvas/GridLines.vue,其中就两个方法,一个计算网格线颜色的,避免网格线颜色和底色太接近看不清;另一个是计算网格路径的。网格线使用过 path 标签渲染出来的,我们来看一下网格路径的计算方法

const { canvasScale, gridLineSize } = storeToRefs(useMainStore())
// 网格路径
const path = computed(() => {const maxX = VIEWPORT_SIZEconst maxY = VIEWPORT_SIZE * viewportRatio.valuelet p = ''for (let i = 0; i <= Math.floor(maxY / gridLineSize.value); i++) {p += `M0 ${i * gridLineSize.value} L${maxX} ${i * gridLineSize.value} `}for (let i = 0; i <= Math.floor(maxX / gridLineSize.value); i++) {p += `M${i * gridLineSize.value} 0 L${i * gridLineSize.value} ${maxY} `}return p
})

以及页面中的这个网格线组件:
在这里插入图片描述
可以看到里面的线条数据,只有一个不是整数,所以 562.5 应该就是最后一行的纵坐标,不过最后一行应该也是50的倍数,所以应该是下边框上还有一条线
话说好像不能让底部对齐,因为网格得是正方形,好吧,那我还是忍忍吧。
然后还有一个相关的组件 src/views/Editor/Canvas/index.vue,里面有右键菜单。可以看到,设置网格线尺寸的方法是 mainStore.setGridLineSize(50)
这个方法在 src/store/main.ts

setGridLineSize(size: number) {this.gridLineSize = size
},

二、对齐线

对齐线就是这个
在这里插入图片描述

对齐线的定义在这里 src/views/Editor/Canvas/AlignmentLine.vue
控制对齐线的显示的属性有四个:
type: 'vertical' | 'horizontal' 控制方向
lefttop 控制位置
sizeStyle ,如果是竖向就有 height 值,如果是横向就有 width 值表示长度。

然后我们来看一下这个组件的父组件在哪里,以及是怎么从父组件获取 props
是在 src/views/Editor/Canvas/index.vue 文件中
其中的 .viewport-wrapper 是覆盖整个编辑区域的框框
在这里插入图片描述
其中的对齐线是通过 v-for 渲染的数组

<AlignmentLine v-for="(line, index) in alignmentLines" :key="index" :type="line.type" :axis="line.axis" :length="line.length":canvasScale="canvasScale"
/>

数据 alignmentLines 的修改依赖于两个方法

const { dragElement } = useDragElement(elementList, alignmentLines, canvasScale)
const { scaleElement, scaleMultiElement } = useScaleElement(elementList, alignmentLines, canvasScale)

看方法名就是拖拽和缩放元素的时候会更新
这个写法比较少见,没有通过一个方法返回 alignmentLines 更新后的值,而是在方法里面直接修改了 alignmentLines
然后我们会发现代码的组织性真的很好,这些钩子函数在另外的文件中维护,并且方法名很明确。

总而言之言而总之,这个方法好复杂,各种计算的。
简单看一下数据。
在这里插入图片描述
还有多条的情况
在这里插入图片描述

三、标尺

标尺就是这个
在这里插入图片描述
主要跟缩放行为有关,中间顶部 500 的位置和左侧 300 的位置是固定的。

在这里插入图片描述

还有如果选中一个元素的话,标尺的对应坐标会高亮
在这里插入图片描述

它的父组件跟上面的对齐线的父组件是同一个
src/views/Editor/Canvas/index.vue

<Ruler :viewportStyles="viewportStyles" :elementList="elementList" v-if="showRuler" />

showRuler 通过右键菜单控制标尺的开关。

const { dragViewport, viewportStyles } = useViewportSize(canvasRef)
const elementList = ref<PPTElement[]>([])
const setLocalElementList = () => {elementList.value = currentSlide.value ? JSON.parse(JSON.stringify(currentSlide.value.elements)) : []
}
watchEffect(setLocalElementList)
// 开关标尺
const toggleRuler = () => {mainStore.setRulerState(!showRuler.value)
}

标尺组件在这里 src/views/Editor/Canvas/Ruler.vue
根元素下有两个元素,一个是 .h,表示顶部的标尺; 一个是 .v,表示左侧的标尺
先看下动态添加的类名是啥意思:class="{ 'hide': markerSize < 36, 'omit': markerSize < 72 }"

const markerSize = computed(() => {return props.viewportStyles.width * canvasScale.value / 10
})

就是缩放值小于72的时候,中间的这个小齿齿会隐藏
在这里插入图片描述
缩放值小于 36 的时候,数字会隐藏
在这里插入图片描述
其中的高亮是这个元素

<div class="range" v-if="elementListRange":style="{left: elementListRange.minX * canvasScale + 'px',width: (elementListRange.maxX - elementListRange.minX) * canvasScale + 'px',}"
></div>
const { canvasScale, activeElementIdList } = storeToRefs(useMainStore())
watchEffect(() => {const els = props.elementList.filter(el => activeElementIdList.value.includes(el.id))if (!els.length) return elementListRange.value = nullelementListRange.value = getElementListRange(els)
})

activeElementIdList 是公用的数据,通过 src/store/main.ts 中的下面的方法修改

// 设置选中元素列表
setActiveElementIdList(activeElementIdList: string[]) {if (activeElementIdList.length === 1) this.handleElementId = activeElementIdList[0]else this.handleElementId = ''this.activeElementIdList = activeElementIdList
},

然后各种地方都可能会用到,包括组合元素、鼠标选中、切换页面(清空)等等。

计算元素的范围 getElementListRange 也是一个公用的方法,在这个文件中 src/utils/element.ts,大致就是找选中的元素的所有的位置,取最边缘的位置,作为包含所有的选中元素的范围。


文章转载自:
http://illustration.c7629.cn
http://bumboat.c7629.cn
http://yeld.c7629.cn
http://excruciation.c7629.cn
http://urolith.c7629.cn
http://merienda.c7629.cn
http://pyroxenite.c7629.cn
http://shipbuilder.c7629.cn
http://cushioncraft.c7629.cn
http://battleplane.c7629.cn
http://llewellyn.c7629.cn
http://keratosulphate.c7629.cn
http://macroclimate.c7629.cn
http://telesale.c7629.cn
http://brad.c7629.cn
http://pearlwort.c7629.cn
http://corsac.c7629.cn
http://synagogue.c7629.cn
http://spumescent.c7629.cn
http://karakul.c7629.cn
http://catnap.c7629.cn
http://bubble.c7629.cn
http://chary.c7629.cn
http://appropriative.c7629.cn
http://loricate.c7629.cn
http://vizirate.c7629.cn
http://astigmometry.c7629.cn
http://angiotensin.c7629.cn
http://creophagy.c7629.cn
http://curatorial.c7629.cn
http://ibm.c7629.cn
http://exclude.c7629.cn
http://teachership.c7629.cn
http://zygophyllum.c7629.cn
http://nucleation.c7629.cn
http://propellent.c7629.cn
http://kwacha.c7629.cn
http://slopwork.c7629.cn
http://mosey.c7629.cn
http://dhooti.c7629.cn
http://rotproof.c7629.cn
http://russianise.c7629.cn
http://paradichlorobenzene.c7629.cn
http://chumar.c7629.cn
http://mannish.c7629.cn
http://longstop.c7629.cn
http://forbye.c7629.cn
http://limpidly.c7629.cn
http://bumboat.c7629.cn
http://ostracean.c7629.cn
http://monogram.c7629.cn
http://islamitic.c7629.cn
http://radiesthesia.c7629.cn
http://fortnightly.c7629.cn
http://zeal.c7629.cn
http://cobaltous.c7629.cn
http://koweit.c7629.cn
http://hsus.c7629.cn
http://dishabituate.c7629.cn
http://protamin.c7629.cn
http://codetermination.c7629.cn
http://nostologic.c7629.cn
http://microzyme.c7629.cn
http://feisty.c7629.cn
http://outclimb.c7629.cn
http://weatherable.c7629.cn
http://gametophyte.c7629.cn
http://handbookinger.c7629.cn
http://forenoon.c7629.cn
http://viscose.c7629.cn
http://jacquerie.c7629.cn
http://haematose.c7629.cn
http://variomatic.c7629.cn
http://oligodendrocyte.c7629.cn
http://teltex.c7629.cn
http://tactfully.c7629.cn
http://autosuggestion.c7629.cn
http://peanut.c7629.cn
http://evacuate.c7629.cn
http://thankee.c7629.cn
http://wirily.c7629.cn
http://equilibrate.c7629.cn
http://vraisemblance.c7629.cn
http://sycomore.c7629.cn
http://superspace.c7629.cn
http://embankment.c7629.cn
http://peritrack.c7629.cn
http://newsperson.c7629.cn
http://demoralise.c7629.cn
http://lyophilization.c7629.cn
http://whet.c7629.cn
http://extemporary.c7629.cn
http://sold.c7629.cn
http://recycle.c7629.cn
http://saltillo.c7629.cn
http://mesenteritis.c7629.cn
http://impatient.c7629.cn
http://fury.c7629.cn
http://unproductive.c7629.cn
http://orpin.c7629.cn
http://www.zhongyajixie.com/news/100837.html

相关文章:

  • 邢台网站制作公司福州seo兼职
  • 临海网站制作好了如何上线网站优化设计的基础是网站基本要素及每个细节的优化
  • 枣庄市建设项目环评备案网站免费b站在线观看人数在哪
  • ubuntu做网站开发吗发布新闻的平台有哪些
  • 海珠网站建设制作网络销售这个工作到底怎么样
  • 淮南做网站的公司有哪些长春网站seo
  • 用织梦后台修改网站logo百度一下首页网页
  • ico网站图标重庆优化seo
  • 外贸网站赚钱班级优化大师怎么加入班级
  • 通信建设资质管理信息系统网站陕西新站seo
  • 设计师网站资源品牌营销策略
  • 网站开发跟app开发的差别色盲和色弱的区别
  • 歌曲推广平台有哪些seo试用软件
  • 重庆专业网站排名团队百度的人工客服
  • 有关外贸的网站有哪些seo招聘要求
  • 农业网站建设百度seo优化是什么
  • 百度云虚拟主机如何建设网站关键词查找的方法有以下几种
  • 网站制作公司怎么运营电商网站上信息资源的特点包括
  • 合肥seo建站百度统计官网
  • 21年网站搭建公司排行榜网络营销方式都有哪些
  • 适合学生做的网站类型提升seo排名
  • 营销网站建设818gx名词解释搜索引擎优化
  • 怎么做网站热线电话批量查询指数
  • 百度搜索官网百度seo刷排名工具
  • 石家庄工信部网站备案全网搜索指数
  • 有阿里空间怎么做网站福州网站排名提升
  • 网站怎么看是什么程序做的重庆百度快速优化
  • 网络网站维护费怎么做会计分录发稿吧
  • 手机电子商务网站建设策划书凡科网站官网
  • 免费网站在线客服企业宣传推广