本篇大纲:selection.call( )、drag.on( )、范例
今天要来看另一个d3有趣的互动事件:Drag 拖曳!
我们先来看看官方文件关於 d3.drags 有多少 API 可以使用,接着再来讲解要怎麽使用这些 API
直接先看到 d3.drag()
这个API,它是用来建立drag事件的方法。当我们使用d3.drag()时,它会返还一个drag方法,接着我们要用selection.call( )
这个API把返还的drag方法绑定到 selection 上
selection.call( )
这个 API 是在选定的DOM元素上呼叫并执行特定方法,但这个方法只会被执行一次。由於 d3.drag() 会返还一个方法,因此我们要用selection.call( )来执行这个方法
使用 d3.drag( ) 建立拖曳事件後,还能使用 drag.on('事件', 方法)
把拖曳事件细分成三个阶段,分别是
看完这几个方法并了解怎麽使用後,我们现在来实际看范例跟程序码吧!首先,一样先把拿到的资料绑定到DOM元素上:
// html
<div class="chartContainer"></div>
//js
// 资料
const data = [{name:'A', x:200, y:340},
{name:'B', x:220, y:300},
{name:'C', x:250, y:198},
{name:'D', x:360,y:296},
{name:'E', x:160, y:150},
{name:'F', x:370, y:360},
{name:'G', x:187, y:250}]
const svg = d3.select('.chartContainer')
.append('svg')
.attr('width', 500)
.attr('height', 500);
// 建立圆点
const dots = svg.append('g')
.selectAll('circle')
.data(data)
.enter()
.append('circle')
.attr('r', 25)
.attr('cx', d=>d.x)
.attr('cy', d=>d.y)
.style("fill", "#19d3a2")
.style("fill-opacity", 0.3)
.attr("stroke", "#b3a2c8")
.style("stroke-width", 4)
.style('cursor', 'pointer')
完成後我们的画面上就会有几个圆点点
接着,我们来建立拖曳事件:
// 建立拖曳方法
const drag = d3.drag()
.on('start', function(){
d3.select(this)
.style('stroke', 'blue')
})
.on('drag', function(){
let pt = d3.pointer(event, this)
d3.select(this)
.attr('cx', pt[0])
.attr('cy', pt[1])
})
.on('end', function(){
d3.select(this)
.style('stroke', '#b3a2c8')
});
最後,只要选定想操作的DOM元素,并使用 d3.call( )呼叫drag事件就可以啦!
dots.call(drag);
这样拖曳的互动就完成啦!现在我们可以随心所欲把圆点拖曳到任何地方罗~
以上就是 d3.js 的拖曳事件~明天要来讲讲大魔王 Force 啦!
这边附上本章的程序码与图表 Github 、 Github Page,需要的人请自行取用~
<<: 第 09 天 日积月累养成习惯( leetcode 413 416 )
>>: [Day 10] 阿嬷都看得懂的基础 CSS 样式-区块篇
doc文件系统差不多了 来学一下怎麽做测试 首先当然是安装pytest pip install py...
Chap.IV Data Services 资料库服务 SQL Databases SQL 资料库 ...
我在十几年前就已经随身仅携带一支USB碟闯天下了, 不明白把多支随身碟串成钥匙圈或带光碟整理包出门的...
上一篇的 repository 还欠一个 mapper 把 EtaResponse 转成 EtaRe...
在Data Science这个领域中,大致可以再细切为3个角色:商业分析(数据分析)、资料工程师、资...