首頁 >web前端 >js教程 >詳細介紹在Bootstrap中為Modal新增拖曳功能

詳細介紹在Bootstrap中為Modal新增拖曳功能

PHPz
PHPz原創
2018-06-13 15:54:191951瀏覽

本篇主要介紹了詳解為Bootstrap Modal添加拖曳的方法,現在分享給大家,也給大家做個參考。

【相關影片推薦:Bootstrap教學

網路上有許多給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 () {
 $(&#39;body&#39;).off("mousemove");
 });
}

2. 在modal的show方法中添加調用draggable方法

Modal.prototype.show = function (_relatedTarget) {
    var that = this
    var e = $.Event(&#39;show.bs.modal&#39;, {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(&#39;modal-open&#39;)

    this.escape()
    this.resize()
    //......省略
}

完成上面的操作後直接引​​入剛剛修改的源碼js在頁面就已經能夠很好的支持拖曳了,而且整個拖曳是在可視窗口範圍內,不會超出邊界。

注意事項:完成上面的源碼修改後最好將bootstrap的源碼壓縮打包,不熟悉自動構建的可以放到開放的網站壓縮,熟悉自動化構建的最好使用gulp、webpack這樣的前端自動化工具來打包壓縮原始碼減少網頁載入過程中佔用頻寬。當然也建議將檔案命名為bootstrap-draggable.min.js類似的名稱,方便一目了然的猜到這檔案與原始檔案有何不同。除此之外你也可以直接下載bootstrap3.x版本的原始碼,然後修改裡面的modal.js,然後使用它自己grunt建置來重新打包。

問題引深:bootstrap 4.0 的版本原始碼和3.x的版本相比modal元件的修改並不很大,同樣可以採取上面的方式。包括讓modal居中也可修改原始碼來完成。

上面是我整理給大家的,希望今後對大家有幫助。

相關文章:

在微信小程式中有關頁面生命週期詳細解讀(詳細教學)

pace.js和NProgress .js如何使用載入進度外掛程式(詳細教學)

在微信小程式中有關App生命週期(詳細教學)

在jQuery中有關NProgress.js載入進度外掛程式使用方法

以上是詳細介紹在Bootstrap中為Modal新增拖曳功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn