【发布时间】:2014-02-28 07:22:11
【问题描述】:
嗯,首先,here is a jsfiddle 说明我想问什么
所以我正在尝试实现缩放行为。我设法通过设置缩放功能的转换来限制缩放,(我不太明白,刚从another SO question得到它)和缩放行为的 scaleExtent([1,10])
所以这是缩放行为:
zoom = d3.behavior.zoom()
.x(xScale)
.y(yScale)
.scaleExtent([1, 10])
.on("zoom", zoomed)
这是缩放功能:
zoomed = ->
t = zoom.translate()
s = zoom.scale()
tx = t[0]
ty = t[1]
tx = Math.min(0, Math.max(w * (1-s), t[0]))
ty = Math.min(0, Math.max((h-padding) * (1-s), t[1]))
zoom.translate([tx, ty])
svgContainer.select("g.x.axis").call xAxis
svgContainer.select("g.y.axis").call yAxis
svgContainer.selectAll("line.matched_peak")
.attr("x1", (d) -> return xScale(d.m_mz) )
.attr("y1", h - padding)
.attr("x2", (d) -> return xScale(d.m_mz) )
.attr("y2", (d) -> return yScale(d.m_intensity) )
但是,将 scaleExtent 设置为
.scaleExtent([1, 10]),
使得永远不会显示 y 刻度中值为 1 的一个特定点(jsfiddle 左侧的第一个点)。 但是设置
.scaleExtent([0, 10])
禁用缩放限制,用户可以在 y 轴上缩放和平移到 0 以下。
也尝试过.scaleExtent([0.1, 10]),但这也允许缩放和平移低于 0。
那么我怎样才能只允许缩放到从 0 开始的正值(包括值 1)?
还有什么功能可以用来避免线显示超出轴?当我在缩放中使用翻译功能时,这不是隐含的吗?
【问题讨论】: