手機彈窗組件(原生js)

來源:互聯網
上載者:User

標籤:javascript

Demo:http://7li.github.io/components/modal/

Repo: https://github.com/7LI/swipe


/***********************************************************************  Modal component  @author <702368372atqqcom> lyz  @options    - title   {String}   Modal title html    - content {String}   Modal content html    - close   {Function} Callback when modal is closed    - scroll  {Boolean}  Can document scroll  @usage    modal({      title: '<span>foo</span>',      content: '<div>bar</div>',      close: function() {        console.log('Modal closed.');      },      scoll: false    })    @version 0.0.1 ***********************************************************************/define(function() {  function modal(options){    var defaults = {      title: '提示',      content: 'Hello sg-modal',      close: null,      scroll: true    };    // Costomer options    options = options ? options : {};    options.title = options.title === undefined ? defaults.title : options.title;    options.content = options.content === undefined ? defaults.content : options.content;     options.close = options.close === undefined ? defaults.close : options.close;    options.scroll = options.scroll === undefined ? defaults.scroll : options.scroll;     // Display modal    var maskCreated = document.querySelector('.sg-modal-mask');    maskCreated ? fillModal() : createModal();    var modal = document.querySelector('.sg-modal');    var dialog = document.querySelector('.sg-modal-dialog');    var closeBtn = document.querySelector('.sg-modal-close');    modal.style.display = 'block';    // Center the dialog    var clientHeight =  document.documentElement.clientHeight;    var clientWidth =  document.documentElement.clientWidth;    var dialogHeight = dialog.offsetHeight;    var dialogWidth = dialog.offsetWidth;    dialog.style.top = (clientHeight - dialogHeight) / 2 + 'px';    dialog.style.left = (clientWidth - dialogWidth) / 2 + 'px';    // Bind modal close    closeBtn.addEventListener('click', closeHandler);    // Prevent document scroll    if (!options.scroll) {      document.addEventListener('touchmove', preventDefault);      document.addEventListener('mousewheel', preventDefault);    }        function closeHandler(){      modal.style.display = 'none';      closeBtn.removeEventListener('click', closeHandler);      if (options.close) {        options.close();        options.close = null;      }      if (!options.scroll) {        document.removeEventListener('touchmove', preventDefault);        document.removeEventListener('mousewheel', preventDefault);      }    }    function createModal() {      var str, tmp;      str =  '<div class="sg-modal" style="display:none;position:fixed;left:0;top:0;width:100%;height:100%;z-index:999999">';      str += '<div class="sg-modal-mask" style="position:fixed;width:100%;height:100%;background:#000;opacity:0.3;"></div>';      str += '<div class="sg-modal-dialog" style="position:absolute;backgound:#fff;">';      str += '  <div class="sg-modal-close" style="display:block;position:absolute;right:0;top:0;font-size:28px;color:#999;">×</div>';      str += '  <h1 class="sg-modal-title" style="height:40px;line-height:40px;padding-left:10px;background:#fff;min-width:50px">' + options.title + '</h1>';      str += '  <div class="sg-modal-content" style="background:#fff;">' + options.content + '</div>';      str += '</div>'      str += '</div>';      tmp = document.createElement('div');      tmp.innerHTML = str;      document.body.appendChild(tmp.firstElementChild);    }    function fillModal() {      var title = document.querySelector('.sg-modal-title');      var content = document.querySelector('.sg-modal-content');      title.innerHTML = options.title;      content.innerHTML = options.content;    }    function preventDefault(e) {      e.preventDefault()    }  }  modal.close = function() {    var closeBtn = document.querySelector('.sg-modal-close');    closeBtn && closeBtn.click();  }  return modal;})


手機彈窗組件(原生js)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.