页面上有两颗星星图标,画一条线连接两颗星星。

1.先获取两点的坐标   2.计算弦长及旋转角度   3.绘制线

<div class="quality-analysis"><div class="cnt-box"><span  class="selected-start"><svg class="icon fs16 warn-text icon-orange " aria-hidden="true"><use xlink:href="#h-delete-collect"></use></svg></span><span  class="selected-start"><svg class="icon fs16 gray-text" aria-hidden="true"><use xlink:href="#h-collect"></use></svg></span> </div>
</div>
<script>export default {data() {return {positionList: [], // 获取坐标}},mounted() {this.getStartPosition()this.drawLine(this.positionList)},methods: {// 获取星星坐标getStartPosition() {let nodeList = document.querySelectorAll('.selected-start')let parentNode = document.querySelector('.cnt-box').offsetParentlet actualLeft = 0let current = 0let actualTop = 0if(nodeList.length>0){for(let i=0;i<nodeList.length;i++){actualLeft = nodeList[i].offsetLeft  // 累加计算星星相对于顶级父元素的距离actualTop = nodeList[i].offsetTopcurrent = nodeList[i].offsetParentwhile(current!== parentNode){actualLeft += current.offsetLeftactualTop += current.offsetTopcurrent = current.offsetParent}let obj = {x:actualLeft,y:actualTop,}this.positionList.push(obj)}}},// 画星星连线drawLine(positionList) {if(positionList.length>0){for(let i=1;i<positionList.length;i++){// 计算长宽let rectWidth = Math.abs(positionList[i].x - positionList[i-1].x)let rectHeight = Math.abs(positionList[i].y - positionList[i-1].y)// 在页面确定div左上角的具体位置let rectX = positionList[i].x < positionList[i-1].x ? positionList[i].x : positionList[i-1].xlet rectY = positionList[i].y < positionList[i-1].y  ? positionList[i].y : positionList[i-1].y// 弦长let stringWidth = Math.ceil(Math.sqrt((rectWidth * rectWidth)+ (rectHeight*rectHeight)))let xPad = (rectWidth - stringWidth)/2let yPad = (rectHeight - 2)/2// 从x轴到(x,y)的旋转角度let radNum = Math.atan2((positionList[i].y - positionList[i-1].y),(positionList[i].x - positionList[i-1].x))let  traX  = rectX +  xPad - 8 // 8为星星图标大小的1/2let  traY  = rectY +  yPad + 8// 创建divlet div = document.createElement('div')div.innerHTML = '<div ' +' style = "width:' + stringWidth + 'px;height:2px;transform:translate(' + traX+ 'px,' + traY +'px) rotate('+ radNum+ 'rad) " class="draw-line-style"></div>'let doc = document.querySelector('.quality-analysis')doc.appendChild(div)}}}}}
</script>

说明:

<style lang="scss">.quality-analysis {position: relative;.draw-line-style{top: 0;position: absolute;border-top: 1px solid $bgOrange;}
</style>

1.每个元素都有offsetTop和offsetLeft属性,表示该元素的左上角与父容器(offsetParent对象)左上角的距离。所以,只需要将这两个值进行累加,就可以得到该元素的绝对坐标。

2.atan2(y,x) :返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。

画一条连接两点的线,由两点坐标确定一条直线相关推荐

  1. 编写一个Applet,画出20条水平的、随机颜色的平行线。要求线的长度相同,整条线段都要在可视区域内

    编写一个Applet,画出20条水平的.随机颜色的平行线.要求线的长度相同,整条线段都要在可视区域内. ` package p2; import java.applet.Applet; import ...

  2. 画一条0.5px的线

    1.直接设置0.5px,在不同的浏览器会有差异( 不同系统的不同浏览器对小数点的px有不同的处理) //画一条0.5px的线 <!DOCType html> <html> &l ...

  3. CAD画图教程:CAD怎么画一条指定长度的线?

    在CAD入门学习过程中,画直线是基础操作之一,所以一定要对此熟练掌握才可以.那你知道CAD怎么画一条指定长度的线吗?本节CAD画图教程就和小编一起来了解一下在浩辰CAD软件中怎么画一条指定长度的直线吧 ...

  4. ArcGIS技巧(一)画一条特别直的线要素

    问题:在画线要素时点击起点终点后经常画不出一条特别直的线(有锯齿). 解决:点击起点后,不要着急点击终点,此时右键选择<方向>,输入0,回车. 在点击终点,就是一条特别直的线了.

  5. 手绘线条一直画不直_板绘画线手抖?线画不直?板绘练习画线技巧攻略!

    板绘画线手抖?线画不直?很多人画画都时先画草稿再线稿最后上色,所以线条就非常重要!但这对于刚接触手绘板的小伙伴不太友好,毕竟使用板绘跟使用纸和笔画画的差别还是蛮大的.因此,就会遇到连条流畅圆滑的线都画 ...

  6. 7-5 两点成线 (10 分) JAVA PTA

    7-5 两点成线 (10 分) 都说两点确定一条直线,那么设计一个直线类Line,需要通过两个点Point对象来确定.Line类具体要求如下: 1)定义两个Point对象p1,p2: 2)写出有参构造 ...

  7. 使用MATLAB的EEGLAB和BCT工具箱画脑网络连接图

    使用MATLAB的EEGLAB和BCT工具箱画脑网络连接图 一.EEGLAB工具箱插件-FCLAB,以及BCT工具箱 1.1 FCLAB插件及BCT工具箱 1.2 使用GUI界面操作 一.EEGLAB ...

  8. 如何连接成组箱线图中的平均值(seaborn)

    项目场景: 师妹想要如下图的效果 问题描述: 理所应到得想到用箱线图组合折线图就可以,但出来的图发现不对劲: 点并不在箱线图之上,而是按照坐标点成一条竖线 解决方案: 为pointplot函数加入do ...

  9. 【css画圆圈用线连接】

    CSS画圆圈用线连接 画圆圈中间有数字1.2.3.之间用线连接 1画圆 .circle1_circle{/*border-radius: 50%; */display: inline-block;wi ...

  10. 如何由两点坐标确定一条直线的ax+by+c=0表达式

    如何由两点坐标确定一条直线的ax+by+c=0表达式 比如已知两坐标: (x1,y1),(x2,y2); 对于表达式ax+by+c=0; a=?,b=?,c=?; y=kx+m, y1=kx1+m y ...

最新文章

  1. LeetCode刷题记录12——232. Implement Queue using Stacks(easy)
  2. TinyXml高速入门(一)
  3. 创客编程帮助孩子提升学习成绩,是一项长远投资!
  4. leetcode刷题实录:4
  5. html 给 ol添加abc,英语abc怎么写
  6. Android Studio生成aar包的方法以及解压aar包的方法
  7. compare to造句及翻译_compare to造句
  8. linux 升级java_linux 升级jdk1.8
  9. host 端口_如何让多端口网站用一个nginx进行反向代理实际场景分析
  10. Java关键字——final的用法
  11. 阿里再度开源重磅技术!95% 程序员都需要了解
  12. 【RF】射频集成电路与系统设计
  13. c# 图片批量转双层PDF,OFD格式文件
  14. 渲染到纹理(Render To Texture, RTT)
  15. 未来十大最热门职业,可能消失的职业
  16. 用css使图片产生毛玻璃效果
  17. 2. Mac 命令行走代理服务器
  18. 2023复旦大学计算机考研经验分享
  19. Arm物联网全面解决方案加速产业创新,赋能开发者多样化市场
  20. Android刷新页面

热门文章

  1. docker搭建redis高可用集群
  2. c语言的链表实验总结,链表实现集合实验报告_相关文章专题_写写帮文库
  3. 因子IC、IR信息系数和信息比率的介绍
  4. 如何保护企业电子邮件安全,个人电子邮箱怎么注册?
  5. Flutter 网络请求框架dio使用详解
  6. Win10官网系统U盘启动盘制作工具下载地址
  7. JS读取字幕srt文件内容
  8. 编程小知识:文件扩展名的作用是什么?通俗易懂的文件扩展名详解
  9. docker部署svn
  10. CycloneDDS(4)Security插件图解