Jquery ui 如何在不调用change/slide方法的情况下更改滑块的位置?

Jquery ui 如何在不调用change/slide方法的情况下更改滑块的位置?,jquery-ui,slider,Jquery Ui,Slider,我有一个滑块。当用户滑动它时,它会调整图像的gamma。下面是代码,非常简单,工作非常完美 $('#gammaSlider').slider({ max: 125, min: -125, value: 0, slide: function () { //stuff to adjust gamma of image }, ch

我有一个滑块。当用户滑动它时,它会调整图像的gamma。下面是代码,非常简单,工作非常完美

$('#gammaSlider').slider({
            max: 125,
            min: -125,
            value: 0,
            slide: function () {
               //stuff to adjust gamma of image
            },
            change: function () {
                //stuff to adjust gamma of image
            }
        });
但是,当用户加载不同的图像时,我希望通过编程将滑块设置为新图像的值(即允许使用单独的gamma设置在多个页面之间来回翻转)。要清楚的是,新加载的图像的gamma值已经达到上次设置的值。我只是想调整UI以匹配新图像的值。例如,如果我增加第2页的gamma,然后翻到第1页,我需要将滑块从增加的位置移回默认值,并且我需要这样做,而代码不会认为我正在尝试减少gamma

当我使用以下方法执行此操作时,出现了一个问题:

$('#gammaSlider').slider('value', gamma);

问题是,这会触发我在上面的原始声明中为滑块设置的
幻灯片
更改
调用,导致它尝试用新的gamma值冗余地重新加载图像。有没有一种方法可以在不触发这些调用的情况下以编程方式更改滑块?

也许您可以调用slider方法来传递一个新的配置,该配置可能与您作为参数传递的对象完全相同,但“value”字段已更改


我在我的一个旧项目中做了一个测试,它对我起了作用。

您可以使用这样一个事实,即您可以通过
event.originalEvent
区分用户更改和编程更改。例如,您可以拥有在用户进行更改时执行的代码,以及在进行编程更改(如更改值)时执行的不同代码。因为,您可以将gamma更改代码放入仅在用户更改时触发的块中,而不是程序更改:

change: function (event) {
    if (event.originalEvent) {
        //stuff to adjust gamma of image ONLY WHEN USER CHANGES THE SLIDER
        console.log('user change');
    }
}

您可以在此中看到,滑块的值更改为50,但除非用户移动滑块,否则不会生成日志消息。如果注释掉If条件,您将看到日志消息不仅在用户更改滑块值之后生成,而且在您以编程方式更改值时生成。

Perfect。我对
event.originalEvent
的理解不是很清楚,但它工作得很好