【问题标题】:How to make BootstrapDialog movable on mobile如何使 BootstrapDialog 在移动设备上可移动
【发布时间】:2016-01-13 09:44:40
【问题描述】:

我正在使用https://github.com/nakupanda/bootstrap3-dialog 制作对话框,但在手机上,对话框大多大于屏幕尺寸。在桌面上,当我将宽度更改为与移动相同的大小时,我们可以使用鼠标拖动对话框标题,但在移动上无法完成。

这是屏幕尺寸。

向左拖动后的对话框。

有没有办法让对话框在移动设备上可拖动? 还是有更好的解决方案?

编辑

我尝试使用更简单的设置重现该问题,但它显示 .modal-dialog 上使用的 css 不同:

问题:

更简单的设置:

现在我知道问题出在 CSS 的 min-width 属性上。 然后我通过在创建BootstrapDialog 时替换该属性来破解它

onshown: function() {
  $('.modal-dialog').css('min-width', 'auto');
}

【问题讨论】:

标签: javascript css twitter-bootstrap-3 bootstrap-modal


【解决方案1】:

对于对话框大小,我认为这是在 cmets 中回答的。要在移动设备上拖动 [draggable : true] 周围的对话框,您必须在源代码中进行一些更改。

bootstrap3-dialog 根本不响应移动事件,例如 touchstarttouchendtouchmove {reference}

看看第 1080 行的代码:
https://github.com/nakupanda/bootstrap3-dialog/blob/master/src/js/bootstrap-dialog.js#L1080

添加移动事件,以便 bootstrap3-dialog 也可以在移动设备上拖动:

...
makeModalDraggable: function() {
    if (this.options.draggable) {
        this.getModalHeader().addClass(this.getNamespace('draggable')).on('mousedown touchstart', {
            dialog: this
        }, function(event) {
            var dialog = event.data.dialog;
            dialog.draggableData.isMouseDown = true;
            var dialogOffset = dialog.getModalDialog().offset();
            dialog.draggableData.mouseOffset = {
                top: event.clientY - dialogOffset.top,
                left: event.clientX - dialogOffset.left
            };
        });
        this.getModal().on('mouseup mouseleave touchend touchcancel', {
            dialog: this
        }, function(event) {
            event.data.dialog.draggableData.isMouseDown = false;
        });
        $('body').on('mousemove touchmove', {
            dialog: this
        }, function(event) {
            var dialog = event.data.dialog;
            if (!dialog.draggableData.isMouseDown) {
                return;
            }
            dialog.getModalDialog().offset({
                top: event.clientY - dialog.draggableData.mouseOffset.top,
                left: event.clientX - dialog.draggableData.mouseOffset.left
            });
        });
    }

    return this;
},
...

注意:完全未经测试,但我相信这是(唯一的)方法。

NB²:上面的重构只是作为一个此时此地的解决方案。你应该在 github 项目网站上raise the issue。我相信作者会认为让 bootstrap3-dialog 移动设备也做好准备是个好主意。

【讨论】:

    猜你喜欢
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多