- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据 jQuery UI 文档,将 addClasses 选项设置为 false“将阻止将 ui-draggable 类添加到”可拖动元素: http://api.jqueryui.com/draggable/#option-addClasses
它的工作原理与描述的一样。
但是,我没有找到阻止添加其他 ui-draggable-*
类的方法。它仍然添加了 ui-draggable-handle
和 ui-draggable-dragging
。
我做了一个 fiddle 来演示这个问题: https://jsfiddle.net/j6hb4yrr/
有没有办法阻止它添加任何类?
最佳答案
您可以重写这些函数,以便不添加类,这在我下面的解决方案中。但是,添加这些类可能是有原因的,所以要小心。
重写 _create、_mouseStart 和 _mouseUp
_create
函数中唯一更改的行是 this._setHandleClassName();
。这将阻止在初始化可拖动元素时添加 ui-draggable-handle 。
_mouseStart
中唯一更改的行是 this._addClass( this.helper, "ui-draggable-dragging");
,它添加了 ui-draggable -dragging
类,当可拖动元素第一次被拖动时。
然后我必须更改 _mouseUp
函数中的整个 block ,因为它需要句柄 (ui-draggable-handle
)。以下 block 已被删除:
// Only need to focus if the event occurred on the draggable itself, see #10527
// if ( this.handleElement.is( event.target ) ) {
// The interaction is over; whether or not the click resulted in a drag,
// focus the element
// this.element.trigger( "focus" );
//}
将这 3 个添加到您的初始化之上
$.ui.draggable.prototype._create = function() {
if ( this.options.helper === "original" ) {
this._setPositionRelative();
}
if ( this.options.addClasses ) {
this._addClass( "ui-draggable" );
}
// this._setHandleClassName(); <- only line changed
this._mouseInit();
};
$.ui.draggable.prototype._mouseStart = function( event ) {
var o = this.options;
//Create and append the visible helper
this.helper = this._createHelper( event );
// this._addClass( this.helper, "ui-draggable-dragging" ); <- only line changed
//Cache the helper size
this._cacheHelperProportions();
//If ddmanager is used for droppables, set the global draggable
if ( $.ui.ddmanager ) {
$.ui.ddmanager.current = this;
}
/*
* - Position generation -
* This block generates everything position related - it's the core of draggables.
*/
//Cache the margins of the original element
this._cacheMargins();
//Store the helper's css position
this.cssPosition = this.helper.css( "position" );
this.scrollParent = this.helper.scrollParent( true );
this.offsetParent = this.helper.offsetParent();
this.hasFixedAncestor = this.helper.parents().filter( function() {
return $( this ).css( "position" ) === "fixed";
} ).length > 0;
//The element's absolute position on the page minus margins
this.positionAbs = this.element.offset();
this._refreshOffsets( event );
//Generate the original position
this.originalPosition = this.position = this._generatePosition( event, false );
this.originalPageX = event.pageX;
this.originalPageY = event.pageY;
//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );
//Set a containment if given in the options
this._setContainment();
//Trigger event + callbacks
if ( this._trigger( "start", event ) === false ) {
this._clear();
return false;
}
//Recache the helper size
this._cacheHelperProportions();
//Prepare the droppable offsets
if ( $.ui.ddmanager && !o.dropBehaviour ) {
$.ui.ddmanager.prepareOffsets( this, event );
}
// Execute the drag once - this causes the helper not to be visible before getting its
// correct position
this._mouseDrag( event, true );
// If the ddmanager is used for droppables, inform the manager that dragging has started
// (see #5003)
if ( $.ui.ddmanager ) {
$.ui.ddmanager.dragStart( this, event );
}
return true;
}
$.ui.draggable.prototype._mouseUp = function( event ) {
this._unblockFrames();
// If the ddmanager is used for droppables, inform the manager that dragging has stopped
// (see #5003)
if ( $.ui.ddmanager ) {
$.ui.ddmanager.dragStop( this, event );
}
// Following block removed since handle doesn't exist anymore
// Only need to focus if the event occurred on the draggable itself, see #10527
// if ( this.handleElement.is( event.target ) ) {
// The interaction is over; whether or not the click resulted in a drag,
// focus the element
// this.element.trigger( "focus" );
//}
return $.ui.mouse.prototype._mouseUp.call( this, event );
}
您可以在此处查看此操作的实际情况:https://jsfiddle.net/j6hb4yrr/3/
您可以通过查看 here 来了解我从哪里获得初始函数。 .
我的第一个黑客解决方案
如果您无法覆盖上述类,作为最后的手段,请尝试此操作,但这绝对不是这样做的方法。
看起来 ui-draggable
和 ui-draggable-handle
在可拖动元素初始化时添加。拖动开始时的 ui-draggable-dragging
。
您可以使用 API 中列出的事件来删除它们。
$('#noclass').draggable({
addClasses: false,
create: function() {
$(this).removeClass('ui-draggable');
$(this).removeClass('ui-draggable-handle');
},
start: function() {
$(this).removeClass('ui-draggable-dragging');
}
});
此处演示:https://jsfiddle.net/j6hb4yrr/1/
希望这有帮助!
关于jquery - 如何在 jQuery UI 可拖动上抑制 `ui-draggable-handle` 和 `ui-draggable-dragging`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43665986/
更新: See latest updates at the bottom. 原装 我有 flutter Draggable 和 DragTarget 小部件,它们正在工作,但在放置 DragTarge
我有下面的板。有一个覆盖( Stack )的 2 x 10 小部件,一些透明的小部件是 DragTargets在它们之上,相同的宽度和高度有 Draggable . Draggable那些是包含图像的
当前输出 预期输出 正如我们在第一张图片中看到的,可拖动的 ul li 位于可放置区域的右侧。 当我从数据库中获取内容时,我将在可拖动的 ul 中拥有 n 个元素。 但是当我尝试将 height :
对 jquery 有点陌生,我正在使用可拖动和可放置的东西。我有两个可拖动对象和一个可放置对象。我不太清楚如何让它根据我放置的盒子做不同的事情。这是我的 jquery: $(funct
我在拖动列表中有一个项目池,它使用 connectToSortable 选项连接到一个可排序对象。现在我想从这个排序列表中删除一些项目并将它们移回拖动列表。有点像撤消。假设用户将大约 5 个项目移动到
当使用 jQuery UI draggable+sortable 时,draggable 元素在放入 sortable 时会丢失它的 css。这是我的代码,这是一个 js fiddle demo 尝试
我正在使用 jQuery 构建一个座位应用程序。我的 table 周围有椅子,可能有客人坐在椅子上。每个表格都有一个可拖动的包装 div。 table 里面有任意数量的椅子分区。客人可以在任何椅子座位
这是我从 http://jqueryui.com/demos/draggable/ 中获取的代码 jQuery UI Draggable - Default functionalit
我在使用 Vue.js 和 VueDraggable 库时遇到问题 ( https://github.com/SortableJS/Vue.Draggable )这是一个代码示例:
我使用 jQuery UI 制作了一个可拖动对象,并将帮助器选项设置为“克隆”。如果我开始拖动元素,则会创建克隆,并且它会按预期工作,此外,初始元素中应用的类不会传递给克隆。如果我改为使用辅助选项的函
根据 jQuery UI 文档,将 addClasses 选项设置为 false“将阻止将 ui-draggable 类添加到”可拖动元素: http://api.jqueryui.com/dragg
使用 jQuery Draggable 如何限制可拖动对象被拖动 仅在一个方向 ? 即当 axis: 'y' 时只有顶部或只有底部 并且只有在 axis: 'x' 时才向左或仅向右 这意味着如果我想要
我试图包含我的可拖动元素,这样它就不能被拖动到可查看窗口之外,如果用户位于页面顶部,这种方法效果很好,但是如果你向下滚动,那么它就会把一切搞乱. 我该怎么做? $(".chat-wrapper > l
我有几个draggable & droppable我页面上的元素,它们具有 accept 属性。 目前我的代码设置如下: $(".answer." + answer).draggable({
我正在做一个小项目,并且使用 jquery 的 draggable 有一个有趣的遏制问题。 : 基本上,我有两个 div - 顶部和底部。然后,我有第三个 div,它是 .draggable({}),
如何防止用户将元素拖到窗口之外? elm.css({ top : $(window).scrollTop() + ($(window).height() - elm.height())
我有一个问题需要你帮我解决。我有两个这样的列表。 itemA itemB Add Item itemC Add Item 这里的问题是当我将 itemC 拖动到
我有一个 jQuery Draggable() 函数,并且在拖动时基于 if 执行几个其他函数。像这样的事情: $("div.element").draggable({ drag: funct
我有一个可拖动的 div。现在,我希望该 div 粘在浏览器窗口的边框上。这可能吗?或者也许有一些扩展插件可以实现这一点? 最佳答案 由于我无法模仿 jsfiddle 框架中的 window,因此我将
背景 我正在构建一个 meteor 应用程序,在其中保存相应 div 的对象位置和大小。当再次访问此页面时,我重新创建所有 div 并适本地重新填充对象大小和位置。我正在重新填充 div 和相应的对象
我是一名优秀的程序员,十分优秀!