jQuery ui resizable 传递resize事件的变量来停止事件

Posted

技术标签:

【中文标题】jQuery ui resizable 传递resize事件的变量来停止事件【英文标题】:jQuery ui resizable Pass variables of resize event to stop event 【发布时间】:2021-09-17 06:18:02 【问题描述】:

我需要传递 resize 事件的变量“blabla”来停止事件我该怎么做?

提前感谢这里的一部分代码来解释我需要什么:

.resizable(
                        disabled: disablePoignee,
                        handles: poignees,
                        resize: function (e, ui) 
                            var blabla = "pioup";
                        ,
                        stop:function(e,ui)
                            //try to get blabla
                        );

提前感谢您的帮助

【问题讨论】:

您需要帮助我们帮助您。你能分享更多信息吗? @RuiCosta 我只是想将变量 blabla 传递给停止函数,我该如何更好地解释? 你能分享你剩下的代码吗? 【参考方案1】:

在这段代码中...

.resizable(
  disabled: disablePoignee,
  handles: poignees,
  resize: function (e, ui) 
    var blabla = "pioup";
  ,
  stop: function(e,ui) 
    //try to get blabla
  );

... 变量blabla 仅在传递给resizable 插件函数的函数内部可用(作为options 对象的resize 属性)。这个值是封装的 - 基本上是隐藏的 - 对世界其他地方来说。

要“取消隐藏”它,您有两种选择。首先,使这个变量在resizestop 函数的范围之外:

var blabla; // or const, or let
// ...
.resizable(
  resize: function (e, ui) 
    blabla = "pioup"; // note that `var` shouldn't be used here, as existing variable is reused
  ,
  stop: function(e, ui) 
    doSomethingWith(blabla);
  );

但是,如果在您的代码中创建了多个 resizable 实例,并且每个实例都应使用其自己的 blabla 值,则该方法将不起作用。在这种情况下,使用第二个选项可能会很有用 - 并将一些自定义属性分配给托管插件的 jQuery 对象:

.resizable(
  resize: function (e, ui) 
    ui.originalElement.data('blabla', 'someValue'); 
  ,
  stop: function(e, ui) 
    doSomethingWith(ui.originalElement.data('blabla')); 
  );

这种方法的好处是,即使插件被销毁,数据仍会附加到该对象上。

【讨论】:

旁注:这也可以使用.data() 来完成。这意味着可以使用.data() 将变量添加到元素中,然后以相同的方式调用。如果你有超过 1 个元素在玩,这很有帮助。 您的意思是在我的回答中使用的其他方式? @raina77ow 感谢您的回复,我最初使用过这个,但我认为和/或我希望有一个干净的可能性避免通过 dom。 @raina77ow 我正在查看您答案的第一部分,但没有看到第二部分。【参考方案2】:

考虑以下示例。

$(function() 
  $("#resizable").resizable(
    resize: function(e, ui) 
      $(this).data("foo", "bar-" + $(this).width());
    ,
    stop: function(e, ui) 
      console.log($(this).data("foo"));
    
  );
);
#resizable 
  width: 150px;
  height: 150px;
  padding: 0.5em;


#resizable h3 
  text-align: center;
  margin: 0;
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div id="resizable" class="ui-widget-content">
  <h3 class="ui-widget-header">Resizable</h3>
</div>

您可以使用jQuery Data,而不是创建更全局的变量。

存储与匹配元素关联的任意数据,或在命名数据存储中返回匹配元素集中第一个元素的值。

有了这个,我们可以设置和获取每个元素的数据。如果您只有一个可调整大小的元素,这没什么大不了的。如果您有许多可调整大小的项目,这对于合并您的脚本非常有帮助。

【讨论】:

感谢您的回复,我最初使用过这个,但我认为和/或我希望有一个干净的可能性避免通过 dom。

以上是关于jQuery ui resizable 传递resize事件的变量来停止事件的主要内容,如果未能解决你的问题,请参考以下文章

Jquery ui拖放+ .resizable

获取鼠标 - 当前 DOM 元素 obj [while event-resize] jQuery-ui

jQuery UI resizable 在调整宽度时改变高度

jQuery UI Resizable 永远不会达到设置宽高比的全宽

JQuery UI resizable 不支持 position: fixed;有啥建议吗?

jquery ui resizable 向左调整大小问题