【发布时间】:2021-07-22 21:49:39
【问题描述】:
我在我的 Django webapp 中创建了一个页面,该页面显示图像并允许用户单击图像,并且应该在用户单击的图像顶部放置一个圆圈。 下面的代码能够获取鼠标在图片上点击的位置,并在 html 的正确位置添加标签,但实际上并不会显示在页面上。如果我将一个圆圈硬编码到 html 中,它会显示得很好。似乎鼠标位于与 SVG 元素不同的坐标系上……我尝试了 event.x、event.pageX 和 event.clientX,但没有发现任何区别。即使我硬编码了圆圈的位置,它也不会在点击时显示出来
html:
{% extends 'main/base.html' %}
{% block head_content %}
{% load static %}
<script type="text/javascript" src="{% static 'js/click.js' %}"></script>
{% endblock %}
{% block content %}
<div class="my-div">
<div>
<h1>The Page!</h1>
</div>
<form enctype="multipart/form-data" method="POST" action="/mysite/nextpage/">
{% csrf_token %}
<svg id="svg">
<image href="data:image/png;base64,{{ my_img }}"/>
<!-- Placing a circle manually works just fine! -->
<circle cx='50' cy='150' r='50' fill='red'/>
</svg>
<input type="submit" name="submit" class="submit-btn"></input>
</form>
</div>
{% endblock %}
Javascript:
this.window.addEventListener('DOMContentLoaded', (event) => {
const svgElem = this.document.getElementsByTagName("svg")
if (svgElem != undefined && svgElem.length != 0) {
const svg = svgElem[0]
const image = svg.firstChild
svg.onclick = function(event) {
var newCircle = document.createElement('circle')
newCircle.setAttribute('cx', event.clientX)
newCircle.setAttribute('cy', event.clientY)
newCircle.setAttribute('r', '50')
newCircle.setAttribute('fill', 'red')
svg.append(newCircle)
}
}
});
【问题讨论】:
-
当你需要创建一个新的 svg 元素时,使用 createElementNS 而不是 createElement
-
@enxaneta 谢谢!!圆圈现在可以正确渲染,但仍然不在鼠标点击的位置
标签: javascript html django svg dom