Draggable JS Bootstrap modal - 性能问题

Posted

技术标签:

【中文标题】Draggable JS Bootstrap modal - 性能问题【英文标题】:Draggable JS Bootstrap modal - performance issues 【发布时间】:2013-03-30 15:52:37 【问题描述】:

对于工作中的项目,我们使用 javascript 中的 Bootstrap 模态窗口。我们想让一些窗口可以移动,但是我们遇到了 JQuery 的性能问题。

$("#myModal").draggable(
    handle: ".modal-header"
);

Example,Source. 在 IE9 中,它按预期工作。 在 Chrome 中,水平拖动按预期工作,垂直拖动相当慢但没有问题。 在 Firefox 中,水平拖动按预期工作,但垂直拖动非常慢。

这很奇怪,因为示例窗口在图形上并不繁重,而且 JQuery 应该规范浏览器行为。我尝试不使用 JQuery 的可拖动来解决这个问题,但我遇到了同样的问题。

所以我有几个问题:

性能缓慢是浏览器、JQuery、Bootstrap 的问题还是我的代码不是最优的? 为什么水平和垂直拖动有区别? 我应该找到解决方法,还是完全避免使用 Bootstrap 来处理动态弹出窗口?

亲切的问候, 圭多

【问题讨论】:

我遇到了同样的问题。不知何故,他们在 Twitter 上设法让它工作(当你点击一个用户时的模式)。关于你的第三个问题,我尝试使用 jQuery UI Bootstrap,这是一种两者的组合,不应该发生冲突,但工作量太大,所以我决定放弃并坚持使用 jQuery UI。 【参考方案1】:

我找到了一些解决此问题的方法。

将其添加到您的 CSS 文件将在拖动模态时禁用 transition 效果。然而,似乎一旦用户拖动框,飞入将不会正确发生,而是会淡入。

.modal.fade.ui-draggable-dragging 
    -moz-transition: none;
    -o-transition: none;
    -webkit-transition: none;
    transition: none;

或者将以下内容添加到您的 CSS 文件中并将 nofly 类添加到您的模型将一起禁用飞入,但不会淡入:

.modal.fade.nofly 
    top: 10%;        
    -webkit-transition: opacity 0.3s linear;
    -moz-transition: opacity 0.3s linear;
    -o-transition: opacity 0.3s linear;
    transition: opacity 0.3s linear;

【讨论】:

【参考方案2】:

我发现在 bootstrap 3 中我必须覆盖模态对话框的这些 css 属性:

.modal

    overflow: hidden;
    bottom: auto;
    right: auto;

.modal-dialog
    margin-right: 0;
    margin-left: 0;

Fiddle

Full screen demo

【讨论】:

这对我来说也是正确的解决方案。我现在唯一的问题是模式位于左侧,而不是居中。【参考方案3】:

这并不能完全回答您的问题,但您可以尝试禁用*-transition 属性或减少指定0.3s 的时间值。这是在.modal.fade 中定义的。但这也会与最初的弹出动画混淆。如果这不可接受,您可以使用draggable 小部件的start 事件来应用新样式。

【讨论】:

【参考方案4】:

在 Bootstrap 3.3 和 jQuery UI 1.1 中,我向带有“modal”类的元素添加了一个名为“modal-draggable”的类。

它使用.modal-draggable 类绑定到容器内的.modal-dialog 元素(与此处绑定到实际容器的一些示例不同)。

有一些 CSS,因此滚动长对话框仍然适用于所有屏幕尺寸的设备。

CSS:

.modal-draggable .modal-backdrop 
  position: fixed;


.modal.modal-draggable 
    overflow: overflow-y;


.modal-draggable .modal-header:hover 
  cursor: move;

JavaScript:

$(".modal-draggable .modal-dialog").draggable(
  handle: ".modal-header"
);

在此处查看 JS Fiddle 以获取演示: http://jsfiddle.net/jcosnn6u/3/

注意:到目前为止,我只在 Chrome、Firefox 和 Safari 以及移动设备上进行了测试,因此无法评论 Internet Explorer 的兼容性。

【讨论】:

那些不能让它工作的人,请记住包括 。它对我有用。【参考方案5】:

我更喜欢使用 jqueryui。有关可拖动 API 的更多详细信息,请点击此处:http://api.jqueryui.com/draggable/

【讨论】:

【参考方案6】:

虽然建议的 CSS 更改对我有用,但我不喜欢最初显示在左侧的对话框。将 jquery UI 从 1.9 升级到 1.11 解决了我看到的问题

【讨论】:

以上是关于Draggable JS Bootstrap modal - 性能问题的主要内容,如果未能解决你的问题,请参考以下文章

Twitter Bootstrap 模态窗口 -draggable 不起作用

可拖动的 ngx-bootstrap 模态只有身体移动和背景固定

如何加载带有requirejs的Tempus Dominus Bootstrap 4(在Moodle中)? (错误:没有为datetimepicker定义调用)

如何使用jQuery Draggable和Droppable实现拖拽功能

Jquery Draggable 和 Backbone.js 从可放置成功回调内部获取对骨干模型的引用

如何使用jQuery Draggable和Droppable实现拖拽功能