首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在三个js中突出显示距离鼠标指针最近的边

,可以通过以下步骤实现:

  1. 获取鼠标指针的坐标:使用JavaScript的鼠标事件监听器,如mousemove事件,获取鼠标指针的坐标。
  2. 计算鼠标指针与三个边的距离:根据鼠标指针的坐标和三个边的坐标,使用数学公式计算鼠标指针与每条边的距离。
  3. 找到最近的边:比较三个边与鼠标指针的距离,找到最小距离的边。
  4. 突出显示最近的边:通过修改边的样式或添加特定的CSS类,将最近的边突出显示出来。

以下是一个示例代码,用于实现上述功能:

代码语言:html
复制
<!DOCTYPE html>
<html>
<head>
  <style>
    .highlight {
      stroke: red;
      stroke-width: 3px;
    }
  </style>
</head>
<body>
  <svg id="svg" width="400" height="400">
    <line id="line1" x1="100" y1="100" x2="300" y2="100" stroke="black" stroke-width="2"/>
    <line id="line2" x1="100" y1="200" x2="300" y2="200" stroke="black" stroke-width="2"/>
    <line id="line3" x1="100" y1="300" x2="300" y2="300" stroke="black" stroke-width="2"/>
  </svg>

  <script>
    var svg = document.getElementById('svg');
    var line1 = document.getElementById('line1');
    var line2 = document.getElementById('line2');
    var line3 = document.getElementById('line3');

    svg.addEventListener('mousemove', function(event) {
      var mouseX = event.clientX;
      var mouseY = event.clientY;

      var distance1 = getDistance(mouseX, mouseY, line1);
      var distance2 = getDistance(mouseX, mouseY, line2);
      var distance3 = getDistance(mouseX, mouseY, line3);

      var minDistance = Math.min(distance1, distance2, distance3);

      line1.classList.remove('highlight');
      line2.classList.remove('highlight');
      line3.classList.remove('highlight');

      if (minDistance === distance1) {
        line1.classList.add('highlight');
      } else if (minDistance === distance2) {
        line2.classList.add('highlight');
      } else {
        line3.classList.add('highlight');
      }
    });

    function getDistance(x, y, line) {
      var x1 = parseInt(line.getAttribute('x1'));
      var y1 = parseInt(line.getAttribute('y1'));
      var x2 = parseInt(line.getAttribute('x2'));
      var y2 = parseInt(line.getAttribute('y2'));

      var A = x - x1;
      var B = y - y1;
      var C = x2 - x1;
      var D = y2 - y1;

      var dot = A * C + B * D;
      var len_sq = C * C + D * D;
      var param = dot / len_sq;

      var xx, yy;

      if (param < 0 || (x1 === x2 && y1 === y2)) {
        xx = x1;
        yy = y1;
      } else if (param > 1) {
        xx = x2;
        yy = y2;
      } else {
        xx = x1 + param * C;
        yy = y1 + param * D;
      }

      var dx = x - xx;
      var dy = y - yy;

      return Math.sqrt(dx * dx + dy * dy);
    }
  </script>
</body>
</html>

在上述示例代码中,我们使用SVG绘制了三条线段,并为每条线段设置了id属性。通过监听SVG元素的mousemove事件,获取鼠标指针的坐标,并计算鼠标指针与每条线段的距离。最后,根据最小距离的边,添加或移除CSS类来突出显示最近的边。

请注意,这只是一个简单的示例,实际应用中可能需要根据具体需求进行适当的修改和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【jQuery动画】停止动画、淡入淡出、自定义动画

实现效果 代码及思路 总结 ---- 停止动画 使用动画过程,如果在同一元素上调用一以上动画方法,那么对这个元素来说,除了当前正在调用动画,其他动画将被放到效果队列,这样就形成了动画队列...显示效果 https://live.csdn.net/v/embed/243442 淡入淡出 HTML 思路: 1、设置一盒子(box)存放方块; 2、设置一组div方块放在盒子。...当鼠标指针移入时,正常显示鼠标指针移出时,设置成半透明效果,效果如下 $(document).ready(function () { $("....代码演示 实现效果 自定义动画 代码及思路 思路: 1、定义按钮,定义div元素; 2、设置盒子大小、颜色、绝对定位(position:absolute),绝对定位盒子是相对于离它最近已定位盒子进行定位...,默认是body; 3、给定义按钮绑定点击事件; 4、设置动画,当单击鼠标时,div元素运动到距离左侧500px,距离顶部300px位置,透明度为0.4,宽度为500px; <!

2.4K20

CAD常用基本操作

(U)](此处可参考帮助F1) 小提示:a (E):确定对象是在另一对象延长处进行修剪,还是仅在三维空间中与该对象相交对象处进行修剪([延伸(E)/不延伸(N)]) b express插件使用...选择一条直线后,按住Shift再选择另一条可以快速在两条直线之间生成角点(即生成一角,修剪突出直线部分) 30 倒角命令 chamfer(CHA) A 距离(D):指定倒角距离 B 角度(A...):指定一距离,再通过指定第一条直线夹角来生成倒角 C 方式(E):控制 CHAMFER 使用两距离还是一距离和一角度来创建倒角 D 三维倒角中环形倒直角所选环必须在之前所选基准面上(三维倒角必须选择必须指定要倒角相邻表面为基准表面...42 编辑长度命令 lengthen(LEN) A 增量(DE):以指定增量修改对象长度,该增量从距离选择点最近端点(与端点选择位置有关)处开始测量。...差值还以指定增量修改弧角度,该增量从距离选择点最近端点处开始测量。

5.4K50

精读《自由布局吸附线实现》

自由布局吸附线效果如下图所示: 那么如何实现吸附线呢?我们先归纳一下吸附线特征: 正在拖动 box 与其他 box 在水平或垂直位置距离接近时,会显示对齐线。...根据这些规则,我们首先要实现就是判断当前拖动 box 与哪些组件足够接近。 判断 box 离哪条最近 距离最近可能不止一条,水平与垂直位置要分别判断。我们以水平位置为例,垂直同理。...拖动 box 在水平位置可能有 上、、下 三条可以产生吸附,而其他 box 同样也有 上、、下 三条可以与之产生交互,因此对于每一目标 box,我们需要计算 9 距离: source 上 vs...,所以按照 source 聚合一下每条最近 target : source 上 vs min(target 上、、下) = min 上 source vs min(target 上、、下)...source 所有位置最小距离筛选 min 上、min 、min 下,留下来就是要 source 距离 target 水平位置最近吸附线。

23660

《前端图形学实战》几何学在前端边界计算应用和原理分析

计算鼠标指针是否在矩形内部 有了上面的坐标体系, 我们就来解决矩形边界问题。...下一步就是获取任意点坐标, 为了方便演示, 这里以鼠标指针作为点(x, y), 我们再来构造一画布: image.png 我们以画布左上角作为坐标原点(0,0), 来计算一下鼠标在画布相对位置...计算鼠标指针是否在圆内部 上面分享了判断一点是否在矩形实现方案, 接下来我们继续探索圆形边界问题。...(当然我们也可以用其他方式定义一圆, 这里方案只做参考) 同时由于圆特殊性, 我们要判断一点是否在圆内, 只需要判断这个点和圆心直线距离是否大于半径(r)即可。...计算鼠标指针是否在三角形内部 image.png 要想解决这个问题, 我们需要先解决如何使用 HTMLDiv 画一三角形。

1.2K20

《前端图形学实战》几何学在前端边界计算应用和原理分析

计算鼠标指针是否在矩形内部 有了上面的坐标体系, 我们就来解决矩形边界问题。...下一步就是获取任意点坐标, 为了方便演示, 这里以鼠标指针作为点(x, y), 我们再来构造一画布: image.png 我们以画布左上角作为坐标原点(0,0), 来计算一下鼠标在画布相对位置...计算鼠标指针是否在圆内部 上面分享了判断一点是否在矩形实现方案, 接下来我们继续探索圆形边界问题。...(当然我们也可以用其他方式定义一圆, 这里方案只做参考) 同时由于圆特殊性, 我们要判断一点是否在圆内, 只需要判断这个点和圆心直线距离是否大于半径(r)即可。...计算鼠标指针是否在三角形内部 image.png 要想解决这个问题, 我们需要先解决如何使用 HTMLDiv 画一三角形。

1.2K10

Pycharm最常用快捷键及使用技巧

3.10:使用代码完成时,您可以使用Tab键在弹出列表接受当前突出显示选择。 与使用Enter键接受不同,选定名称将覆盖脱字符右侧其余名称。 这对于用另一替换一方法或变量名是特别有用。...3.22:使用Ctrl + Shift + F7(Edit | Find |突出显示文件用法)快速突出显示当前文件某些变量用法。 使用F3和Shift + F3键浏览突出显示用法。...按Esc删除突出显示。 3.23:要查看您本地文件更改历史记录,请调用本地历史记录| 显示上下文菜单历史记录( Local History | Show History)。...3.30:为了帮助您了解主菜单每个项目的用途,将鼠标指针放在该项目上时,其简短说明会显示在应用程序框架底部状态栏。...3.32:使用Alt + Shift + C快速查看您最近对项目的更改。 3.33:您可以通过拖动鼠标指针轻松进行列选择,同时保持按下Alt键。

2.7K20

HTML5魔法堂:全面理解Drag & Drop API

dropEffect 作用:用于设置目标元素将执行操作,若属性值属于 effectAllowed 范围内,则鼠标指针显示对应指针样式,否则则显示禁止指针样式。...取值范围: copy :被拖拽元素将被复制到目标元素内,若属于 effectAllowed 范围内时,则鼠标指针显示复制样式,否则则显示禁止指针样式。...link :被拖拽元素将以超链接形式打开资源(具体是否打开资源请参考七、2),若属于 effectAllowed  范围内时,则鼠标指针显示超链接样式,否则则显示禁止指针样式。...move :被拖拽元素将被移动到目标元素内,若属于 effectAllowed   范围内时,则鼠标指针显示移动样式,否则则显示禁止指针样式。...仅能在 dragover 事件设置该属性值,其他事件设置均无效   2. 当显示禁止指针样式时,将无法触发目标元素 drop 事件。 [c].

4K100

Fabric.js 右键菜单

---- PK创意闹新春,我正在参加「春节创意投稿大赛」,详情请看:春节创意投稿大赛 本文简介 Fabric.js 默认**没提供 鼠标右键事件**,只有 鼠标按键点击 、鼠标按键抬起 、鼠标移动 等事件...本文主要关注 Fabric.js 主要 api 有: fireRightClick:允许右键点击 stopContextMenu:禁用默认右键菜单 mouse:down:鼠标点击事件 如果不知道 Fabric.js...,菜单在鼠标左侧,菜单在鼠标上方,菜单在鼠标下方); 左键单击画布其他地方,隐藏菜单; 实现思路: 创建画布; 创建 “菜单” DOM元素; 去官网查找 “右键相关事件”; 右键单击在元素上,根据鼠标离画布边缘距离...,计算菜单要显示位置; 左键单击在画布上,隐藏菜单; 实现 查文档 在上面的思路,其实难点只有 “右键相关事件” 。.../ 如果鼠标靠近画布右侧,菜单就出现在鼠标指针左侧 if (canvas.width - pointX <= menuWidth) { pointX -= menuWidth

7K10

CAD 初级教程

状态栏:左侧为信息提示区,用以显示当前指针坐标值和工具按纽提示信息等,右侧为功能按纽区,单击不同功能按纽,可以开启对应功能,提高做图速度。...捕捉用于确定鼠标指针每次在X、Y方向移动距离。栅格仅用于辅助定位,打开时屏幕上将布满栅格小点。...右击,单击设置,在对象捕捉选项卡勾选捕捉点类型。 对象追踪F11:配合对象捕捉使用,在鼠标指针下方显示捕捉点提示(长度,角度)。 线宽:线宽显示之间切换。...2、“距离(D)”:设置倒角距离尺寸。 3、“角度(A)”:可以根椐第一倒角距离和角度来设置倒角尺寸。 4、“修剪(T)”:设置倒角后是否保留原拐角。...在三维空间中指定两点后,如点(0,0,0)和点(1,1,1),这两点之间连线即是一条3D直线。

5.7K00

HTML新手上路随笔

但是使用js等效果的话,id必须唯一,不然js识别不到!...vspace,hspace:表示运动区域边界水平距离和垂直距离,以像素或百分比值设置垂直距。 width,height:表示运动区域宽度和高度,以像素或百分比值设置高度。...align:表示元素垂直对齐方式,值可以是top,middle,bottom,默认为middle 6.鼠标悬停事件 //表示当鼠标以上区域时候滚动停止 onmouseover=this.stop... CSS cursor 属性 请把鼠标移动到单词上,可以看到鼠标指针发生变化: <span style="cursor...状态 判断css和<em>js</em>是否外联成功,一<em>个</em>是打开谷歌浏览器调试选定相应元素查看style,另一<em>个</em>就是找到调试<em>中</em><em>的</em>Network 模块 (Ctrl+ R)看有没有外联文件

72250

2014版CAD操作教程(全)

状态栏:左侧为信息提示区,用以显示当前指针坐标值和工具按纽提示信息等,右侧为功能按纽区,单击不同功能按纽,可以开启对应功能,提高做图速度。...捕捉用于确定鼠标指针每次在X、Y方向移动距离。栅格仅用于辅助定位,打开时屏幕上将布满栅格小点。...右击,单击设置,在对象捕捉选项卡勾选捕捉点类型。 对象追踪F11:配合对象捕捉使用,在鼠标指针下方显示捕捉点提示(长度,角度)。 线宽:线宽显示之间切换。...打开图形选项卡:显示当前所选图形一此属性。 历史记录选项卡:记录最近打开文件。 在AutoCAD 2004,使用AutoCAD设计中心可以完成如下工作。...2、“距离(D)”:设置倒角距离尺寸。 3、“角度(A)”:可以根椐第一倒角距离和角度来设置倒角尺寸。 4、“修剪(T)”:设置倒角后是否保留原拐角

6.2K10

js 实现元素拖拽

概述 js 实现拖拽,主要使用元素 onmousedown、onmousemove、onmouseup 三事件实现。...1、onmousedown:鼠标按下事件 2、onmousemove:鼠标移动事件 3、onmouseup:鼠标抬起事件 实现思路 我们当左键点击时,需要记录当前鼠标点击位置相对于该元素左上角x,y...坐标,这里我们使用diffX和diffY来表示 然后我们移动时需要不断计算当前元素距离浏览器左边和上边距离; 同时给元素进行赋值; 当鼠标抬起时,取消鼠标移动事件和鼠标抬起事件。...; //做到浏览器兼容 e = e || window.event; // 计算鼠标点击位置相对于元素左上角左边和上边距离...clientX 和 clientY 默认是以元素左上角位置来计算,这里需要向左向上同时减去鼠标点击位置差,从而可以保证鼠标始终显示在拖拽元素时位置

9.8K30

Cursor Pro for mac(鼠标指针放大高亮工具)

Cursor Pro Mac版是一款鼠标指针放大高亮工具,可以让您Mac电脑鼠标指针凸显,使用Cursor Pro,您可以将其用作放大镜,轻而易举找到鼠标所在位置,所有这些都来自一精心设计、使用有趣应用程序...它是完全可定制:选择您希望指针突出显示方式,包括圆形、赏心悦目的松鼠和菱形菱形。立即下载:https://www.macw.com/mac/4212.html?...id=MjU2NjEmXyYyNy4xODcuMjI2LjE1MQ%3D%3D功能介绍可自定义光标突出显示:选择您喜欢形状、大小、重量、边框样式、发光、动画和颜色。...在您 Dock、状态栏或两者显示应用程序。• 自动启动:登录时自动启动应用程序。...适用于屏幕共享应用程序,如 Zoom、Google Hangout 或 Skype(但共享您整个屏幕,而不仅仅是一窗口!)

2.1K50

从0开始学习之bluecms(1)

0x00前言 距离上一次更新,还是在三月份。主要是我最近太忙了无时间更新(挖src,挖cnvd,学业and so on),近期开始会陆续更新了。...在最近跟学长一起挖cnvd之中也是学到了不少关于代码审计知识,这里手动@Xpr0a.c yyds。挖SQL和rce如喝水。 想看我5月份cnvd证书照片请于一段时间后到我空间看看(还没归档)。...入门代码审计,大家通常会选择从bluecms开始审计,我也就从这个cms开始更新吧(我也是更新) 0x01正文 我使用环境php5.4.45+apache 重装覆盖漏洞 我们先走正常流程搭建好网站如下...让我们回到刚才文件 可以发现数据是从这里利用GET方式进入,当参数不为空时,trim函数会去除字符串两侧空格,所以对我们没什么影响 这里可以发现文件上方引用了另外一文件 可以发现,当没有开启魔术引号时候就进入下面这处对数据输入进行一定地处理...16进制即可如下: /ad_js.php?

76610

月千之夜

这个是2012年做游戏。 ======== 主角控制方式: 右键移动, 按Q键角色会朝鼠标方向冲刺,冲刺位移距离大,但是冲刺过程不是无敌,且伤害一般。...按W键将会朝鼠标方向发个子弹,子弹击中敌人会使敌人出现暂时无法动弹状态,伤害很高。 按E键会旋转移动,类似LOL里盖伦E,同样过程不是无敌,伤害一般。...说到游戏故事主线,这个故事世界观非常庞大,为了这个故事,我画过对应漫画,做过视频,也出过游戏。在众多半成品平行世界作品,这个世界是我最想展示出来,但是这次暂时就先不介绍这个故事了。...然后除了这些外,游戏引擎制作过程中会产生很多碎片化功能片段,大部分片段可以重复使用,于是增加一“收破烂”js。最后还要在对应js上留一些后门用来调试。...所有的这些,全是靠对游戏制作理解来完成,只是恰巧用了js来实现。我觉得这就是游戏人,所以也一直以游戏人自居,而不是一程序员。

762110
领券