Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建触发第二个事件的事件_Javascript_Jquery_Events - Fatal编程技术网

Javascript 创建触发第二个事件的事件

Javascript 创建触发第二个事件的事件,javascript,jquery,events,Javascript,Jquery,Events,我正在尝试创建一个jQuery事件来触发第二个事件。第一个事件是单击表示图像的表情符号id。第二个是mousemove事件,它在页面上移动图像。当鼠标再次单击页面主体中的任何位置并将图像放置在该绝对位置时,第三个事件停止此事件。我能够让第二个和第三个事件起作用,但我无法让第一个事件与第二个事件起作用。以下是迄今为止我对jQuery的了解: var mouseTracker = function(event) { console.log(event.pageX, event.pageY, !!e

我正在尝试创建一个jQuery事件来触发第二个事件。第一个事件是单击表示图像的表情符号id。第二个是mousemove事件,它在页面上移动图像。当鼠标再次单击页面主体中的任何位置并将图像放置在该绝对位置时,第三个事件停止此事件。我能够让第二个和第三个事件起作用,但我无法让第一个事件与第二个事件起作用。以下是迄今为止我对jQuery的了解:

var mouseTracker  = function(event) {
console.log(event.pageX, event.pageY, !!event.which)
$('#emoji').css('top', event.pageY);
$('#emoji').css('bottom', event.pageY);
$('#emoji').css('left', event.pageX);
$('#emoji').css('right', event.pageX);
}

var begin = function() {
$('body').on('mousemove', mouseTracker);
$('body').css('cursor', 'none');
}

var stop = function() {
$('body').off('mousemove', mouseTracker);
$('#emoji').css('postion', 'absolute')
$('body').css('cursor', 'default');
}

$('#emoji').on('click', begin);
$('body').on('click', stop);`

从第一个事件调用中初始化事件

$('#emoji').on('click', function() {
    begin();
    $('body').on('click', stop);
});
在点击表情符号的过程中,也会触发身体的点击。 这将导致调用
stop()
。将该事件传播到
正文
可以被
event.stopPropagation()
(或从
begin()
返回的等效返回值
false
)阻止。即使在
begin()
中附加了
body
点击处理程序,也应手动停止传播

您可能希望一次性使用某些事件。这可以通过使用
.one()
进行绑定来实现。在这种情况下,处理程序在首次使用后分离,无需手动
.off()


它无法工作,因为附加的正文处理程序会立即被触发。我可能错了——但如果将函数引用传递给事件对象,它为什么会被触发?事件会从
#emoji
传播到
正文
。从
#emoji
单击处理程序存在后,事件将传播到
停止()
,因为它已附加。
var begin = function (event) {        
    $('body').on('mousemove', mouseTracker);
    $('body').one('click', stop);
    $('body').css('cursor', 'none');
    return false; // event.stopPropagation();
}

var stop = function () {
    $('#emoji').one('click', begin);
    $('body').off('mousemove', mouseTracker);
    $('#emoji').css('postion', 'absolute')
    $('body').css('cursor', 'default');
}

$('#emoji').one('click', begin);