国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

詳解為Bootstrap Modal添加拖拽的方法

2024-05-06 16:41:48
字體:
來源:轉載
供稿:網友

網上有許多給Bootstrap Modal添加拖拽實現,但是許多代碼看起來都比較復雜感覺封裝性可能也不太好,有的甚至使用了jquery ui的拖拽功能,這些都不是我想要的,其實我在給Bootstrap Modal添加拖拽功能的事情已經是2017年春節的時候了,彈指一揮間一年就過去了。2017年春節的時候,由于之前項目有同事使用layer來做前端,但是對于我這種略懂js前端的后端開發來說,讓我引入layer和layui的一整套東西是艱難的,曾經大致的瀏覽過layui的一些組件,發現組件功能不是很完備,可以預見的是稍微復雜點的項目后期就會帶來很多坑。因此當時就使用了bootstrap去作為前端的css框架,也大量使用modal這樣的組件來做彈出窗口。

步驟(基于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"); });}

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居中也可修改源代碼來完成。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 商洛市| 大方县| 海淀区| 安义县| 巴东县| 太和县| 遂平县| 巴楚县| 苏尼特右旗| 北流市| 固原市| 高青县| 萍乡市| 合水县| 改则县| 秦皇岛市| 香河县| 云龙县| 临沂市| 乐亭县| 郓城县| 土默特左旗| 门头沟区| 自治县| 泸溪县| 广平县| 黄大仙区| 芦溪县| 安徽省| 汉阴县| 宁远县| 潢川县| 诸暨市| 洛浦县| 什邡市| 武川县| 泗阳县| 邻水| 怀化市| 繁昌县| 武川县|