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

第一次控制JQuery对象跳转的SVG可拖动元素

基础概念

JQuery 是一个快速、小巧且功能丰富的 JavaScript 库,它简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。

SVG (Scalable Vector Graphics) 是一种基于 XML 的图像格式,用于描述二维矢量图形。SVG 图形可以无损地缩放到任何大小,并且可以在浏览器中直接嵌入和交互。

可拖动元素 指的是用户可以通过鼠标或触摸屏等设备在屏幕上移动的元素。

相关优势

  1. JQuery: 简化了 DOM 操作,提供了丰富的插件和工具,易于学习和使用。
  2. SVG: 图形质量高,支持复杂的动画和交互,文件大小相对较小。
  3. 可拖动元素: 提供了更好的用户体验,增强了用户与页面的互动性。

类型

  • 基于 JQuery UI 的拖动功能: JQuery UI 提供了一套完整的拖放 API。
  • 自定义拖动功能: 使用 JQuery 和原生 JavaScript 实现拖动效果。

应用场景

  • 数据可视化工具(如仪表盘、图表)
  • 交互式地图
  • 游戏和娱乐应用
  • 教育和培训材料

示例代码

以下是一个简单的示例,展示如何使用 JQuery 和 SVG 创建一个可拖动的圆形元素。

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Draggable SVG Circle</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <style>
        #draggable {
            cursor: move;
        }
    </style>
</head>
<body>
    <svg width="500" height="500">
        <circle id="draggable" cx="50" cy="50" r="20" fill="blue"></circle>
    </svg>

    <script>
        $(document).ready(function() {
            var svg = document.querySelector('svg');
            var circle = document.getElementById('draggable');

            var startX, startY, initialX, initialY;

            circle.addEventListener('mousedown', function(event) {
                event.preventDefault();
                initialX = event.clientX - parseFloat(circle.getAttribute('cx'));
                initialY = event.clientY - parseFloat(circle.getAttribute('cy'));
                document.addEventListener('mousemove', onMouseMove);
                document.addEventListener('mouseup', onMouseUp);
            });

            function onMouseMove(event) {
                circle.setAttribute('cx', event.clientX - initialX);
                circle.setAttribute('cy', event.clientY - initialY);
            }

            function onMouseUp() {
                document.removeEventListener('mousemove', onMouseMove);
                document.removeEventListener('mouseup', onMouseUp);
            }
        });
    </script>
</body>
</html>

可能遇到的问题及解决方法

  1. 元素无法拖动:
    • 确保 mousedown 事件正确绑定到元素上。
    • 检查是否有其他 CSS 属性(如 position: fixed)阻止了元素的移动。
  • 拖动时页面滚动:
    • mousedown 事件中添加 event.preventDefault() 阻止默认行为。
  • 拖动超出 SVG 边界:
    • onMouseMove 函数中添加边界检查,确保元素不会超出 SVG 的宽度和高度。

参考链接

通过以上内容,你应该能够理解如何使用 JQuery 控制 SVG 可拖动元素,并解决一些常见问题。

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

相关·内容

vue 中基于html5 drag drap拖放

直接看代码好了,反正是给我自己看):左边列表元素拖动(draggable=’true’),绑定dragstart(开始事件),不要给它绑定draging(拖动事件),这样左边列表元素拖动属性,但是位置不会改变...当右侧拖动区域 第一次触发了drop 操作后,新生成一个对象,这个对象既有拖动(draggable=’true’)属性,也绑定dragstart(开始事件),拖动事件(drag),这样新元素会在右侧随意拖动...每次拖动元素都会触发drop 事件,并不是每次都要生成一个新元素,要知道是从左边列表拖到右侧第一次drop 时候生成新元素。怎么知道呢?...,如果是第一次需要新生成对象,否则不需要 */ if (info.isDrop) { var x = e.clientX var y = e.clientY...,可以分享一下,基于jquery 拖拽插件,我用过几个,但是总觉得vue中用jq有点怪。

1.4K00

jQuery ui中sortable draggable droppable使用

最近工作中用到了jQuery UI中排序和拖拽功能,花了大概一天时间,搞清楚了大概参数配置,以及遇到一些问题,总结如下。...handle:'.sort-at', // 在对象内指定元素上开始拖动,而不是整个元素都可以拖动 distance: 10, opacity: 0.8, containment...// 拖动时使用是clone元素。如果值设置为"clone", 那么该元素将会被复制,并且被复制元素将被拖动。...否则第一次初始化后,比如某个地方A可以放置拖拽元素,但是第二次初始化后,地方A就不可以放置了。然而实际上,如果你不把第一次初始化dropInit函数销毁掉,地方A在第二次初始化后还是可以放置。...dropable dropInit() { let me = this; // 题目放置(设置题目根据不同类型可以放置不同分页) // selector是可变,也就是每次拖拽元素可放置元素是不同

2.2K10
  • H5新增特性及语义化标签

    同时 video 元素也提供了 width 和 height 属性控制视频尺寸.如果设置高度和宽度,所需视频空间会在页面加载时保留。...绘图   SVG是指伸缩矢量图形 SVG 与 Canvas两者间区别   SVG 是一种使用 XML 描述 2D 图形语言。   ...SVG 基于 XML,这意味着 SVG DOM 中每个元素都是可用。您可以为某个元素附加 JavaScript 事件处理器。   在 SVG 中,每个被绘制图形均被视为对象。...在 HTML5 中,拖放是标准一部分,任何元素都能够拖放。   拖放过程分为源对象和目标对象。源对象是指你即将拖动元素,而目标对象则是指拖动之后要放置目标位置。...拖放对象(可能发生移动)可以触发事件——3个: dragstart:拖动开始 drag:拖动中 dragend:拖动结束 整个拖动过程组成: dragstart*1 + drag*n + dragend

    2.3K30

    HTML5新特性

    HTML5新特性-SVG绘图(Scalable Vector Graph:缩放矢量图) ?...拖动对象(会动)可以触发事件: ①. dragstart:拖动开始 ②. drag:拖动中 ③. dragend:拖动结束 整个拖动过程: dragstart*1 + drag*n +...拖动目标对象(不动)可以触发事件: ①. dragenter:拖动着进入(取决于鼠标进入没有) ②. dragover:拖动着悬停在上方 ③. dragleave:拖动着离开 ④. drop:在上方释放...如何在拖动对象和目标对象间传递数据? ①. 方法一,使用全局变量,便会造成全局污染 ②....在拖动对象和目标对象间传递数据,拖动开始时(src.ondragstart)记录被拖动元素ID,释放时(target.ondrop)根据ID查找拖动对象,进行相关操作: 方法1:使用一个全局变量

    7.7K30

    Canvas 基本绘制(上)

    HTML5学堂:之前文章与大家分享了SVG一系列操作,但是SVG也是存在一些劣势,所以今天开始为大家分享介绍HTML5 Canvas相关知识,Canvas是什么呢?...又如何进行Canvas进行图像绘制呢?在Canvas当中有哪些绘制图形方法?来看看下面的文章吧。 Canvas与SVG比较 ?...canvas元素本身并没有绘制能力(它仅仅是图形容器) - 您必须使用脚本来完成实际绘图任务。...Canvas基本知识 - getContext对象 getContext()方法返回一个对象,该对象提供了用于在画布上绘图方法和属性。...线段起始点和结束点由锚点标记,就像用于固定线针。 通过编辑路径锚点,您可以改变路径形状。 您可以通过拖动方向线末尾类似锚点方向点来控制曲线。路径可以是开放,也可以是闭合

    1.5K130

    现代前端技术解析:前端三层结构与应用

    动画实现 通常实现动画方式有如下几种:(1)JavaScript直接实现动画;(2)伸缩矢量图形SVG动画;(3)CSS transition;(4)CSS3 animation;(5)Canvas...,很耗性能】; SVG内部元素动画只能在元素内进行,超出标签元素,就可以认为是超出了动画边界; transition不能实现独立动画,只能在某个标签元素样式或状态改变时进行平滑动画效果过渡...,而不是马上改变; CSS3 animation可以认为是正真意义上CSS3动画,通过对关键帧和循环次数控制【脱离JavaScript控制,能用到硬件加速】; Canvas动画通过JavaScript...(1)zoom属性控制方案 ​ 如果希望在320px宽度屏幕上显示内容在414px宽度屏幕上进行等比例自动放大,可以考虑使用元素CSSzoom属性来解决。...(2)REM屏幕适配方案 ​ CSS大小尺寸表示单位主要有像素px、相对父元素大小百分比%、相对于当前对象内文本字体font-size大小em、相对于文档根元素font-size大小rem。 ​

    1.1K31

    web前端学习:HTML5十个新特性

    黄色(警告)=>绿色(优秀)                    :输出内容,语义上表示此处数据是经过计算而输出得到            3)表单元素新属性                   ...(五)SVG绘图                     Scalable Vector Graphic,缩放向量图 在H5标准之前使用方法:SVG标签不能直接书写在网页中,只能编写在独立XML文档中...Canvas与SVG不同: (1)Canvas是位图;SVG是矢量图 (2)Canvas是JS绘图技术(不是DOM元素);SVG是标签绘图技术(是DOM元素) (3)Canvas内容不能使用CSS;SVG...H5之后专门提供了七个鼠标拖动相关事件句柄: 拖动对象(source)可能触发事件:                     dragstart:拖动开始                    ...drag:拖动中                     dragend:拖动结束  拖动目标对象(target)可能触发事件:                     dragenter:拖动进入

    2.9K10

    面试必问——前端页面性能指标基本介绍

    ,到浏览器开始显示内容时间,简而言之就是浏览器第一次发生变化时间。...TTI,翻译为“交互时间”表示网页第一次完全达到交互状态时间点。...2. performance介绍 performance 对象是专门用来用于性能监控对象,内置了一些前端需要性能参数。...2.动画:每个帧工作(从 JS 到绘制)完成时间小于 16 毫秒。用户滚动页面,拖动手指(例如,打开菜单)或看到动画。拖动时,应用响应与手指位置有关(例如,拉动刷新、滑动轮播)。...该过程将持续到用户第一次滚动页面或第一次用户输入(鼠标点击,键盘按键等),也就是说,一旦用户与页面开始产生交互,则停止报告新性能条目。 上面两张图都是在页面加载过程中,最大元素发生变化。

    3.3K41

    Web思维导图实现技术点分析(附完整源码)

    "children": [] } 详细结构参考:节点结构。...this.draw = this.svg.group() 所以拖动、放大缩小都是操作这个g元素,对它应用相关变换即可。...g元素来包裹,相关变换效果也是应用在这个元素上,我们思路是先去除它放大缩小效果,这样能获取到它原本宽高,然后把画布也就是svg元素调整成这个宽高,然后再想办法把g元素移动到svg位置上和它重合...,这样导出svg刚好就是原大小且完整,导出成功后再把svg元素恢复之前变换及大小即可。...总结 本文介绍了实现一个web思维导图涉及到一些技术点,需要说明是,因笔者水平限制,代码实现上较粗糙,而且性能上存在一定问题,所以仅供参考,另外因为是笔者第一次使用svg,所以难免会有svg方面的错误

    3.2K61

    HTML5新特性

    number: 数值输入域,并使用max与min属性控制范围。 表单元素 : 定义选项列表,与input元素配合使用该元素。...,即捉取对象以后拖到另一个位置,在HTML5中,拖放是标准一部分,任何元素都能够拖放。...ondragenter: 当拖动元素或选中文本到一个释放目标时触发。 ondragexit: 当元素变得不再是拖动操作选中目标时触发。...ondragleave: 当拖动元素或选中文本离开一个释放目标时触发。 ondragover: 当元素或选中文本被拖到一个释放目标上时触发,每100毫秒触发一次。...ondragstart: 当用户开始拖动一个元素或选中文本时触发。 ondrop: 当元素或选中文本在释放目标上被释放时触发。

    1.6K20

    《最新出炉》系列初窥篇-Python+Playwright自动化测试-64 - Canvas和SVG元素推拽

    svg绘制出来图是不会SVG英文全称为Scalable vector Graphics,意思为缩放矢量图,这种元素比较特殊,需要通过 name() 函数来进行定位。...3.SVG元素拖拽3.1svg拖拽demo1.svgcircle元素是可以拖动,宏哥网上找了半天没有找到,然后自己动手写一个demo用于演示(可以看到circlecx和cy在拖拽过程中不断发生变化..."draggable-circle"> // 获取SVG容器和拖拽元素 const svgContainer...demo来演示拖拽,其实在我们上一篇中掌握如何定位svg元素后,拖拽就非常简单了,无非就是一些鼠标的操作事件罢了。...如下图所示:4.canvas元素拖拽4.1canvas拖拽demo1.canvas下元素是可以拖动,宏哥网上找了半天没有找到,然后自己动手写一个demo用于演示(可以看到circlestyle在拖拽过程中不断发生变化

    22020

    HTML5 新特性_CSS3新特性

    使用 DOM 进行控制: (1)HTML5 元素同样拥有方法、属性和事件; (2)方法用于播放、暂停以及加载等。...,即抓取对象以后拖到另一个位置 (2)在 HTML5 中,拖放是标准一部分,任何元素都能够拖放 2.拖动相关设置: (1)设置元素拖放: 首先,为了使元素拖动,把 draggable 属性设置为...("Text",ev.target.id); } 数据类型是 “Text”,值是拖动元素 id (“drag1”) (3)放到何处 – ondragover: ondragover 事件规定在何处放置被拖动数据...(5)SVG 是万维网联盟标准 2.SVG 优势: (1)SVG 图像可通过文本编辑器来创建和修改 (2)SVG 图像可被搜索、索引、脚本化或压缩 (3)SVG伸缩 (4)SVG 图像可在任何分辨率下被高质量地打印...您可以为某个元素附加 JavaScript 事件处理器 (3)在 SVG 中,每个被绘制图形均被视为对象

    5.5K30

    html5鼠标拖动排序及resize实现方案分析及实践

    对列表进行拖动排序,尺寸改变。之前一般会使用jQuery-UI。其通过mousedown、mousemove、mouseup这三个事件来实现页面元素被鼠标拖拽效果。...为了使元素拖动,必须把 draggable 属性设置为 true : test[object Object] 整个拖拽事件触发顺序如下...这里,我暂时把被拖放元素称为源对象,被经过元素称为过程对象,到达元素称为目标对象。不同对象产生不同拖放事件。...e.preventDefault(); 如果drop接收盒子要想接收到元素,那么接收拖动元素 dragenter和dragover必须阻止默认行为。...画布元素位置与尺寸调整 可以先回顾下《再谈BOM和DOM(6):dom对象及event对象位值计算—如offsetX/Top,clentX》 如果使用mouse事件控制,就显得非常复杂。

    3.1K10

    JavaScript进阶之实现拖拽

    一个典型drag操作是这样开始:用户用鼠标选中一个拖动(draggable)元素,移动鼠标到一个可放置(droppable)元素,然后释放鼠标。...drag: 拖拽源 drop:拖拽源最终放置目标 DataTransfer 对象:退拽对象用来传递媒介,使用一般为Event.dataTransfer。...,此事件作用在目标元素上 ondragover 事件:拖拽元素在目标元素上移动时候触发事件,此事件作用在目标元素上 ondrop 事件:被拖拽元素在目标元素上同时鼠标放开触发事件,此事件作用在目标元素上...定义拖动效果 dropEffect 属性用来控制拖放操作中用户给予反馈。它会影响到拖动过程中浏览器显示鼠标样式。比如,当用户悬停在目标元素时候,浏览器鼠标也许要反映拖放操作类型。...有 3 个效果可以定义: copy 表明被拖动数据将从它原本位置拷贝到目标的位置。 move 表明被拖动数据将被移动。 link 表明在拖动源位置和目标位置之间将会创建一些关系表格或是连接。

    2.7K40

    01 . 前端之HTML

    ,席卷全球. 1995年微软发布IE,开启第一次浏览器大战,最终后来居上....-- 3秒后跳转到google网站,有一点不好,等着跳转时候不知道还有几秒跳转,应该有个进度条或者计时. --> <!...https://developer.mozilla.org/zh-CN/docs/Web/API EASELJS SVG SVG伸缩矢量图形(Scalable Vector Graphics)...SVG用来定义网络基于矢量图形 SVG使用XML格式定义图形 SVG图像在放大或改变尺寸情况下其图形质量不会有损失 SVG是万维网联盟标准 SVG优势: SVG图像可通过文本编辑器来创建和修改...SVG图像可被搜索,索引,脚本化或被亚索 SVG伸缩 SVG图像可在任何分辨率下被高质量地打印 SVG可在图像质量不下降情况下被放大.

    1.6K50

    drag事件详解:html5鼠标拖动排序及resize实现方案分析及实践

    对列表进行拖动排序,尺寸改变。之前一般会使用jQuery-UI(interactjs更加纯粹)。其通过mousedown、mousemove、mouseup这三个事件来实现页面元素被鼠标拖拽效果。...为了使元素拖动,必须把 draggable 属性设置为 true :testdraggable属性:设置元素是否拖动。...,被拖拽对象离开目标对象时触发拖动事件列表每一个拖动元素,在拖动过程中,都会经历三个过程,拖动开始-->拖动过程中--> 拖动结束在拖动目标上触发事件 (源元素-被拖动元素):ondragstart...进行放置针对对象事件名称说明被拖动元素dragstart在元素开始被拖动时候触发drag在元素拖动时反复触发dragend在拖动操作完成时触发目的地对象dragenter当被拖动元素进入目的地元素所占据屏幕空间时触发...画布元素位置与尺寸调整可以先回顾下《再谈BOM和DOM(6):dom对象及event对象位值计算—如offsetX/Top,clentX》如果使用mouse事件控制,就显得非常复杂。

    6.4K21

    D3库实践笔记之图表交互 |可视化系列36

    与图表交互,是指图表元素能根据用户键盘鼠标操作做出相应反应,例如悬停高亮、缩放、漫游、拖动节点、点击涟漪效果等等。...);•mouseout:光标从某元素上移出来时;•mousedown:鼠标按钮被按下;•mouseup:鼠标按钮被松开; 以下代码为图表标题添加了一个单击事件监听器,当点击标题元素,会将标题加粗并在控制台输出当前标题文本...绑定d3.zoom()行为后,就具备了漫游交互,zoom不仅仅可以放大缩小,还可以拖动元素进行漫游。...d3力导向图拖动效果 悬停文本标签 要实现鼠标悬停在图形元素上时显示其标签tooltip效果,仍然使用选择集on监听mouseover和mouseout事件,只是把响应代码从修改选定rect元素变成了增加文本标签元素...d3状态条改颜色 可视化结果输出 d3绘制图像是svg或canvas对象,要将生成可视化结果导出可以选择直接复制svg节点数据,从DOM里直接复制 SVG 代码,然后粘贴到文本文件里,命名为chart.svg

    5.4K00

    JavaScript资源大全中文版(Awesome最新版)

    nvd3 -为d3.js.构建重用图表和图表组件 svg.js - 用于操纵和动画SVG轻量级库。 heatmap.js - 适用于HTML5画布热图JavaScript库。...jquery-timeago -一个jQuery插件,可以轻松支持自动更新模糊时间戳(例如“4分钟前”)。 timezone-js - 启用时区启用JavaScript Date对象。...Conzole - 一个内置JavaScript调试面板,将javascript本机控制对象方法和功能包装在页面内显示面板中。...noUiSlider - 轻便,高度定制范围滑块,无膨胀。 rangeslider.js -HTML5输入范围滑块元素polyfill。...Packery - 使用二进制包装算法网格布局库。 适用于拖动布局。 Isotope - 一个可过滤排序网格布局库。 可以实施砖石,包装和其他布局。

    15.2K112
    领券