javascript - 使用带有 d3.drag () 的 keydown 事件来旋转 SVG
问题描述
我有一个 SVG,我想在它上面应用旋转变换,但不只是用鼠标拖动,而是在按下alt
键的同时用鼠标拖动。我试图实现一些东西,但事情似乎没有按我的意愿工作。以下是我已经实施的。如何在按住alt
键的同时拖动鼠标旋转 SVG?
var width = 590, height = 400;
var svg = d3.select("#sketch4").append("svg")
.attr("width", width)
.attr("height", height)
//.call(d3.zoom().on("zoom", zoomed))
.call(d3.drag().on('drag', dragged))
.append("g")
var rect = svg.append("rect")
.attr("x", 100)
.attr("y", 100)
.attr("width", 60)
.attr("height", 30)
.attr("fill", "green")
function dragged() {
if (d3.event.sourceEvent.altKey){
var me = sketchSVG.node()
var x1 = me.getBBox().x + me.getBBox().width/2;
var y1 = me.getBBox().y + me.getBBox().height/2;
sketchSVG.attr("transform","rotate("+d3.event.y+","+x1+","+y1+")" );
metricSVG.attr("transform","rotate("+d3.event.y+","+x1+","+y1+")" );
}
};
解决方案
您需要使用d3.event.sourceEvent.x
和d3.event.sourceEvent.y
。改变它应该让你的代码工作。
要移动/缩放您的元素,请创建和设置else
条件,然后使用sketchSVG.attr("transform",d3.event.transform)
forzooming
和translating
元素。
var width = 590,
height = 400;
var svg = d3.select("#sketch4").append("svg")
.attr("width", width)
.attr('id', 'sketchSvg')
.attr("height", height)
.append("g")
d3.select('#sketchSvg')
.call(d3.zoom().on("zoom", dragged))
var rect = svg.append("rect")
.attr("x", 100)
.attr("y", 100)
.attr("width", 60)
.attr("height", 30)
.attr("fill", "green")
function dragged(d) {
if (d3.event.sourceEvent.altKey && d3.event.sourceEvent.type == 'mousemove') {
var me = svg.node()
var x1 = me.getBBox().x + me.getBBox().width / 2;
var y1 = me.getBBox().y + me.getBBox().height / 2;
svg.attr("transform", "rotate(" + d3.event.sourceEvent.y + "," + x1 + "," + y1 + ")");
}
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js"></script>
<div id='sketch4'></div>
推荐阅读
- function - 为什么 Lua 表达式中没有匿名函数?
- android - 实施 Google Assistant 语音命令支持
- python - 如何在句子中颠倒位置?
- javascript - 我的节点 js 代码对关键字“require”没有影响
- html - 如何制作嵌入式视频的直接下载链接
- asp.net-core - 将“ui_locale”返回给客户端
- xpath - XPath 选择器返回一个空列表而不是目标值
- nestjs - 将实体从库项目加载到 TypeORM OrmConfig 到应用程序项目
- javascript - 将人重定向到另一个页面后执行点击功能
- javascript - 从同一路线获得过滤后的产品。节点,猫鼬,MongoDB