限时优惠活动
亲爱的苦力吧用户,我们为了回馈新老用户一直以来的鼎力支持,即日起(2025-02-06至2025-03-06)凡是购买苦力吧VIP/充值K币的新老用户,都直接可获得买一送一的优惠馈赠。例如:购买一个月的VIP会员可直接获得两个月的VIP会员;充值100K币可直接获得200K币,以此类推!有任何疑问可联系在线客服,感谢各位用户对苦力吧素材的信任与厚爱,我们将一如既往的给大家上新更多优质的素材源码,祝大家开工大吉、工作顺利、心想事成。

jquery响应式自定义弹出层对话框插件

所属分类: 网页特效-弹出层    2023-10-25 09:14:29

jquery响应式自定义弹出层对话框插件 ie兼容6
 查看演示  登录后下载 温馨提示
登录会员即可享受免费下载
 我要建站

jquery响应式自定义弹出层对话框插件(共2个文件)

    • jquery-accessible-modal-window-aria.js
    • index.html

使用方法

  • code
  • source
  1. jQuery(document).ready(function($) {
  2. // loading modal ------------------------------------------------------------------------------------------------------------
  3. // init
  4. var $modals = $('.js-modal'),
  5. $body = $('body');
  6. $modals.each(function(index_to_expand) {
  7. var $this = $(this),
  8. index_lisible = index_to_expand + 1;
  9. $this.attr({
  10. 'id': 'label_modal_' + index_lisible,
  11. 'aria-haspopup': 'dialog'
  12. });
  13. });
  14. // jQuery formatted selector to search for focusable items
  15. var focusableElementsString = "a[href], area[href], input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]";
  16. if ($('#js-modal-page').length === 0) { // just to avoid missing #js-modal-page
  17. $body.wrapInner('<div id="js-modal-page"></div>');
  18. }
  19. // events ------------------
  20. $body.on('click', '.js-modal', function(event) {
  21. var $this = $(this),
  22. options = $this.data(),
  23. $modal_starter_id = $this.attr('id'),
  24. $modal_prefix_classes = typeof options.modalPrefixClass !== 'undefined' ? options.modalPrefixClass + '-' : '',
  25. $modal_text = options.modalText || '',
  26. modal_content_id = typeof options.modalContentId !== 'undefined' ? options.modalContentId : '',
  27. $modal_content = typeof options.modalContentId !== 'undefined' ? $('#' + modal_content_id) : '',
  28. $modal_title = options.modalTitle || '',
  29. $modal_close_text = options.modalCloseText || '关闭',
  30. $modal_close_title = options.modalCloseTitle || options.modalCloseText,
  31. $modal_close_img = options.modalCloseImg || '',
  32. $modal_background_click = options.modalBackgroundClick || '',
  33. $modal_focus_id = options.modalFocusId || '',
  34. $modal_aria = typeof options.modalAriaModal !== 'undefined' ? 'aria-modal="true"' : '',
  35. $modal_role_alertdialog = typeof options.modalUseRoleAlertdialog !== 'undefined' ? 'role="alertdialog"' : '',
  36. $modal_role_dialog = typeof options.modalRemoveRoleDialog !== 'undefined' || $modal_role_alertdialog === 'role="alertdialog"' ? '' : 'role="dialog"',
  37. $modal_tag = typeof options.modalRemoveDialogTag !== 'undefined' ? 'div' : 'dialog',
  38. $modal_code,
  39. $modal_overlay,
  40. $page = $('#js-modal-page');
  41. // insert code at the end
  42. $modal_code = '<' + $modal_tag + ' ' + $modal_role_dialog + ' ' + $modal_role_alertdialog + ' id="js-modal" class="' + $modal_prefix_classes + 'modal" aria-labelledby="modal-title" open ' + $modal_aria + '><div role="document" class="' + $modal_prefix_classes + 'modal__wrapper">';
  43. $modal_code += '<button type="button" id="js-modal-close" class="' + $modal_prefix_classes + 'modal-close" data-content-back-id="' + modal_content_id + '" data-focus-back="' + $modal_starter_id + '" title="' + $modal_close_title + '">';
  44. if ($modal_close_img !== '') {
  45. $modal_code += '<img src="' + $modal_close_img + '" alt="' + $modal_close_text + '" class="' + $modal_prefix_classes + 'modal__closeimg" />';
  46. } else {
  47. $modal_code += '<span class="' + $modal_prefix_classes + 'modal-close__text">' + $modal_close_text + '</span>';
  48. }
  49. $modal_code += '</button>';
  50. $modal_code += '<div class="' + $modal_prefix_classes + 'modal__content">';
  51. if ($modal_title !== '') {
  52. $modal_code += '<h1 id="modal-title" class="' + $modal_prefix_classes + 'modal-title">' + $modal_title + '</h1>';
  53. }
  54. if ($modal_text !== '') {
  55. $modal_code += '<p>' + $modal_text + '</p>';
  56. } else {
  57. if (modal_content_id !== '' && $modal_content.length) {
  58. //var $modal_content_id = $('#' + $modal_content_id);
  59. $modal_code += '<div id="js-modal-content">';
  60. $modal_code += $modal_content.html();
  61. $modal_code += '</div>';
  62. $modal_content.empty();
  63. }
  64. }
  65. $modal_code += '</div></div></' + $modal_tag + '>';
  66. $($modal_code).insertAfter($page);
  67. $body.addClass('no-scroll');
  68. $page.attr('aria-hidden', 'true');
  69. // add overlay
  70. if ($modal_background_click !== 'disabled') {
  71. $modal_overlay = '<span id="js-modal-overlay" class="' + $modal_prefix_classes + 'modal-overlay" title="' + $modal_close_title + '" data-background-click="enabled"><span class="invisible">' + $modal_close_text + '</span></span>';
  72. } else {
  73. $modal_overlay = '<span id="js-modal-overlay" class="' + $modal_prefix_classes + 'modal-overlay" data-background-click="disabled"></span>';
  74. }
  75. $($modal_overlay).insertAfter($('#js-modal'));
  76. if ($modal_focus_id !== '') {
  77. $('#' + $modal_focus_id).focus();
  78. } else {
  79. $('#js-modal-close').focus();
  80. }
  81. event.preventDefault();
  82. })
  83. // close button and esc key
  84. $body.on('click', '#js-modal-close', function() {
  85. var $this = $(this),
  86. $focus_back = '#' + $this.attr('data-focus-back'),
  87. $content_back_id = $this.attr('data-content-back-id'),
  88. $js_modal = $('#js-modal'),
  89. $js_modal_content = $('#js-modal-content'),
  90. $class_element = $js_modal.attr('class'),
  91. $class_element_reverse = $class_element + '--reverse',
  92. $js_modal_overlay = $('#js-modal-overlay'),
  93. $page = $('#js-modal-page');
  94. $page.removeAttr('aria-hidden');
  95. var delay = $js_modal.css("animation-duration");
  96. //alert(delay);
  97. if (delay != '0s') {
  98. var timeout = parseFloat(delay.replace('s', '')) * 1000;
  99. timeout++;
  100. $js_modal.removeClass($class_element);
  101. setTimeout(function() {
  102. $js_modal.addClass($class_element_reverse);
  103. }, 1);
  104. setTimeout(function() {
  105. $body.removeClass('no-scroll');
  106. $js_modal.remove();
  107. $js_modal_overlay.remove();
  108. if ($content_back_id !== '') {
  109. $('#' + $content_back_id).html($js_modal_content.html());
  110. }
  111. $($focus_back).focus();
  112. $js_modal.removeClass($class_element_reverse);
  113. $js_modal.addClass($class_element);
  114. }, timeout);
  115. } else {
  116. $body.removeClass('no-scroll');
  117. $js_modal.remove();
  118. $js_modal_overlay.remove();
  119. if ($content_back_id !== '') {
  120. $('#' + $content_back_id).html($js_modal_content.html());
  121. }
  122. $($focus_back).focus();
  123. }
  124. })
  125. .on('click', '#js-modal-overlay', function(event) {
  126. var $close = $('#js-modal-close');
  127. event.preventDefault();
  128. $close.trigger('click');
  129. })
  130. .on('click', '.js-modal-close', function(event) {
  131. var $close = $('#js-modal-close');
  132. $close.trigger('click');
  133. })
  134. .on('keydown', '#js-modal-overlay', function(event) {
  135. var $close = $('#js-modal-close');
  136. if (event.keyCode == 13 || event.keyCode == 32) { // space or enter
  137. event.preventDefault();
  138. $close.trigger('click');
  139. }
  140. })
  141. .on("keydown", "#js-modal", function(event) {
  142. var $this = $(this),
  143. $close = $('#js-modal-close');
  144. if (event.keyCode == 27) { // esc
  145. $close.trigger('click');
  146. }
  147. if (event.keyCode == 9) { // tab or maj+tab
  148. // get list of all children elements in given object
  149. var children = $this.find('*');
  150. // get list of focusable items
  151. var focusableItems = children.filter(focusableElementsString).filter(':visible');
  152. // get currently focused item
  153. var focusedItem = $(document.activeElement);
  154. // get the number of focusable items
  155. var numberOfFocusableItems = focusableItems.length;
  156. var focusedItemIndex = focusableItems.index(focusedItem);
  157. if (!event.shiftKey && (focusedItemIndex == numberOfFocusableItems - 1)) {
  158. focusableItems.get(0).focus();
  159. event.preventDefault();
  160. }
  161. if (event.shiftKey && focusedItemIndex == 0) {
  162. focusableItems.get(numberOfFocusableItems - 1).focus();
  163. event.preventDefault();
  164. }
  165. }
  166. })
  167. .on("keyup", ":not(#js-modal)", function(event) {
  168. var $js_modal = $('#js-modal'),
  169. focusedItem = $(document.activeElement),
  170. in_jsmodal = focusedItem.parents('#js-modal').length ? true : false,
  171. $close = $('#js-modal-close');
  172. if ($js_modal.length && event.keyCode == 9 && in_jsmodal === false) { // tab or maj+tab
  173. $close.focus();
  174. }
  175. })
  176. .on('focus', '#js-modal-tabindex', function() {
  177. var $close = $('#js-modal-close');
  178. $close.focus();
  179. });
  180. });
jQuery(document).ready(function($) {

    // loading modal ------------------------------------------------------------------------------------------------------------

    // init
    var $modals = $('.js-modal'),
        $body = $('body');

    $modals.each(function(index_to_expand) {
        var $this = $(this),
            index_lisible = index_to_expand + 1;

        $this.attr({
            'id': 'label_modal_' + index_lisible,
            'aria-haspopup': 'dialog'
        });

    });

    // jQuery formatted selector to search for focusable items
    var focusableElementsString = "a[href], area[href], input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]";

    if ($('#js-modal-page').length === 0) { // just to avoid missing #js-modal-page
        $body.wrapInner('<div id="js-modal-page"></div>');
    }

    // events ------------------
    $body.on('click', '.js-modal', function(event) {
        var $this = $(this),
            options = $this.data(),
            $modal_starter_id = $this.attr('id'),
            $modal_prefix_classes = typeof options.modalPrefixClass !== 'undefined' ? options.modalPrefixClass + '-' : '',
            $modal_text = options.modalText || '',
            modal_content_id = typeof options.modalContentId !== 'undefined' ? options.modalContentId : '',
            $modal_content = typeof options.modalContentId !== 'undefined' ? $('#' + modal_content_id) : '',
            $modal_title = options.modalTitle || '',
            $modal_close_text = options.modalCloseText || '关闭',
            $modal_close_title = options.modalCloseTitle || options.modalCloseText,
            $modal_close_img = options.modalCloseImg || '',
            $modal_background_click = options.modalBackgroundClick || '',
            $modal_focus_id = options.modalFocusId || '',
            $modal_aria = typeof options.modalAriaModal !== 'undefined' ? 'aria-modal="true"' : '',
            $modal_role_alertdialog = typeof options.modalUseRoleAlertdialog !== 'undefined' ? 'role="alertdialog"' : '',
            $modal_role_dialog = typeof options.modalRemoveRoleDialog !== 'undefined' || $modal_role_alertdialog === 'role="alertdialog"' ? '' : 'role="dialog"',
            $modal_tag = typeof options.modalRemoveDialogTag !== 'undefined' ? 'div' : 'dialog',
            $modal_code,
            $modal_overlay,
            $page = $('#js-modal-page');

        // insert code at the end
        $modal_code = '<' + $modal_tag + ' ' + $modal_role_dialog + ' ' + $modal_role_alertdialog + ' id="js-modal" class="' + $modal_prefix_classes + 'modal" aria-labelledby="modal-title" open ' + $modal_aria + '><div role="document" class="' + $modal_prefix_classes + 'modal__wrapper">';
        $modal_code += '<button type="button" id="js-modal-close" class="' + $modal_prefix_classes + 'modal-close" data-content-back-id="' + modal_content_id + '" data-focus-back="' + $modal_starter_id + '" title="' + $modal_close_title + '">';
        if ($modal_close_img !== '') {
            $modal_code += '<img src="' + $modal_close_img + '" alt="' + $modal_close_text + '" class="' + $modal_prefix_classes + 'modal__closeimg" />';
        } else {
            $modal_code += '<span class="' + $modal_prefix_classes + 'modal-close__text">' + $modal_close_text + '</span>';
        }
        $modal_code += '</button>';
        $modal_code += '<div class="' + $modal_prefix_classes + 'modal__content">';
        if ($modal_title !== '') {
            $modal_code += '<h1 id="modal-title" class="' + $modal_prefix_classes + 'modal-title">' + $modal_title + '</h1>';
        }

        if ($modal_text !== '') {
            $modal_code += '<p>' + $modal_text + '</p>';
        } else {
            if (modal_content_id !== '' && $modal_content.length) {
                //var $modal_content_id = $('#' + $modal_content_id);
                $modal_code += '<div id="js-modal-content">';
                $modal_code += $modal_content.html();
                $modal_code += '</div>';
                $modal_content.empty();
            }
        }
        $modal_code += '</div></div></' + $modal_tag + '>';

        $($modal_code).insertAfter($page);
        $body.addClass('no-scroll');

        $page.attr('aria-hidden', 'true');

        // add overlay
        if ($modal_background_click !== 'disabled') {
            $modal_overlay = '<span id="js-modal-overlay" class="' + $modal_prefix_classes + 'modal-overlay" title="' + $modal_close_title + '" data-background-click="enabled"><span class="invisible">' + $modal_close_text + '</span></span>';
        } else {
            $modal_overlay = '<span id="js-modal-overlay" class="' + $modal_prefix_classes + 'modal-overlay" data-background-click="disabled"></span>';
        }

        $($modal_overlay).insertAfter($('#js-modal'));

        if ($modal_focus_id !== '') {
            $('#' + $modal_focus_id).focus();
        } else {
            $('#js-modal-close').focus();
        }


        event.preventDefault();

    })
    // close button and esc key
    $body.on('click', '#js-modal-close', function() {
            var $this = $(this),
                $focus_back = '#' + $this.attr('data-focus-back'),
                $content_back_id = $this.attr('data-content-back-id'),
                $js_modal = $('#js-modal'),
                $js_modal_content = $('#js-modal-content'),
                $class_element = $js_modal.attr('class'),
                $class_element_reverse = $class_element + '--reverse',
                $js_modal_overlay = $('#js-modal-overlay'),
                $page = $('#js-modal-page');

            $page.removeAttr('aria-hidden');

            var delay = $js_modal.css("animation-duration");
            //alert(delay);
            if (delay != '0s') {
                var timeout = parseFloat(delay.replace('s', '')) * 1000;
                timeout++;

                $js_modal.removeClass($class_element);
                setTimeout(function() {
                    $js_modal.addClass($class_element_reverse);
                }, 1);
                setTimeout(function() {
                    $body.removeClass('no-scroll');
                    $js_modal.remove();
                    $js_modal_overlay.remove();
                    if ($content_back_id !== '') {
                        $('#' + $content_back_id).html($js_modal_content.html());
                    }
                    $($focus_back).focus();
                    $js_modal.removeClass($class_element_reverse);
                    $js_modal.addClass($class_element);
                }, timeout);
            } else {
                $body.removeClass('no-scroll');
                $js_modal.remove();
                $js_modal_overlay.remove();
                if ($content_back_id !== '') {
                    $('#' + $content_back_id).html($js_modal_content.html());
                }
                $($focus_back).focus();
            }

        })
        .on('click', '#js-modal-overlay', function(event) {
            var $close = $('#js-modal-close');

            event.preventDefault();
            $close.trigger('click');

        })
        .on('click', '.js-modal-close', function(event) {
            var $close = $('#js-modal-close');

            $close.trigger('click');

        })
        .on('keydown', '#js-modal-overlay', function(event) {
            var $close = $('#js-modal-close');

            if (event.keyCode == 13 || event.keyCode == 32) { // space or enter
                event.preventDefault();
                $close.trigger('click');
            }
        })
        .on("keydown", "#js-modal", function(event) {
            var $this = $(this),
                $close = $('#js-modal-close');

            if (event.keyCode == 27) { // esc
                $close.trigger('click');
            }
            if (event.keyCode == 9) { // tab or maj+tab

                // get list of all children elements in given object
                var children = $this.find('*');

                // get list of focusable items
                var focusableItems = children.filter(focusableElementsString).filter(':visible');

                // get currently focused item
                var focusedItem = $(document.activeElement);

                // get the number of focusable items
                var numberOfFocusableItems = focusableItems.length;

                var focusedItemIndex = focusableItems.index(focusedItem);

                if (!event.shiftKey && (focusedItemIndex == numberOfFocusableItems - 1)) {
                    focusableItems.get(0).focus();
                    event.preventDefault();
                }
                if (event.shiftKey && focusedItemIndex == 0) {
                    focusableItems.get(numberOfFocusableItems - 1).focus();
                    event.preventDefault();
                }


            }

        })
        .on("keyup", ":not(#js-modal)", function(event) {
            var $js_modal = $('#js-modal'),
                focusedItem = $(document.activeElement),
                in_jsmodal = focusedItem.parents('#js-modal').length ? true : false,
                $close = $('#js-modal-close');

            if ($js_modal.length && event.keyCode == 9 && in_jsmodal === false) { // tab or maj+tab
                $close.focus();
            }

        })
        .on('focus', '#js-modal-tabindex', function() {
            var $close = $('#js-modal-close');

            $close.focus();
        });


});

站长提示:
1. 苦力吧素材官方QQ群:950875342
2. 平台上所有素材资源,需注册登录会员方能正常下载。
3. 会员用户积极反馈网站、素材资源BUG或错误问题,每次奖励2K币
4. PHP源码类素材,如需协助安装调试,或你有二次开发需求,可联系苦力吧客服。
5. 付费素材资源,需充值后方能下载,如有任何疑问可直接联系苦力吧客服
相关资源 / 弹出层

jquery支持可视化弹出层表单编辑的json数据插件

jQuery支持的JSON编辑器将JSON数据转换为HTML表单,可快速添加/删除/编辑JSON数据内容
  弹出层
 6333  0

jquery点击列表图片弹出图片详情动画特效

一款带动画特效的弹出层窗口,有点类似于机械式动画特效。
  弹出层
 5308  0

jquery轻量级自定义弹出层插件

一个简单且非常轻量级(小于1kb)的jQuery模态窗口插件,可从DIV中加载弹出层内容。
  弹出层
 8390  0

jquery可自定义的右上角消息提示气泡插件

一款带简易API可自定义创建提醒消息插件,可视化的表单设置,直接生成运行代码。
  弹出层
 8366  0

评论数(0) 回复有机会获得K币 用户协议

^_^ 还没有人评论,快来抢个沙发!
😀
  • 😀
  • 😊
  • 😂
  • 😍
  • 😑
  • 😷
  • 😵
  • 😛
  • 😣
  • 😱
  • 😋
  • 😎
  • 😵
  • 😕
  • 😶
  • 😚
  • 😜
  • 😭
发表评论