bootstrap插件学习-bootstrap.modal.js

bootstrap model.js 单模态框的css,js 立即下载

先从bootstrap.modal.js的结构看起。

function($){
        var Modal = function(){}  //构造器
        Modal.prototype = function(){} //构造器的原型
        function ..(){}  //自定义方法 
        $.fn.modal = function(){} //在jQuery对象上自定方法
        $.fn.modal.defaults = {} //设置默认属性
        $.fn.modal.Constructor = Modal //重置构造器名
        $(function(){})   //初始化
    }(window.jQuery)

其HTML结构

<a class="btn" data-toggle="modal" href="#myModal" >点击触发对话框</a>

<div class="modal" id="myModal">
      <div class="modal-header">
        <a class="close" data-dismiss="modal">×</a>
        <h3>对话框标题</h3>
      </div>
      <div class="modal-body">
        <p>对话框内容</p>
      </div>
      <div class="modal-footer">
      <a href="#" class="btn" data-dismiss="modal">关闭</a>
      <a href="#" class="btn btn-primary" data-dismiss="modal">保存更新</a>
  </div>
</div>

我们开始过一遍插件源码:从初始化开始

$(function () {
     /*
     * 在所有有data-toggle='modal'属性的标签上帮上click事件,一般为a标签
     * /.*(?=#[^\s]+$)/表示如果匹配成功将#之前的信息删除
     * 对于jQuery对象,比如a标签有data-xx类型的,在其data方法中都可以显示
     * 将a标签data-target指向的或是href的锚点指向的元素传入modal方法里
     * */
    $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
      var $this = $(this), href
        , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
        , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data());
      e.preventDefault()
      $target.modal(option)
    })
  })

根据HTML提供的结构,$target为a标签所指向的弹出框div的Jquery对象。另外$this.data()存在数据,为{toggle:'modal'},这个我在注释中已经解释。最后执行$target.modal(option),我们进入jQuery对象的这个方法。

$.fn.modal = function ( option ) {
    return this.each(function () {
      var $this = $(this)
        , data = $this.data('modal')
        , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
      if (!data) $this.data('modal', (data = new Modal(this, options)))//为modal绑定对象
      if (typeof option == 'string') data[option]()
      else if (options.show) data.show()
    })
  }

初始化一些参数,在弹出框div上加入了一个modal属性,如果这个modal属性不存在,则实例化Modal构造器。最后执行show方法,因为此时你已经点击了a标签,让div显示。代码中有if(typeof option == 'string')data[option],表示代码支持传入方法名,执行该方法,在执行show方法之前,我们先进入Modal的构造器中看看。

/*
  * 构造器,为所有data-dismiss='modal'属性的标签绑定原型上的hide方法
  * */
  var Modal = function ( content, options ) {
    this.options = options
    this.$element = $(content)
      .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
  }

很简单,让带有data-dismiss='modal'属性的标签的click事件交给弹出框div代理,注意这里的执行的方法。这里为什么要$.proxy(this.hide,this)这样写,第一,需要明白此时的this表示着构造器的实例,代理的事件需要使用到实例的hide方法,为什么实例拥有hide方法,很简单this是Modal的实例,它继承了Modal原型的方法。那proxy方法中的第二个this,则表示着这个hide方法的调用者,即上下文,可以试想一下,如果我们不修改这个,那执行这个方法时,其里面的this是不是指向了调用它的a标签呢?(注意留意HTML结构,拥有data-dismiss属性的三个a标签,其实分别就是弹出框的关闭按钮等),那原来定义在原型上的hide方法中的this的属性将不能在正常使用。
综上,实例化,主要就是给弹出框绑定了hide事件,为将来关闭弹出框,做准备。

好,回到之前JQuery的modal方法上,最后我们执行了show方法,进入show方法。

下面是执行的流程图,就是各个方法的执行顺序

show -> escape -> backdrop
hide ->escape -> hideModal -> backdrop

show

    , show: function () {
        var that = this

        if (this.isShown) return

        $('body').addClass('modal-open')//给body加上modal-open类

        this.isShown = true//将isShown属性设置成true

        this.$element.trigger('show');//没理解

        escape.call(this)//加上键盘事件

        backdrop.call(this, function () {
          var transition = $.support.transition && that.$element.hasClass('fade')

          //console.log(that.$element);
          /*
          * 插入弹出层
          * */
          !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position

          that.$element
            .show()//jQuery方法显示

          if (transition) {
            that.$element[0].offsetWidth // force reflow
          }

          that.$element.addClass('in')

          transition ?
            that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
            that.$element.trigger('shown')

        })
      }

谈到show和hide的时候,我们需要留意它们源码中的一些我们认为的’废’操作,其实它能帮助我们实现扩展。比如给body加modal-open这个类,如果你要在打开弹出层,执行其他程序,可以通过判断这个类来实现,这是bootstrap它自身已经提供的标识。escape()方法是一个添加键盘事件和删除键盘事件的方法,它可以让你按enter键也能关闭弹出框,比较简单。

接下来我们进入backdrop方法

/*
  * 生成遮罩层,并且控制遮罩层的显示或删除
  * */
  function backdrop( callback ) {
          var that = this
      , animate = this.$element.hasClass('fade') ? 'fade' : ''

    if (this.isShown && this.options.backdrop) {
      var doAnimate = $.support.transition && animate
      //console.log(doAnimate);
      this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
        .appendTo(document.body)//遮罩层,让弹出框显示时,背景被遮罩,此时为透明的

      if (this.options.backdrop != 'static') {
        this.$backdrop.click($.proxy(this.hide, this))
      }

      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow

      this.$backdrop.addClass('in')//加入in类,显示遮罩层

      doAnimate ?
        this.$backdrop.one($.support.transition.end, callback) :
        callback()
      //打开时,执行callback()回调
    } else if (!this.isShown && this.$backdrop) {
      this.$backdrop.removeClass('in')//删除in,遮罩层透明
      $.support.transition && this.$element.hasClass('fade')?
        this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
        removeBackdrop.call(this)
        //一般执行removeBackdrop()函数
    } else if (callback) {
      callback()
    }
  }

这里为什么要判断弹出框是否有fade类,在bootstrap.css中,.fade拥有left:-25%的属性,当.fade .in时则left变为10%,在版本较高的浏览器中,有自上向下的移动的效果(低版本浏览器没有效果,不过这个可以jQuery实现…),这个部分需要我们结合css样式看,注意in的样式,就可以了,弹出框显示的最后一步,执行callback回调,显示弹出框,并给弹出框加上in类,80%透明度。最后完成显示。

之前因为我们已经在弹出框的三个a标签上都绑定了hide事件,所以当我们点击关闭时,执行hide方法

hide: function ( e ) {
        e && e.preventDefault()

        if (!this.isShown) return

        var that = this
        this.isShown = false

        $('body').removeClass('modal-open')

        escape.call(this)//关闭按键事件

        this.$element
          .trigger('hide')
          .removeClass('in')//jQuery方法,将弹出框隐藏,并将div的class去in

        $.support.transition && this.$element.hasClass('fade') ?
          hideWithTransition.call(this) :
          hideModal.call(this)
      }

其实跟show方法差不多,主要是给show擦屁股,进入hideModal方法

function hideModal( that ) {
    this.$element
      .hide() //删除效果更好
      .trigger('hidden')

    backdrop.call(this)
  }

蛮蛋疼的方法,还是调用backdrop。最后删除时我们调用的是removeBackdrop方法。

/*
  * 清除遮罩层
  * */
  function removeBackdrop() {
    this.$backdrop.remove()
    this.$backdrop = null
  }

将之前创建的遮罩层删除。以上完成一遍弹出框的打开显示。

内容不多,时间刚好,以上是我的一点读码体会,如有错误,请指出,大家共通学习。

深入浅出bootstrap模态框modal.js 本篇博客参考https://v3.bootcss.com/javascript/#modals-examples 先上bootstrap官网瞅一眼: 原创文章 171获赞 72访问量 5万+ 关注 私信 展开阅读全文 作者:记得养胃鸭 立即下载

相关推荐

RK3588网络调试笔记:当我把默认RTL8211F PHY换成另一款时,踩了哪些坑?

本文详细记录了在RK3588平台上将默认RTL8211F PHY芯片替换为其他型号的全过程,包括硬件设计验证、内核驱动适配、复位时序配置等关键步骤。通过实际案例分享,提供了从驱动调试到硬件优化的系统性解决方案,帮助开发者高效完成PHY芯片替换,确保网络接口稳定性。

weixin_30291791的博客 669

Bootstrap JavaScript插件:模态框 (modal.js)

作者:WangMin 格言:努力做好自己喜欢的每一件事 优快云原创文章 博客地址 ???? WangMin 注意: 模态框不支持嵌套,需要嵌套模态框的话,只能自己手动实现。 模态框包含的html最好尽量作为body的直接子元素,以避免其他组件影响模态框的展现和功能。 弹出层出来以后,页面的滚动条会被覆盖。 模态框主体结构包含了模态框的头、体和一组放置于底部的按钮 : modal 弹出层父级 modal-dialog 弹出层 modal-content 弹出层的内容区域 modal-header 弹

WangMin@汪末末 2444

OpenCV图像拼接实战:用SIFT+透视变换打造无缝全景图(附完整代码)

本文详细介绍了使用OpenCV和SIFT算法实现图像拼接的全过程,包括特征匹配、透视变换和高级融合技术。通过实战代码演示,帮助开发者掌握无缝全景图生成的核心技术,适用于旅行摄影、无人机航拍等多种场景。

eee77的博客 997

Bootstrap插件(一)——模态框(modal.js)

前言:这一片文章我们将对bootstrap的modal模态框进行学习,学习他是如何绑定到一个按钮上去点击显示,学习模态框的简单数据配置,学习模态框的使用方式,事件,方法、参数等;下面是modal的内容总结。 目录:          1.模态框的大小以及动画效果禁用     2.通过button传递内容给绑定的modal     3.模态框的调

Andy_lau 1万+

Keil5编译报错:ARM Compiler Version 5缺失的完整解决方案

本文提供了Keil5编译报错“ARM Compiler Version 5缺失”的完整解决方案。详细介绍了手动安装ARM Compiler Version 5的步骤,包括下载安装包、配置编译器路径及常见问题排查,帮助开发者快速恢复老项目的编译环境。

bb456的博客 944

【SAP PO】SAP PO 接口配置完整教程之二REST服务对接

SAP PO 接口配置完整教程之二REST服务对接

XLevon的博客 1万+

使用Bootstrap(JS控制)实现弹框(Modal)功能的完整教程

本教程讲解如何使用 Bootstrap 弹框(Modal)实现交互功能,适合前端开发初学者。内容包括引入 Bootstrap CSS 和 JS 文件,创建触发按钮,搭建弹框的头部、内容、底部结构,并使用属性如 data-bs-toggle 和 data-bs-dismiss 控制弹框的显示与关闭。教程提供完整源码,支持快速复制应用。关键词:Bootstrap 弹框,Modal 教程,前端开发,HTML 弹框,JavaScript 弹框控制,轻松实现弹框功能。

2402_84971234的博客 1324

手把手教你用SpringBoot+Vue3+Docker从零搭建一个在线OJ系统(附完整源码)

本文详细介绍了如何使用SpringBoot、Vue3和Docker从零搭建一个在线OJ系统,涵盖前后端开发、判题机实现及Docker容器化部署。通过完整的源码和实战步骤,帮助开发者掌握OJ系统的核心架构与关键技术,适用于算法训练、编程竞赛等场景。

weixin_42648844的博客 296

Bootstrap之JavaScript的模态框(modal)使用-不离开父窗体的情况下的互动-点击按钮弹出对话框

Bootstrap之JavaScript的模态框(modal)使用-不离开父窗体的情况下的互动-点击按钮弹出对话框

昊虹AI笔记 4108

LabVIEW QMH模板实战:从创建到错误处理的完整指南

本文提供LabVIEW QMH模板从创建到错误处理的完整实战指南。详细解析了队列消息处理器(QMH)作为LabVIEW核心设计模式如何实现任务解耦与异步通信,涵盖事件处理循环、消息处理循环的搭建、用户事件创建、队列引用管理、消息优先级控制以及健壮的错误处理机制,帮助开发者构建稳定、可维护的复杂应用程序。

white的博客 725

uniapp - [全端兼容] 高性能 tabbar 底部菜单凸起效果,原生系统自定义底部菜单不卡顿、切换页面不闪烁、自动缓存页面(底部菜单中间自定义一个图片并悬浮起来)

uniapp如何实现底部凸起按钮,uniapptabbar底部菜单怎么自定义,uniapp怎么让底部菜单中间突出来,uniapp自定义底部tabbar,uniapp高性能好用的底部菜单,uniapp自定义底部导航栏并解决闪烁问题,uniapp怎么设置凸起的底部tabbar,uniapp怎么用系统的底部菜单还想让中间的按钮凸起来,uniapp自定义tabbar性能不好怎么办,uni-app自定义导航栏实现中间凸起效果,uniapp底部导航栏中间圆形按钮凸起效果详细代码,uni-app自定义中间图标突起的

🏆 前端领域优质创作者 1万+

十二.通过bootstrap的modal.js来完成删除功能

Modal.js是bootstrap的一个js插件,以弹出对话框的形式出现,具有最小和最实用的功能集。具体使用方法可以参见http://v3.bootcss.com/javascript/   在这次实例中,还会包括一些Jquery及AJAX的方法,通过AJAX来根据删除结果对页面进行不刷新的更改。   1.      新建modal.html,通过这个文件来创建一个适用于绝大多数情况的m

陈磊的博客 9599

VS2019编译使用log4cplus 1.2.0

logger.properties 文件。第三步,创建项目来测试,配置库。第二步,使用VS2019编译。

h a 6 6 6 c k 为 你解决复杂难题! 525

bootstrap学习30--javascript插件--modal dialog

可选大小通过对 modal-dialog样式后面追加 .modal-lg 或者 .modal-sm 样式来实现 模态框的大小调整 基本格式<div class="modal" id="myDialog"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class

历程 1145

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Bootstrap 学习之js插件(模态框(Modal)插件)

Bootstrap模态框(Modal)插件   模态框(Modal)是覆盖在父窗体上的子窗体。通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动。子窗体可提供信息、交互等。   (1)提供信息、警告信息、大文本;   (2)确认按钮(多按钮);   (3)显示表单元素;(一般用Ajax操作等功能)   (4)其他需要特殊显示的信息(如单击缩略图时放大图片); ...

weixin_30598225的博客 221

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

bootstrap 学习之路 8

最近bootstrap的基本组件学完了,总是觉得没有什么可学,但是又不会做网页。 太让人头疼了。所以,我坚持了一下,把bootstrap的基础组件给练了一遍。把我练的结果上传。 上面使用的关于BOOTSTRAP 的 css,如果没有,可以去我的资源里面下载。 本章节主要是介绍bootstrap 的 javascript控制的插件,其实我是个web新手,我习惯叫他们组件,因为都是一组操作嘛。

wangboa123的专栏 1510

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

bootstrap如何用js调用模态框_使用bootstrap的JS插件实现模态框效果

在上一篇文章中,我们使用 js+css 实现了模态框效果,在理解了模态框的基本实现方法和实现效果后,我们就要寻找更快捷的方法,又快又好的来完成模态框开发需求,从而节约时间,提高效率。一个好的轮子,不仅能大幅减轻工作量,而且能让我们的代码更简明和优雅。今天我们选择使用著名的 bootstrap 库的模态框插件 modal.js 来实现模态框效果,同时也使大家进一步熟悉 bootstrap 的插件使用...

weixin_29117669的博客 913

Bootstrap v2 教程

Bootstrap 2(v2.3.2)是早期响应式前端框架,提供12列网格系统、CSS组件和jQuery插件(如轮播、模态框)。该教程介绍了其核心功能:基础设置(需引入jQuery)、网格布局(.span*类)、导航栏、按钮样式及JavaScript插件使用方法,并包含轮播示例代码。由于框架已过时(2013年发布),仅建议用于维护旧项目或学习历史版本,新项目推荐使用Bootstrap 5。教程重点覆盖v2的特性与局限,如不支持Flexbox等现代CSS特性。

m0_57545130的博客 522

2021-10-24

第一次WEB项目总结 1.有时候在一个jsp页面中需要包含另一个显示的jsp页面 这时候需要用到jsp中的一些标签 2.同时使用这些c:if需要到当前使用标签的顶部导入依赖 3.还有一点就是后段响应给前端的方法以及格式 3.1 后端响应前端的ajax请求方 式:response.getWriter().write(String s);这个方法能将后段的数据返回给前端的ajax请求。 还有一点就是后段响应给前端的数据格式,后段在将数据返回给前端数据之前,需要点将数据作处理后,再返回给前端,

qq_56330955的博客 95

Bootstrap 模态框(Modal)插件

Bootstrap 5 的 Modal(模态框)插件用于创建弹出对话框,适用于提示、表单或确认操作。通过 CSS 和 JavaScript 实现,支持平滑过渡效果和响应式设计。模态框由 .modal、.modal-dialog 和 .modal-content 构成,可通过 HTML 属性或 JavaScript 控制。常用功能包括显示/隐藏动画、背景遮罩和键盘交互。示例代码展示了如何创建触发按钮、模态框结构及事件监听,适用于各类交互场景。

likuoelie的博客 1290

Bootstrap - Modal 插件

有时候我们可能需要在页面弹出一个对话框,或者传统的叫做 Popup Window 的东西。其实 Bootstrap 给我们提供了一个插件,可以非常方便的构造这几种东西,这个插件叫做 Modal。 引入 js 文件 Bootstrap 的插件有很多都是独立成型的,并不需要依赖 Bootstrap 的所有 js 文件。想要使用 Modal 插件,我们既可以只引用单独的 modal.js 文件,还可以...

Tryking的博客 347

Bootstrap模态框(Modal)插件使用方法介绍

Bootstrap模态框(Modal)插件使用方法介绍简介用法modal方法 简介 模态框(Modal)是覆盖在父窗体上的子窗体。通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动。子窗体可提供信息、交互等。如果您想要单独引用该插件的功能,那么您需要引用 modal.js。或者,正如 Bootstrap 插件概览 一章中所提到,您可以引用 bootstrap.js 或压缩版的 bootstrap.min.js。 用法 您可以切换模态框(Modal)插件的隐藏内容: 通过 data

徊忆羽菲 847

基于bootstrap3模态框的插件-czf_modal.js

 刚写好,怕没时间整理。先大概的写下,

草上飞 3706

bootstrap——js插件(一、modal)

1、modal基本用法.modal.modal-dialog.modal-content .modal-content里面包括.modal-header.modal-body.modal-footer1)创建一个button,点击之后可以弹出一个modal有两种方法绑定事件 一种是:添加属性.data-toggle="modal"和.data-target="#modalId" 第二种是:添加Js

zaichuanguanshui的专栏 1106

BootStrap modal加入拖拽功能

bootstrap 中有javascript插件modal也就是对话框,加入拖拽功能 在使用modal时首选需要引用js link href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.css" rel="stylesheet"> script src="//cdn.bootcss.com/jquery/2.1.4/jquery.j

请大声叫我帅哥 1万+

bootstrap源码阅读(一)——modal原理

虽然bootstrap主要是css,但是我还是从bootstrap的js入手进行学习 #检查jquery,以及jquery版本/*typeof检查是否存在jquery对象*/ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') } /*检查jquery版本

Daisy花园 6547
上一篇: Bootstrap插件modal源码的学习
下一篇: Bootstrap的Model源码详细注释 (转)
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值