对话框/Tips

Google Material Design 风格模态窗口插件

阿里云

这是一款效果非常酷的 Google Material Design 风格 js 模态窗口插件。该模态窗口采用 Material Design 的扁平风格,界面清晰时尚。在模态窗口中可以嵌入文字、图片、视频等任何 HTML 元素。

制作方法:

该模态窗口使用 CSS3 来驱动动画效果,整个效果的关键也在于这些动画,它给了这个模态窗口 Material Design 的视觉效果。

也想出现在这里?联系我们
创客主机

HTML 结构:

在这个效果中,点击按钮后放大的元素不是按钮本身或模态窗口,它实际上是一个动态添加的【div】。这个【div】被创建时大小和按钮尺寸相等,并使用 js 代码来扩大它。当实际的模态窗口变为可见状态时,在动态的移除这个【div】。基本的模态窗口的 HTML 结构如下:

  1. <!--模态窗口触发按钮-->
  2. <a href="" data-modal="#modal" class="modal__trigger">Modal 1</a>
  3. <!--模态窗口-->
  4. <div id="modal" class="modal modal__bg" role="dialog" aria-hidden="true">
  5.   <div class="modal__dialog">
  6.     <div class="modal__content">
  7.       <h1>Modal</h1>
  8.       <!--内容-->
  9.       <p>...</p>
  10.       <!-- 模态窗口关闭按钮 -->
  11.       <a href="" class="modal__close demo-close">
  12.         <svg class="" viewBox="0 0 24 24"><path d="M19 6.41l-1.41-1.41-5.59 5.59-5.59-5.59-1.41 1.41 5.59 5.59-5.59 5.59 1.41 1.41 5.59-5.59 5.59 5.59 1.41-1.41-5.59-5.59z"/><path d="M0 0h24v24h-24z" fill="none"/></svg>
  13.       </a>
  14.     </div>
  15.   </div>
  16. </div>

模态窗口的触发按钮上的 data-modal 由于指定该按钮用于触发哪个模态窗口,这是一个唯一的 ID 标识符。模态窗口的关闭按钮使用的是 SVG,它的颜色在 CSS 中控制。

CSS 样式:

模态窗口中的内容使用 Flex 来布局。变为动画添加了特殊贝兹曲线的 CSS 过渡效果。

  1. .modal {
  2.   will-change: visibility, opacity;
  3.   display: -webkit-box;
  4.   display: -webkit-flex;
  5.   display: -ms-flexbox;
  6.   display: flex;
  7.   -webkit-box-align: center;
  8.   -webkit-align-items: center;
  9.       -ms-flex-align: center;
  10.           align-items: center;
  11.   -webkit-box-pack: center;
  12.   -webkit-justify-content: center;
  13.       -ms-flex-pack: center;
  14.           justify-content: center;
  15.   position: fixed;
  16.   top: 0;
  17.   left: 0;
  18.   right: 0;
  19.   bottom: 0;
  20.   overflow-y: auto;
  21.   overflow-x: hidden;
  22.   z-index: 1000;
  23.   visibility: hidden;
  24.   opacity: 0;
  25.   -webkit-transition: all 0.5s cubic-bezier(0.23, 1, 0.32, 1);
  26.           transition: all 0.5s cubic-bezier(0.23, 1, 0.32, 1);
  27.   -webkit-transition-delay: 0s;
  28.           transition-delay: 0s;
  29. }

为了制作响应式效果,该模态窗口没有指定固定的大小,而是指定了 padding,靠实际的内容来填充模态窗口。

  1. .modal__content {
  2.   will-change: transform, opacity;
  3.   position: relative;
  4.   padding: 2.4rem;
  5.   background: #ffebee;
  6.   background-clip: padding-box;
  7.   box-shadow: 0 12px 15px 0 rgba(0,0,0,0.25);
  8.   opacity: 0;
  9.   -webkit-transition: all 0.25s cubic-bezier(0.23, 1, 0.32, 1);
  10.           transition: all 0.25s cubic-bezier(0.23, 1, 0.32, 1);
  11. }

JAVASCRIPT 代码:

当用户点击了模态窗口触发按钮,通过该按钮的 data-modal 属性可以知道是哪个模态窗口被触发了。同时,插件会在按钮上方出入一个占位【div】,并计算出它移动扩大到屏幕中间所需要的值。当模态窗口动画结束的时候,模态窗口会被添加一个 active class,使模态窗口和按钮和占位【div】具有相同的背景颜色,看起来就像是按钮被放大了一样。但实际上这里是三个不同的元素。创建占位【div】的代码如下:

  1. var makeDiv = function(self, modal) {
  2.   var fakediv = document.getElementById('modal__temp');
  3.   if (fakediv === null) {
  4.     var div = document.createElement('div');
  5.     div.id = 'modal__temp';
  6.     self.appendChild(div);
  7.     moveTrig(self, modal, div);
  8.   }
  9. };

Google Material Design 风格模态窗口插件

已有 448 人购买
查看演示升级 VIP立刻购买

演示地址 下载地址
收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!