D3 -当等于无穷大时改变路径值
d3 - change path value when equals infinity
我有一个代码,其中用户单击和射线跟随鼠标。路径采用斜率公式计算,有时斜率可以为Infinity和-Infinity。当这种情况发生时,我想将y坐标的值更改为视口的最大或最小高度。
我不知道在哪里做。当我做console.log(pathArray[1].y)
时,它显示值改变了,但我不确定如何在它实际做某事的地方实现它。这是我最近的一次尝试。(这是我的小提琴)请帮帮我!
svg.on('mousedown', mousedown);
function mousedown() {
isDown = !isDown;
m1 = d3.mouse(this);
pathArray = [ { 'x': m1[0], 'y': m1[1] } ];
if(firstClick) {
line = svg.append('path')
.attr('d', lineFunction(pathArray))
.attr({'stroke': 'turquoise', 'stroke-width': 5, 'fill': 'none'});
}
firstClick = !firstClick;
}
编辑我改变了这个鼠标移动一点。
svg.on('mousemove', mousemove);
function mousemove() {
m2 = d3.mouse(this);
if(m == Number.POSITIVE_INFINITY || m == Number.NEGATIVE_INFINITY) {
var equalsInfinity = true;
if(m == Number.POSITIVE_INFINITY) {
var isPosInf = true;
var isNegInf = false;
} else if(m == Number.NEGATIVE_INFINITY) {
var isNegInf = true;
var isPosInf = false;
}
} else {
equalsInfinity = false;
}
var toLeft = ['M', m1[0], m1[1],
'L', 0, getY(m1[0], m1[1], m2[0], m2[1], isLeft)].join(' ');
var toRight = ['M', m1[0], m1[1],
'L', 850, getY(m1[0], m1[1], m2[0], m2[1], isLeft, isLeft)].join(' ');
var pInf = ['M', m1[0], m1[1],
'L', m2[0], getY(m1[0], m1[1], m2[0], min)].join(' ');
var nInf = ['M', m1[0], m1[1],
'L', m2[0], getY(m1[0], m1[1], m2[0], max)].join(' ');
var isInfinity = isPosInf ? pInf : isNegInf ? nInf : 'neither';
var rightLeft = isLeft ? toLeft : toRight;
if(isDown){
if((m2[0] - m1[0]) > 0) {
isLeft = false;
} else {
isLeft = true;
}
line.attr('d', equalsInfinity ? isInfinity : rightLeft);
}
}
嗯,我得到了一些帮助,结果发现我把它弄得比需要的更复杂。这是他帮我想出的解决方案:
function mousemove() {
m2 = d3.mouse(this);
var equalsZero = false, isPosInf, isNegInf, equalsInfinity;
if(isDown){
if((m2[0] - m1[0]) > 0) {
isLeft = false;
pathArray[1] = { x: 500, y: getY(m1[0], m1[1], m2[0], m2[1], isLeft) };
} else if((m2[0] - m1[0]) < 0) {
isLeft = true;
pathArray[1] = { x: 0, y: getY(m1[0], m1[1], m2[0], m2[1], isLeft) };
} else if((m2[0] - m1[0]) === 0) {
equalsZero = true;
}
if(equalsZero) {
equalsInfinity = true;
if(m === Number.POSITIVE_INFINITY){
pathArray[1] = { x: m2[0], y: 500 };
}
else if(m === Number.NEGATIVE_INFINITY){
pathArray[1] = { x: m2[0], y: 0 };
}
} else {
equalsInfinity = false;
}
line.attr('d', lineFunction(pathArray));
}
}
相关文章:
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- Javascript:使用绝对路径设置img src
- 如何在d3.js中返回路径的y坐标
- 改变<svg>对象's路径
- 如果我使用r.js优化我的RequireJS项目,我必须改变路径和依赖配置吗?
- 改变路径的位置和大小
- 使用JavaScript改变SVG路径的颜色(JS颜色库)
- 是否有办法改变所需的定时文件的路径?
- 如何缩放所有的东西,除了一些路径/文本在svg画布上,而不改变其确切位置
- 如何改变路径的欢迎html文件
- 当旋转或缩放改变时,在Raphaeljs中拖动路径
- D3 -当等于无穷大时改变路径值
- 谷歌地图路线方向路径颜色改变导航仪从一个航路点移动到另一个航路点
- 改变图像文件路径的图像:悬停
- 改变rapha 235; 1路径元素的正确方法是什么?
- 当使用Href标签时,SpringMVC资源路径会改变
- 我如何改变颜色的路径在D3.js
- EmberJS:改变路径来访问路由
- jQuery路径点和改变路径点
- Twitter Bootstrap图库:如何改变加载路径