步驟(基於3.3.4或更高的3.x版本):
1.開啟bootstrap .js原始碼找到modal元件程式碼區塊,在Modal.DEFAULTS程式碼區塊下加入拖曳程式碼實作。
Modal.DEFAULTS = { backdrop: true, keyboard: true, show: true } //新加入的拖拽 Modal.prototype.draggable = function () { var $ele = this.$element; var mouseOffset; var $modalDialog = $ele.find(".modal-dialog"); var dialogOffset; $ele.find(".modal-header").on('mousedown', function (event) { $(this).addClass({cursor: 'move'}); $('body').addClass('select'); dialogOffset = $modalDialog.offset(); mouseOffset = { top: event.pageY - dialogOffset.top, left: event.pageX - dialogOffset.left }; $('body').on("mousemove", function (event) { var left = event.pageX - mouseOffset.left; var top = event.pageY - mouseOffset.top; if (left < 10) { left = 0; } else if (left > $(window).width() - $modalDialog.width()) { left = $(window).width() - $modalDialog.width(); } if (top < 10) { top = 0; } else if (top > $(window).height() - $modalDialog.height()) { top = $(window).height() - $modalDialog.height(); } $modalDialog.offset({ top: top, left: left }); }); }); $(document).on("mouseup mouseleave", function () { $('body').off("mousemove"); }); }
相關推薦:《bootstrap入門教學》
#2. 在modal的show方法中加入呼叫draggable方法
Modal.prototype.show = function (_relatedTarget) { var that = this var e = $.Event('show.bs.modal', {relatedTarget: _relatedTarget}) this.$element.trigger(e) if (this.isShown || e.isDefaultPrevented()) return this.isShown = true //调用draggable()增加拖拽 this.draggable() this.checkScrollbar() this.setScrollbar() this.$body.addClass('modal-open') this.escape() this.resize() //......省略 }
完成上面的操作後直接引入剛剛修改的原始碼js在頁面就已經能夠很好的支援拖曳了,而且整個拖曳是在可視視窗範圍內,不會超出邊界。
注意事項:完成上面的源碼修改後最好將bootstrap的源碼壓縮打包,不熟悉自動構建的可以放到開放的網站壓縮,熟悉自動化構建的最好使用gulp、webpack這樣的前端自動化工具來打包壓縮原始碼減少網頁載入過程中佔用頻寬。當然也建議將檔案命名為bootstrap-draggable.min.js類似的名稱,方便一目了然的猜到這檔案與原始檔案有何不同。除此之外你也可以直接下載bootstrap3.x版本的原始碼,然後修改裡面的modal.js,然後使用它自己grunt建置來重新打包。
問題引深:bootstrap 4.0 的版本原始碼和3.x的版本相比modal元件的修改並不很大,同樣可以採取上面的方式。包括讓modal居中也可修改原始碼來完成。
以上是bootstrap如何拖曳組件的詳細內容。更多資訊請關注PHP中文網其他相關文章!