Open modalhref="#myModalexample" と div id="myModalexample" がポイント
/* ======================================================================== * Ratchet: modals.js v2.0.2 * http://goratchet.com/components#modals * ======================================================================== * Copyright 2014 Connor Sears * Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE) * ======================================================================== */ !(function () { 'use strict'; /**イベント発生したものが、処理の対象になるか検索する。**/ var findModals = function (target) { var i; //selecterでelementを検索し、取得 var modals = document.querySelectorAll('a'); /** イベント発生したところから、documentに向けて、親に向かって上がっていき、 aタグのリストの中で一致するものを探します。 **/ for (; target && target !== document; target = target.parentNode) { for (i = modals.length; i--;) { if (modals[i] === target) { return target; } } } }; /**表示するモーダルを特定**/ var getModal = function (event) { var modalToggle = findModals(event.target); if (modalToggle && modalToggle.hash) { //modalToggle.hashがそのままモーダルのIDとして指定される return document.querySelector(modalToggle.hash); } }; /** touchend イベントにListener登録**/ window.addEventListener('touchend', function (event) { var modal = getModal(event); if (modal) { /** getModalの時点でcontains('modal')とかの判定もしてよい気もするが、設計上の意味があるかしれないので、留意しておく。 **/ if (modal && modal.classList.contains('modal')) { /** classList.toggleでcssListに'active'がなければ追加、あったら削除する **/ modal.classList.toggle('active'); } //通常事項されるアクションをキャンセルする //この場合ページ遷移 event.preventDefault(); // prevents rewriting url (apps can still use hash values in url) } }); }());
どうやらactiveの追加、削除だけでmodalの動作を実装している
class="modal"
class="modal active"
/*! * ===================================================== * Ratchet v2.0.2 (http://goratchet.com) * Copyright 2014 Connor Sears * Licensed under MIT (https://github.com/twbs/ratchet/blob/master/LICENSE) * * v2.0.2 designed by @connors. * ===================================================== */ /*! normalize.css v3.0.1 | MIT License | git.io/normalize */ .modal { position: fixed; top: 0; z-index: 11; width: 100%; min-height: 100%; overflow: hidden; background-color: #fff; opacity: 0;//← /* //カンマで区切って2つ指定している(-transition) */ -webkit-transition: -webkit-transform .25s, opacity 1ms .25s; -moz-transition: -moz-transform .25s, opacity 1ms .25s; transition: transform .25s, opacity 1ms .25s; -webkit-transform: translate3d(0, 100%, 0); -ms-transform: translate3d(0, 100%, 0); transform: translate3d(0, 100%, 0); } .modal.active { height: 100%; opacity: 1; //← -webkit-transition: -webkit-transform .25s; -moz-transition: -moz-transform .25s; transition: transform .25s; -webkit-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); }
0 件のコメント:
コメントを投稿