1

我需要一种可靠的方法来检测是否$(window).on('resize')已被用户交互或 jQuery.trigger调用触发。

我尝试了以下方法,但似乎没有在函数调用中取回参数:

$(window).trigger('resize',[true]);

function prepareOnResize(e, triggered){ console.dir(triggered); }
$(window).on('resize',prepareOnResize);

触发似乎返回屏幕的宽度,所以我尝试了以下,也无济于事:

$(window).trigger('resize',[true]);

function prepareOnResize(e, width, height, triggered){ console.dir(triggered); }
$(window).on('resize',prepareOnResize);

在那种情况下触发回来undefined

我在这里不知所措 - 任何帮助将不胜感激。

4

2 回答 2

2

您可以尝试以下方法;

Javascript ...在dom准备好...

var $window = $(window);

$window.on('resize', function(event, param1) {

  console.log("Window resized event triggered by...");

  if (typeof param1 === 'undefined') // could also do if(param1) to test for false
    console.log("System Event");
  else
    console.log("User Event");

   // Another way to check is to check the originalEvent property
   // if (e.originalEvent === undefined) alert ('triggered by code');
   // else alert ('triggered by system');

});

setTimeout(function() {
  $window.trigger("resize", ["Custom"]);
}, 2000);

这或多或少是您在代码中尝试的,它将区分两种类型的事件。

我还做了一个 jsFiddle,所以你可以看到: https ://jsfiddle.net/sysdevcode/4w3b8e14/

使其适用于您的代码

$(window).trigger('resize',[true]);

function prepareOnResize(e, width, height, triggered){ console.dir(triggered); }
$(window).on('resize',prepareOnResize);

您需要更改prepareOnResize()函数上参数的顺序,$(window).trigger('resize',[true]);相当于将 [true] 作为函数中的“宽度”参数发送。例如,您需要这样做:

var $window = $(window);
$window.trigger('resize',[ $window.width(), $window.height(), true ]);

然后

function prepareOnResize(e, width, height, triggered){ ... }

可以,但是如果您不需要传递任何参数,那么e.isTrigger上面的代码可能会更优雅一些。

于 2016-04-21T19:12:23.003 回答
1

jQueryisTrigger在事件对象中放置一个属性,您可以对其进行测试:

function prepareOnResize(e){ 
    if (e.isTrigger) {
        console.log('resize via jQuery trigger');
    } else {
        console.log('resize by user');
    } 
}

或者,您可以使用e.originalEvent只有本机事件对象具有的 jQuery,如此所述:

function prepareOnResize(e){ 
    if (!e.originalEvent)
        console.log('resize via jQuery trigger');
    } else {
        console.log('resize by user');
    } 
}
于 2016-04-21T18:48:30.433 回答