首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击svg元素时添加下拉菜单

单击svg元素时添加下拉菜单
EN

Stack Overflow用户
提问于 2019-07-17 14:42:04
回答 2查看 780关注 0票数 1

我制作了流程图构建器的前端,其中我使用SVG来绘制元素。我想要单击一个SVG元素(特别是svg rect)来显示一个下拉菜单,上面写着- "Edit“和"Delete”。

单击编辑时,我希望它打开一个弹出式表单来填充详细信息,以创建一个通过箭头连接的新矩形。如何为svg元素设置点击事件,以及如何进一步包含下拉菜单?

我已经制作了shape和svg元素。但是,我不能在上面设置任何点击事件。

代码语言:javascript
复制
<svg width="400" height="180">
 <rect x="60" y="40" width="150" height="50" 
style="fill:white;stroke:rgb(51,23,163);stroke-width:3;fill- 
opacity:0.1;stroke-opacity:0.9" />
 <text x="85" y="61" font-family="Calibri" font-size="14" 
fill="black">Click to edit first</text>
 <text x="92" y="77" font-family="Calibri" font-size="14" 
fill="black">decision node</text>
</svg>

下面是它现在的样子:https://www.w3schools.com/graphics/tryit.asp?filename=trysvg_rect2

我希望这个矩形能够显示两个选项,然后单击并展开以形成一个新的矩形

EN

回答 2

Stack Overflow用户

发布于 2019-07-17 14:48:21

您可以在svg元素上侦听事件,就像在任何其他元素上一样:

代码语言:javascript
复制
const svg = document.getElementById('svg');
svg.addEventListener('click', () => {console.log('clicked')});
代码语言:javascript
复制
<!DOCTYPE html>
<html>
<body>

<svg id='svg' width="400" height="180">
  <rect x="50" y="20" width="150" height="150" style="fill:blue;stroke:pink;stroke-width:5;fill-opacity:0.1;stroke-opacity:0.9" />
  Sorry, your browser does not support inline SVG.  
</svg>
 <script>
 const svg = document.getElementById('svg');
 svg.addEventListener('click', event => {console.log('clicked', event)});
</script>
</body>
</html>

在单击id为svg的元素之后,您应该会在控制台中看到消息,旁边还有一个事件对象。该对象确实具有可用于显示弹出窗口的属性(例如,在event.target中,您可以获得有关所单击元素的信息,例如其位置)。

就弹出窗口而言,您可以在HTML中创建表单,并通过添加/删除CSS类来切换其可见性:

代码语言:javascript
复制
const svg = document.getElementById('svg');
const form = document.getElementById('form');
svg.addEventListener('click', event => {
    form.classList.toggle('hidden');
});
代码语言:javascript
复制
.hidden {
    display: none;
}
票数 0
EN

Stack Overflow用户

发布于 2019-07-17 15:07:22

使用jquery会更好。

代码语言:javascript
复制
$('.clickMe').on('click', function(){
alert('clicked');

// add your pop up form
});
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<svg width="400" height="180">
 <rect class="clickMe" x="60" y="40" width="150" height="50" 
style="fill:white;stroke:rgb(51,23,163);stroke-width:3;fill- 
opacity:0.1;stroke-opacity:0.9" />
 <text class="clickMe" x="85" y="61" font-family="Calibri" font-size="14" 
fill="black">Click to edit first</text>
 <text class="clickMe" x="92" y="77" font-family="Calibri" font-size="14" 
fill="black">decision node</text>
</svg>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57069935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档