zoukankan      html  css  js  c++  java
  • js抽屉drawer插件

    用作:

      1. 从侧边栏滑入滑出需要展示的内容

    介绍:

      1. 插件遵循了UMD通用模块定义规范,能够在各种js环境下运行

      2. 依赖jQuery

      3. 插件可进行配置各项参数,具体如下注释部分

      4. 插件暴露了open、close方法,用于打开和关闭抽屉

    使用:

      1. 在html中定义抽屉中需要展示的内容,并放置在最外层元素下  

      2. 页面加载完成之后,获取定义的元素,并调用drawer方法初始化插件,同时保存返回的drawer实例

      3. 调用open方式展开抽屉

    代码:

      css(drawer.css)

     1 .drawer {
     2     width: 0;
     3     height: 100%;
     4     position: fixed;
     5     top: 0;
     6     z-index: 1000;
     7     display: block!important;
     8 }
     9 .drawer.right {
    10     right: 0;
    11 }
    12 .drawer.active {
    13     width: 100%;
    14 }
    15 .drawer-mask {
    16     position: absolute;
    17     top: 0;
    18     left: 0;
    19     width: 100%;
    20     height: 100%;
    21     opacity: 0;
    22     filter: alpha(opacity=45);
    23     transition: opacity .3s linear;
    24 }
    25 .drawer-mask-show {
    26     background-color: rgba(0,0,0,.45);
    27 }
    28 .drawer.active .drawer-mask {
    29     opacity: 1;
    30 }
    31 .drawer-content {
    32     height: 100%;
    33     background-color: #fff;
    34     box-shadow: none;
    35     transition: transform .3s cubic-bezier(.7,.3,.1,1), box-shadow .3s cubic-bezier(.7,.3,.1,1);
    36     position: absolute;
    37     top: 0;
    38 }
    39 .drawer.left .drawer-content {
    40     transform: translateX(-100%);
    41     box-shadow: 2px 0 8px rgba(0,0,0,.15);
    42 }
    43 .drawer.right .drawer-content {
    44     right: 0;
    45     transform: translateX(100%);
    46     box-shadow: -2px 0 8px rgba(0,0,0,.15);
    47 }
    48 .drawer.active .drawer-content{
    49     transform: none;
    50 }
    51 .drawer-content-header {
    52     height: 55px;
    53     line-height: 55px;
    54     border-bottom: 1px solid #e8e8e8;
    55 }
    56 .drawer-content-title {
    57     color: rgba(0,0,0,.85);
    58     font-weight: 600;
    59     font-size: 16px;
    60     margin: 0 20px;
    61 }
    62 .drawer-close {
    63     position: absolute;
    64     top: 0;        
    65     right: 20px;
    66     font-size: 22px;
    67     cursor: pointer;
    68 }
    69 .drawer-content-body {
    70     padding: 24px;
    71     max-height: calc(100% - 104px);
    72     overflow: auto;
    73 }
    74 .drawer-content-body::-webkit-scrollbar {
    75     width: 6px;
    76     height: 6px;
    77     background-color: hsla(0,0%,100%,0);
    78 }
    79 .drawer-content-body::-webkit-scrollbar-thumb {
    80     border-radius: 3px;
    81     background-color: #cfd6dd;
    82 }

      js(drawer.js

      1 /**
      2  * 自定义drawer抽屉插件
      3  * created by mengbing  2020/12/28
      4  * 
      5  * 属性:
      6  *        placement: 抽屉方向,可选值'left'/'right',默认'left'
      7  *          drawer的宽度,类型String,默认250px
      8  *         closable: 是否显示右上角关闭按钮,类型Boolean,默认true
      9  *        mask: 是否展示遮罩,类型Boolean,默认true
     10  *      maskClosable: 点击遮罩是否允许关闭,类型Boolean,默认true
     11  *      title: 标题,类型String
     12  *         afterOpenCallback: 打开抽屉后回调方法,类型function
     13  *        afterCloseCallback: 关闭抽屉后回调方法,类型function
     14  *         
     15  * 方法:
     16  *        open: 打开抽屉
     17  *       close: 关闭抽屉
     18  */
     19 ;(function (factory) {
     20     if (typeof define === 'function' && define.amd) {
     21         define(['jquery'], factory);
     22     } else if (typeof exports === 'object') {
     23         module.exports = factory(require('jquery'));
     24     } else {
     25         factory(jQuery);
     26     }
     27 }(function ($) {
     28     var mDrawer = {
     29         // 初始化drawer
     30         init (options) {
     31             var _this = $(this)
     32             mDrawer.el = _this
     33 
     34             var defaultOptions = {
     35                 placement: 'left',
     36                  '250px',
     37                 closable: true,
     38                 mask: true,
     39                 maskClosable: true
     40             }
     41             $.extend(true, defaultOptions, options || {})
     42             mDrawer.options = defaultOptions
     43 
     44             // 获取目标元素内容并移除
     45             var contentBody = _this.addClass('drawer ' + defaultOptions.placement).children().remove()
     46 
     47             // mask
     48             var drawerMask = $('<div>', {
     49                 class: 'drawer-mask'
     50             })
     51             _this.append(drawerMask)
     52             // 是否显示mask
     53             if (defaultOptions.mask) {
     54                 drawerMask.addClass("drawer-mask-show")
     55             }
     56             // 点击mask是否允许关闭
     57             if (defaultOptions.maskClosable) {
     58                 drawerMask.click(function() {
     59                     mDrawer.close()
     60                 })
     61             }
     62 
     63             // 构建drawer内容
     64             var drawerContent = $('<div>', {
     65                 class: 'drawer-content',
     66                 style: ' ' + defaultOptions.width
     67             })
     68             _this.append(drawerContent)
     69 
     70             if (defaultOptions.closable || defaultOptions.title) {
     71                 var drawerContentHeader = $('<div>', {
     72                     class: 'drawer-content-header'
     73                 })
     74                 drawerContent.append(drawerContentHeader)
     75 
     76                 if (defaultOptions.title) {
     77                     var drawerContentTitle = $('<div>', {
     78                         class: 'drawer-content-title',
     79                         text: defaultOptions.title
     80                     })
     81                     drawerContentHeader.append(drawerContentTitle)
     82                 }
     83 
     84                 if (defaultOptions.closable) {
     85                     var drawerClose = $('<div>', {
     86                         class: 'drawer-close',
     87                         text: '×'
     88                     })
     89                     drawerContentHeader.append(drawerClose)
     90 
     91                     drawerClose.click(function() {
     92                         mDrawer.close()
     93                     })
     94                 }
     95             }
     96 
     97             var drawerContentBody = $('<div>', {
     98                 class: 'drawer-content-body'
     99             })
    100             contentBody.appendTo(drawerContentBody)
    101             drawerContent.append(drawerContentBody)
    102 
    103             return mDrawer
    104         },
    105         // 打开抽屉
    106         open () {
    107             this.el.addClass("active")
    108             this._runCallback(this.options.afterOpenCallback)
    109         },
    110         // 关闭抽屉
    111         close () {
    112             this.el.removeClass("active")
    113             this._runCallback(this.options.afterCloseCallback)
    114         },
    115         // 调用回调函数
    116         _runCallback (callback) {
    117             if (!callback) return
    118 
    119             if (typeof callback === 'function') {
    120                 try {
    121                     callback()
    122                 } catch(e) {
    123                     console.error('回调函数调用失败:', e)
    124                 }
    125             } else {
    126                 console.error('callback is not a function')
    127             }
    128         }
    129     }
    130     
    131     $.fn.drawer = function (options) {
    132         return mDrawer.init.call(this, options)
    133     };
    134 }))

      html

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="utf-8">
     5     <title>抽屉</title>
     6 </head>
     7 <link rel="stylesheet" type="text/css" href="./mDrawer.css">
     8 <style type="text/css">
     9     * {
    10         padding: 0;
    11         margin: 0;
    12     }
    13     html,body {
    14         height: 100%;
    15         overflow: hidden;
    16     }
    17 </style>
    18 <body>
    19     <div id="drawer">
    20         <div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div>
    21         <div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div>
    22         <div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div>
    23         <div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div>
    24         <div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div>
    25         <div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div>
    26         <div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div>
    27         <div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div>
    28         <div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div><div>我是内容</div>
    29     </div>
    30     <button onclick="opena()">打开抽屉</button>
    31 </body>
    32 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
    33 <script type="text/javascript" src="./mDrawer.js"></script>
    34 <script type="text/javascript">
    35     var mDrawer
    36     window.onload = function() {
    37         mDrawer = $('#drawer').drawer({
    38             placement: 'right',
    39              '450px',
    40             title: '标题标题',
    41             afterOpenCallback: function () {
    42                 console.log("open了");
    43             }
    44         })
    45     }
    46 
    47     function opena() {
    48         mDrawer.open()
    49     }
    50 </script>
    51 </html>
  • 相关阅读:
    xavier NX编译caffe错误记录(二)
    ubuntu16安装微信
    linux中安装onenote(P3X OneNote)
    ubuntu16中,google浏览器安装OneNote Web Clipper插件
    酒店门锁接口说明
    在xaf 14 中实现 Tonyyang原文中的action权限
    MRP生产计划模式在多品种小批量生产过程中遭遇挑战
    C#代码
    简陋的会计凭证金额输入控件(加强) [转]
    简陋的会计凭证金额输入控件(再加强) [转]
  • 原文地址:https://www.cnblogs.com/mengbing/p/14205348.html
Copyright © 2011-2022 走看看