430-slideable-menu.html 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Swiper demo</title>
  6. <meta
  7. name="viewport"
  8. content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1"
  9. />
  10. <!-- Link Swiper's CSS -->
  11. <link
  12. rel="stylesheet"
  13. href="../swiper-bundle.min.css"
  14. />
  15. <!-- Demo styles -->
  16. <style>
  17. html,
  18. body {
  19. position: relative;
  20. height: 100%;
  21. }
  22. body {
  23. background: #eee;
  24. font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
  25. font-size: 14px;
  26. color: #000;
  27. margin: 0;
  28. padding: 0;
  29. }
  30. .swiper {
  31. width: 100%;
  32. height: 100%;
  33. }
  34. .swiper-slide {
  35. text-align: center;
  36. font-size: 18px;
  37. background: #fff;
  38. /* Center slide text vertically */
  39. display: -webkit-box;
  40. display: -ms-flexbox;
  41. display: -webkit-flex;
  42. display: flex;
  43. -webkit-box-pack: center;
  44. -ms-flex-pack: center;
  45. -webkit-justify-content: center;
  46. justify-content: center;
  47. -webkit-box-align: center;
  48. -ms-flex-align: center;
  49. -webkit-align-items: center;
  50. align-items: center;
  51. }
  52. .menu {
  53. min-width: 100px;
  54. width: 70%;
  55. max-width: 320px;
  56. background-color: #2c8dfb;
  57. color: #fff;
  58. }
  59. .content {
  60. width: 100%;
  61. }
  62. .menu-button {
  63. position: absolute;
  64. top: 0px;
  65. left: 0px;
  66. padding: 15px;
  67. cursor: pointer;
  68. -webkit-transition: 0.3s;
  69. transition: 0.3s;
  70. background-color: #2c8dfb;
  71. /*margin: 14px;
  72. border-radius: 5px;*/
  73. }
  74. .menu-button .bar:nth-of-type(1) {
  75. margin-top: 0px;
  76. }
  77. .menu-button .bar:nth-of-type(3) {
  78. margin-bottom: 0px;
  79. }
  80. .bar {
  81. position: relative;
  82. display: block;
  83. width: 50px;
  84. height: 5px;
  85. margin: 10px auto;
  86. background-color: #fff;
  87. border-radius: 10px;
  88. -webkit-transition: 0.3s;
  89. transition: 0.3s;
  90. }
  91. .menu-button:hover .bar:nth-of-type(1) {
  92. -webkit-transform: translateY(1.5px) rotate(-4.5deg);
  93. -ms-transform: translateY(1.5px) rotate(-4.5deg);
  94. transform: translateY(1.5px) rotate(-4.5deg);
  95. }
  96. .menu-button:hover .bar:nth-of-type(2) {
  97. opacity: 0.9;
  98. }
  99. .menu-button:hover .bar:nth-of-type(3) {
  100. -webkit-transform: translateY(-1.5px) rotate(4.5deg);
  101. -ms-transform: translateY(-1.5px) rotate(4.5deg);
  102. transform: translateY(-1.5px) rotate(4.5deg);
  103. }
  104. .cross .bar:nth-of-type(1) {
  105. -webkit-transform: translateY(15px) rotate(-45deg);
  106. -ms-transform: translateY(15px) rotate(-45deg);
  107. transform: translateY(15px) rotate(-45deg);
  108. }
  109. .cross .bar:nth-of-type(2) {
  110. opacity: 0;
  111. }
  112. .cross .bar:nth-of-type(3) {
  113. -webkit-transform: translateY(-15px) rotate(45deg);
  114. -ms-transform: translateY(-15px) rotate(45deg);
  115. transform: translateY(-15px) rotate(45deg);
  116. }
  117. .cross:hover .bar:nth-of-type(1) {
  118. -webkit-transform: translateY(13.5px) rotate(-40.5deg);
  119. -ms-transform: translateY(13.5px) rotate(-40.5deg);
  120. transform: translateY(13.5px) rotate(-40.5deg);
  121. }
  122. .cross:hover .bar:nth-of-type(2) {
  123. opacity: 0.1;
  124. }
  125. .cross:hover .bar:nth-of-type(3) {
  126. -webkit-transform: translateY(-13.5px) rotate(40.5deg);
  127. -ms-transform: translateY(-13.5px) rotate(40.5deg);
  128. transform: translateY(-13.5px) rotate(40.5deg);
  129. }
  130. </style>
  131. </head>
  132. <body>
  133. <!-- Swiper -->
  134. <div class="swiper">
  135. <div class="swiper-wrapper">
  136. <div class="swiper-slide menu">Menu slide</div>
  137. <div class="swiper-slide content">
  138. <div class="menu-button">
  139. <div class="bar"></div>
  140. <div class="bar"></div>
  141. <div class="bar"></div>
  142. </div>
  143. Content slide
  144. </div>
  145. </div>
  146. </div>
  147. <!-- Swiper JS -->
  148. <script src="../swiper-bundle.min.js"></script>
  149. <!-- Initialize Swiper -->
  150. <script>
  151. var menuButton = document.querySelector('.menu-button');
  152. var openMenu = function () {
  153. swiper.slidePrev();
  154. };
  155. var swiper = new Swiper('.swiper', {
  156. slidesPerView: 'auto',
  157. initialSlide: 1,
  158. resistanceRatio: 0,
  159. slideToClickedSlide: true,
  160. on: {
  161. slideChangeTransitionStart: function () {
  162. var slider = this;
  163. if (slider.activeIndex === 0) {
  164. menuButton.classList.add('cross');
  165. // required because of slideToClickedSlide
  166. menuButton.removeEventListener('click', openMenu, true);
  167. } else {
  168. menuButton.classList.remove('cross');
  169. }
  170. },
  171. slideChangeTransitionEnd: function () {
  172. var slider = this;
  173. if (slider.activeIndex === 1) {
  174. menuButton.addEventListener('click', openMenu, true);
  175. }
  176. },
  177. },
  178. });
  179. </script>
  180. </body>
  181. </html>