d3.event在反跳函数内部为null
d3.event is null inside of debounced function
当尝试使用鼠标移动事件处理程序的去抖动版本时,d3.event
就是null
。我想在这个反反弹处理程序中使用d3.mouse
对象,但d3.event
返回null并抛出错误。我如何访问以下代码中的d3.event
:
// a simple debounce function
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) {
func.apply(context, args);
}
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) {
func.apply(context, args);
}
};
}
// the function to handle the mouse move
function handleMousemove ( context ) {
var mouse = d3.mouse( context );
console.log( mouse );
}
// create a debounced version
var debouncedHandleMousemove = debounce(handleMousemove, 250);
// set up the svg elements and call the debounced version on the mousemove event
d3.select('body')
.append('svg')
.append('g')
.append('rect')
.attr('width', 200)
.attr('height', 200)
.on('mousemove', function () {
debouncedHandleMousemove( this );
});
如果你想看看它的动作,那就是一把小提琴。正在尝试将鼠标移到rect
元素上。
之所以会发生这种情况,是因为D3在事件完成后删除了事件变量,因为debounce在被调用时会使用超时。
要解决此问题,您可以使用debounce函数的修改版本来保存当前事件,并在调用之前将其替换。
function debounceD3Event(func, wait, immediate) {
var timeout;
return function() {
var context = this;
var args = arguments;
var evt = d3.event;
var later = function() {
timeout = null;
if (!immediate) {
var tmpEvent = d3.event;
d3.event = evt;
func.apply(context, args);
d3.event = tmpEvent;
}
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) {
var tmpEvent = d3.event;
d3.event = evt;
func.apply(context, args);
d3.event = tmpEvent;
}
};
}
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 数组在递归方法中设置为null
- 调用函数内部的函数
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 在phonegap应用程序内部重定向不起作用
- 使用此选项选择父类内部的类
- 访问JSON对象内部的数组元素
- 从模块内部访问Express装载路径
- 无法获取属性'selectedIndex'的未定义引用或null引用
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- AngularJs指令,该指令创建内部有数据对象的新指令
- 来自文本输入null的html javascript变量
- 如何使用内部对象构造对象
- 如果JS会话变量为null,如何避免500内部服务器错误
- 有没有一种方法可以判断图像src是否在javascript内部返回null
- d3.event在反跳函数内部为null
- 为什么change函数内部的全局json对象为null
- 在运行ajax请求时,无法将内部html设置为null
- Jquery美元(文档).preend: "TypeError: e is null"内部委托事件处