diff --git a/css/swiper.css b/css/swiper.css
new file mode 100755
index 0000000..04416a9
--- /dev/null
+++ b/css/swiper.css
@@ -0,0 +1,664 @@
+/**
+ * Swiper 4.4.1
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
+ * http://www.idangero.us/swiper/
+ *
+ * Copyright 2014-2018 Vladimir Kharlampidi
+ *
+ * Released under the MIT License
+ *
+ * Released on: September 14, 2018
+ */
+.swiper-container {
+ margin: 0 auto;
+ position: relative;
+ overflow: hidden;
+ list-style: none;
+ padding: 0;
+ /* Fix of Webkit flickering */
+ z-index: 1;
+}
+.swiper-slide-main{
+ width: 1200px;
+ height: 100%;
+ margin: 0 auto;
+}
+.swiper-container-no-flexbox .swiper-slide {
+ float: left;
+}
+.swiper-slide-1{
+ background: url("../img/swiper-slide-1.png") no-repeat;
+ background-size:100% 100% ;
+}
+
+.swiper-slide-2{
+ background: url("../img/swiper-slide-2.png") no-repeat;
+ background-size:100% 100% ;
+}
+.swiper-slide-main-2{
+ background: url("../img/swiper-slide-main-2.png") no-repeat center right;
+}
+
+.swiper-slide-3{
+ background: url("../img/swiper-slide-3.png") no-repeat;
+ background-size:100% 100% ;
+}
+.swiper-slide-main-3{
+ background: url("../img/swiper-slide-main-3.png") no-repeat center right;
+}
+.swiper-slide-large{
+ padding-top: 208px;
+ margin: 0 0 25px 0;
+ font-size: 44px;
+ color: #fff;
+}
+.swiper-slide-middle{
+ margin-bottom: 37px;
+ font-size: 24px;
+ color: #fff;
+}
+.swiper-slide-more{
+ width:92px;
+ height:32px;
+ line-height: 32px;
+ text-align: center;
+ font-size: 14px;
+ color: #fff;
+ border: 1px solid rgba(255,255,255,.5);
+ border-radius: 2px;
+}
+.swiper-container-vertical > .swiper-wrapper {
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+.swiper-wrapper {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-transition-property: -webkit-transform;
+ transition-property: -webkit-transform;
+ -o-transition-property: transform;
+ transition-property: transform;
+ transition-property: transform, -webkit-transform;
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box;
+}
+.swiper-container-android .swiper-slide,
+.swiper-wrapper {
+ -webkit-transform: translate3d(0px, 0, 0);
+ transform: translate3d(0px, 0, 0);
+}
+.swiper-container-multirow > .swiper-wrapper {
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+}
+.swiper-container-free-mode > .swiper-wrapper {
+ -webkit-transition-timing-function: ease-out;
+ -o-transition-timing-function: ease-out;
+ transition-timing-function: ease-out;
+ margin: 0 auto;
+}
+.swiper-slide {
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ width: 100%;
+ height: 100%;
+ position: relative;
+ -webkit-transition-property: -webkit-transform;
+ transition-property: -webkit-transform;
+ -o-transition-property: transform;
+ transition-property: transform;
+ transition-property: transform, -webkit-transform;
+}
+.swiper-slide-invisible-blank {
+ visibility: hidden;
+}
+/* Auto Height */
+.swiper-container-autoheight,
+.swiper-container-autoheight .swiper-slide {
+ height: auto;
+}
+.swiper-container-autoheight .swiper-wrapper {
+ -webkit-box-align: start;
+ -webkit-align-items: flex-start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ -webkit-transition-property: height, -webkit-transform;
+ transition-property: height, -webkit-transform;
+ -o-transition-property: transform, height;
+ transition-property: transform, height;
+ transition-property: transform, height, -webkit-transform;
+}
+/* 3D Effects */
+.swiper-container-3d {
+ -webkit-perspective: 1200px;
+ perspective: 1200px;
+}
+.swiper-container-3d .swiper-wrapper,
+.swiper-container-3d .swiper-slide,
+.swiper-container-3d .swiper-slide-shadow-left,
+.swiper-container-3d .swiper-slide-shadow-right,
+.swiper-container-3d .swiper-slide-shadow-top,
+.swiper-container-3d .swiper-slide-shadow-bottom,
+.swiper-container-3d .swiper-cube-shadow {
+ -webkit-transform-style: preserve-3d;
+ transform-style: preserve-3d;
+}
+.swiper-container-3d .swiper-slide-shadow-left,
+.swiper-container-3d .swiper-slide-shadow-right,
+.swiper-container-3d .swiper-slide-shadow-top,
+.swiper-container-3d .swiper-slide-shadow-bottom {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ pointer-events: none;
+ z-index: 10;
+}
+.swiper-container-3d .swiper-slide-shadow-left {
+ background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+ background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ background-image: -o-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+}
+.swiper-container-3d .swiper-slide-shadow-right {
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+}
+.swiper-container-3d .swiper-slide-shadow-top {
+ background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+ background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+}
+.swiper-container-3d .swiper-slide-shadow-bottom {
+ background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
+ background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+ background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
+}
+/* IE10 Windows Phone 8 Fixes */
+.swiper-container-wp8-horizontal,
+.swiper-container-wp8-horizontal > .swiper-wrapper {
+ -ms-touch-action: pan-y;
+ touch-action: pan-y;
+}
+.swiper-container-wp8-vertical,
+.swiper-container-wp8-vertical > .swiper-wrapper {
+ -ms-touch-action: pan-x;
+ touch-action: pan-x;
+}
+.swiper-button-prev,
+.swiper-button-next {
+ position: absolute;
+ top: 50%;
+ width: 27px;
+ height: 44px;
+ margin-top: -22px;
+ z-index: 10;
+ cursor: pointer;
+ background-size: 27px 44px;
+ background-position: center;
+ background-repeat: no-repeat;
+}
+.swiper-button-prev.swiper-button-disabled,
+.swiper-button-next.swiper-button-disabled {
+ opacity: 0.35;
+ cursor: auto;
+ pointer-events: none;
+}
+.swiper-button-prev,
+.swiper-container-rtl .swiper-button-next {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
+ left: 10px;
+ right: auto;
+}
+.swiper-button-next,
+.swiper-container-rtl .swiper-button-prev {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
+ right: 10px;
+ left: auto;
+}
+.swiper-button-prev.swiper-button-white,
+.swiper-container-rtl .swiper-button-next.swiper-button-white {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-next.swiper-button-white,
+.swiper-container-rtl .swiper-button-prev.swiper-button-white {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-prev.swiper-button-black,
+.swiper-container-rtl .swiper-button-next.swiper-button-black {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-next.swiper-button-black,
+.swiper-container-rtl .swiper-button-prev.swiper-button-black {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
+}
+.swiper-button-lock {
+ display: none;
+}
+.swiper-pagination {
+ position: absolute;
+ text-align: center;
+ -webkit-transition: 300ms opacity;
+ -o-transition: 300ms opacity;
+ transition: 300ms opacity;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ z-index: 10;
+}
+.swiper-pagination.swiper-pagination-hidden {
+ opacity: 0;
+}
+/* Common Styles */
+.swiper-pagination-fraction,
+.swiper-pagination-custom,
+.swiper-container-horizontal > .swiper-pagination-bullets {
+ bottom: 10px;
+ left: 0;
+ width: 100%;
+}
+/* Bullets */
+.swiper-pagination-bullets-dynamic {
+ overflow: hidden;
+ font-size: 0;
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
+ -webkit-transform: scale(0.33);
+ -ms-transform: scale(0.33);
+ transform: scale(0.33);
+ position: relative;
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {
+ -webkit-transform: scale(1);
+ -ms-transform: scale(1);
+ transform: scale(1);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {
+ -webkit-transform: scale(0.66);
+ -ms-transform: scale(0.66);
+ transform: scale(0.66);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {
+ -webkit-transform: scale(0.33);
+ -ms-transform: scale(0.33);
+ transform: scale(0.33);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {
+ -webkit-transform: scale(0.66);
+ -ms-transform: scale(0.66);
+ transform: scale(0.66);
+}
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {
+ -webkit-transform: scale(0.33);
+ -ms-transform: scale(0.33);
+ transform: scale(0.33);
+}
+.swiper-pagination-bullet {
+ width: 8px;
+ height: 8px;
+ display: inline-block;
+ border-radius: 100%;
+ background: #000;
+ opacity: 0.2;
+}
+button.swiper-pagination-bullet {
+ border: none;
+ margin: 0;
+ padding: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+}
+.swiper-pagination-clickable .swiper-pagination-bullet {
+ cursor: pointer;
+}
+.swiper-pagination-bullet-active {
+ opacity: 1;
+ background: #007aff;
+}
+.swiper-container-vertical > .swiper-pagination-bullets {
+ right: 10px;
+ top: 50%;
+ -webkit-transform: translate3d(0px, -50%, 0);
+ transform: translate3d(0px, -50%, 0);
+}
+.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
+ margin: 6px 0;
+ display: block;
+}
+.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
+ top: 50%;
+ -webkit-transform: translateY(-50%);
+ -ms-transform: translateY(-50%);
+ transform: translateY(-50%);
+ width: 8px;
+}
+.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
+ display: inline-block;
+ -webkit-transition: 200ms top, 200ms -webkit-transform;
+ transition: 200ms top, 200ms -webkit-transform;
+ -o-transition: 200ms transform, 200ms top;
+ transition: 200ms transform, 200ms top;
+ transition: 200ms transform, 200ms top, 200ms -webkit-transform;
+}
+.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
+ margin: 0 4px;
+}
+.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
+ left: 50%;
+ -webkit-transform: translateX(-50%);
+ -ms-transform: translateX(-50%);
+ transform: translateX(-50%);
+ white-space: nowrap;
+}
+.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
+ -webkit-transition: 200ms left, 200ms -webkit-transform;
+ transition: 200ms left, 200ms -webkit-transform;
+ -o-transition: 200ms transform, 200ms left;
+ transition: 200ms transform, 200ms left;
+ transition: 200ms transform, 200ms left, 200ms -webkit-transform;
+}
+.swiper-container-horizontal.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
+ -webkit-transition: 200ms right, 200ms -webkit-transform;
+ transition: 200ms right, 200ms -webkit-transform;
+ -o-transition: 200ms transform, 200ms right;
+ transition: 200ms transform, 200ms right;
+ transition: 200ms transform, 200ms right, 200ms -webkit-transform;
+}
+/* Progress */
+.swiper-pagination-progressbar {
+ background: rgba(0, 0, 0, 0.25);
+ position: absolute;
+}
+.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
+ background: #007aff;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ -webkit-transform: scale(0);
+ -ms-transform: scale(0);
+ transform: scale(0);
+ -webkit-transform-origin: left top;
+ -ms-transform-origin: left top;
+ transform-origin: left top;
+}
+.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
+ -webkit-transform-origin: right top;
+ -ms-transform-origin: right top;
+ transform-origin: right top;
+}
+.swiper-container-horizontal > .swiper-pagination-progressbar,
+.swiper-container-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {
+ width: 100%;
+ height: 4px;
+ left: 0;
+ top: 0;
+}
+.swiper-container-vertical > .swiper-pagination-progressbar,
+.swiper-container-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {
+ width: 4px;
+ height: 100%;
+ left: 0;
+ top: 0;
+}
+.swiper-pagination-white .swiper-pagination-bullet-active {
+ background: #ffffff;
+}
+.swiper-pagination-progressbar.swiper-pagination-white {
+ background: rgba(255, 255, 255, 0.25);
+}
+.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill {
+ background: #ffffff;
+}
+.swiper-pagination-black .swiper-pagination-bullet-active {
+ background: #000000;
+}
+.swiper-pagination-progressbar.swiper-pagination-black {
+ background: rgba(0, 0, 0, 0.25);
+}
+.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill {
+ background: #000000;
+}
+.swiper-pagination-lock {
+ display: none;
+}
+/* Scrollbar */
+.swiper-scrollbar {
+ border-radius: 10px;
+ position: relative;
+ -ms-touch-action: none;
+ background: rgba(0, 0, 0, 0.1);
+}
+.swiper-container-horizontal > .swiper-scrollbar {
+ position: absolute;
+ left: 1%;
+ bottom: 3px;
+ z-index: 50;
+ height: 5px;
+ width: 98%;
+}
+.swiper-container-vertical > .swiper-scrollbar {
+ position: absolute;
+ right: 3px;
+ top: 1%;
+ z-index: 50;
+ width: 5px;
+ height: 98%;
+}
+.swiper-scrollbar-drag {
+ height: 100%;
+ width: 100%;
+ position: relative;
+ background: rgba(0, 0, 0, 0.5);
+ border-radius: 10px;
+ left: 0;
+ top: 0;
+}
+.swiper-scrollbar-cursor-drag {
+ cursor: move;
+}
+.swiper-scrollbar-lock {
+ display: none;
+}
+.swiper-zoom-container {
+ width: 100%;
+ height: 100%;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ text-align: center;
+}
+.swiper-zoom-container > img,
+.swiper-zoom-container > svg,
+.swiper-zoom-container > canvas {
+ max-width: 100%;
+ max-height: 100%;
+ -o-object-fit: contain;
+ object-fit: contain;
+}
+.swiper-slide-zoomed {
+ cursor: move;
+}
+/* Preloader */
+.swiper-lazy-preloader {
+ width: 42px;
+ height: 42px;
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ margin-left: -21px;
+ margin-top: -21px;
+ z-index: 10;
+ -webkit-transform-origin: 50%;
+ -ms-transform-origin: 50%;
+ transform-origin: 50%;
+ -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;
+ animation: swiper-preloader-spin 1s steps(12, end) infinite;
+}
+.swiper-lazy-preloader:after {
+ display: block;
+ content: '';
+ width: 100%;
+ height: 100%;
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+ background-position: 50%;
+ background-size: 100%;
+ background-repeat: no-repeat;
+}
+.swiper-lazy-preloader-white:after {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
+}
+@-webkit-keyframes swiper-preloader-spin {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@keyframes swiper-preloader-spin {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+/* a11y */
+.swiper-container .swiper-notification {
+ position: absolute;
+ left: 0;
+ top: 0;
+ pointer-events: none;
+ opacity: 0;
+ z-index: -1000;
+}
+.swiper-container-fade.swiper-container-free-mode .swiper-slide {
+ -webkit-transition-timing-function: ease-out;
+ -o-transition-timing-function: ease-out;
+ transition-timing-function: ease-out;
+}
+.swiper-container-fade .swiper-slide {
+ pointer-events: none;
+ -webkit-transition-property: opacity;
+ -o-transition-property: opacity;
+ transition-property: opacity;
+}
+.swiper-container-fade .swiper-slide .swiper-slide {
+ pointer-events: none;
+}
+.swiper-container-fade .swiper-slide-active,
+.swiper-container-fade .swiper-slide-active .swiper-slide-active {
+ pointer-events: auto;
+}
+.swiper-container-cube {
+ overflow: visible;
+}
+.swiper-container-cube .swiper-slide {
+ pointer-events: none;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ z-index: 1;
+ visibility: hidden;
+ -webkit-transform-origin: 0 0;
+ -ms-transform-origin: 0 0;
+ transform-origin: 0 0;
+ width: 100%;
+ height: 100%;
+}
+.swiper-container-cube .swiper-slide .swiper-slide {
+ pointer-events: none;
+}
+.swiper-container-cube.swiper-container-rtl .swiper-slide {
+ -webkit-transform-origin: 100% 0;
+ -ms-transform-origin: 100% 0;
+ transform-origin: 100% 0;
+}
+.swiper-container-cube .swiper-slide-active,
+.swiper-container-cube .swiper-slide-active .swiper-slide-active {
+ pointer-events: auto;
+}
+.swiper-container-cube .swiper-slide-active,
+.swiper-container-cube .swiper-slide-next,
+.swiper-container-cube .swiper-slide-prev,
+.swiper-container-cube .swiper-slide-next + .swiper-slide {
+ pointer-events: auto;
+ visibility: visible;
+}
+.swiper-container-cube .swiper-slide-shadow-top,
+.swiper-container-cube .swiper-slide-shadow-bottom,
+.swiper-container-cube .swiper-slide-shadow-left,
+.swiper-container-cube .swiper-slide-shadow-right {
+ z-index: 0;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+}
+.swiper-container-cube .swiper-cube-shadow {
+ position: absolute;
+ left: 0;
+ bottom: 0px;
+ width: 100%;
+ height: 100%;
+ background: #000;
+ opacity: 0.6;
+ -webkit-filter: blur(50px);
+ filter: blur(50px);
+ z-index: 0;
+}
+.swiper-container-flip {
+ overflow: visible;
+}
+.swiper-container-flip .swiper-slide {
+ pointer-events: none;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ z-index: 1;
+}
+.swiper-container-flip .swiper-slide .swiper-slide {
+ pointer-events: none;
+}
+.swiper-container-flip .swiper-slide-active,
+.swiper-container-flip .swiper-slide-active .swiper-slide-active {
+ pointer-events: auto;
+}
+.swiper-container-flip .swiper-slide-shadow-top,
+.swiper-container-flip .swiper-slide-shadow-bottom,
+.swiper-container-flip .swiper-slide-shadow-left,
+.swiper-container-flip .swiper-slide-shadow-right {
+ z-index: 0;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+}
+.swiper-container-coverflow .swiper-wrapper {
+ /* Windows 8 IE 10 fix */
+ -ms-perspective: 1200px;
+}
diff --git a/img/swiper-slide-1.png b/img/swiper-slide-1.png
new file mode 100755
index 0000000..5562c7c
--- /dev/null
+++ b/img/swiper-slide-1.png
diff --git a/img/swiper-slide-2.png b/img/swiper-slide-2.png
new file mode 100755
index 0000000..b0de653
--- /dev/null
+++ b/img/swiper-slide-2.png
diff --git a/img/swiper-slide-3.png b/img/swiper-slide-3.png
new file mode 100755
index 0000000..479563f
--- /dev/null
+++ b/img/swiper-slide-3.png
diff --git a/img/swiper-slide-main-2.png b/img/swiper-slide-main-2.png
new file mode 100755
index 0000000..5b447a0
--- /dev/null
+++ b/img/swiper-slide-main-2.png
diff --git a/img/swiper-slide-main-3.png b/img/swiper-slide-main-3.png
new file mode 100755
index 0000000..6c11d25
--- /dev/null
+++ b/img/swiper-slide-main-3.png
diff --git a/index.html b/index.html
index e49059c..58567db 100755
--- a/index.html
+++ b/index.html
@@ -23,6 +23,7 @@
+
@@ -44,21 +45,21 @@
-
-
-
Ruby Color
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
- awesome creative
-
- design
- Theme
- codes
-
-
-
Lorem Ipsum is simply dummy text of the printing and printing and typesetting industry.
Lorem Ipsum has been the industry's
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
云端saas服务,大并发高可用架构
+
为您的数字资产保驾护航 数据全方位呵护
+
了解更多
-
-
+
+
+
+
+
@@ -924,10 +926,10 @@
-
-
+
+
-
+
diff --git a/js/main.js b/js/main.js
index d9fc439..0981e59 100755
--- a/js/main.js
+++ b/js/main.js
@@ -179,3 +179,21 @@
});
});
+ // var mySwiper = new Swiper ('.swiper-container', {
+ // direction: 'horizontal',
+ // loop: true,
+ // speed: 500, //设置轮播时长 可以不设置 会有个默认值
+ // autoplay: true,//可选选项,自动滑动
+ // // // 如果需要分页器
+ // // pagination: {
+ // // el: '.swiper-pagination',
+ // // },
+ // autoplay: {
+ // disableOnInteraction: false, //点击后继续轮播(这个很重要)
+ // delay: 1000, //自动轮播的每次的时间 可以不设置 会有个默认值
+ // },
+ // // 如果需要前进后退按钮
+ //
+ //
+ // })
+
diff --git a/js/swiper.js b/js/swiper.js
new file mode 100755
index 0000000..9b05275
--- /dev/null
+++ b/js/swiper.js
@@ -0,0 +1,7975 @@
+/**
+ * Swiper 4.4.1
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
+ * http://www.idangero.us/swiper/
+ *
+ * Copyright 2014-2018 Vladimir Kharlampidi
+ *
+ * Released under the MIT License
+ *
+ * Released on: September 14, 2018
+ */
+
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global.Swiper = factory());
+}(this, (function () { 'use strict';
+
+ /**
+ * SSR Window 1.0.1
+ * Better handling for window object in SSR environment
+ * https://github.com/nolimits4web/ssr-window
+ *
+ * Copyright 2018, Vladimir Kharlampidi
+ *
+ * Licensed under MIT
+ *
+ * Released on: July 18, 2018
+ */
+ var doc = (typeof document === 'undefined') ? {
+ body: {},
+ addEventListener: function addEventListener() {},
+ removeEventListener: function removeEventListener() {},
+ activeElement: {
+ blur: function blur() {},
+ nodeName: '',
+ },
+ querySelector: function querySelector() {
+ return null;
+ },
+ querySelectorAll: function querySelectorAll() {
+ return [];
+ },
+ getElementById: function getElementById() {
+ return null;
+ },
+ createEvent: function createEvent() {
+ return {
+ initEvent: function initEvent() {},
+ };
+ },
+ createElement: function createElement() {
+ return {
+ children: [],
+ childNodes: [],
+ style: {},
+ setAttribute: function setAttribute() {},
+ getElementsByTagName: function getElementsByTagName() {
+ return [];
+ },
+ };
+ },
+ location: { hash: '' },
+ } : document; // eslint-disable-line
+
+ var win = (typeof window === 'undefined') ? {
+ document: doc,
+ navigator: {
+ userAgent: '',
+ },
+ location: {},
+ history: {},
+ CustomEvent: function CustomEvent() {
+ return this;
+ },
+ addEventListener: function addEventListener() {},
+ removeEventListener: function removeEventListener() {},
+ getComputedStyle: function getComputedStyle() {
+ return {
+ getPropertyValue: function getPropertyValue() {
+ return '';
+ },
+ };
+ },
+ Image: function Image() {},
+ Date: function Date() {},
+ screen: {},
+ setTimeout: function setTimeout() {},
+ clearTimeout: function clearTimeout() {},
+ } : window; // eslint-disable-line
+
+ /**
+ * Dom7 2.1.2
+ * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API
+ * http://framework7.io/docs/dom.html
+ *
+ * Copyright 2018, Vladimir Kharlampidi
+ * The iDangero.us
+ * http://www.idangero.us/
+ *
+ * Licensed under MIT
+ *
+ * Released on: September 13, 2018
+ */
+
+ var Dom7 = function Dom7(arr) {
+ var self = this;
+ // Create array-like object
+ for (var i = 0; i < arr.length; i += 1) {
+ self[i] = arr[i];
+ }
+ self.length = arr.length;
+ // Return collection with methods
+ return this;
+ };
+
+ function $(selector, context) {
+ var arr = [];
+ var i = 0;
+ if (selector && !context) {
+ if (selector instanceof Dom7) {
+ return selector;
+ }
+ }
+ if (selector) {
+ // String
+ if (typeof selector === 'string') {
+ var els;
+ var tempParent;
+ var html = selector.trim();
+ if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {
+ var toCreate = 'div';
+ if (html.indexOf(':~]/)) {
+ // Pure ID selector
+ els = [doc.getElementById(selector.trim().split('#')[1])];
+ } else {
+ // Other selectors
+ els = (context || doc).querySelectorAll(selector.trim());
+ }
+ for (i = 0; i < els.length; i += 1) {
+ if (els[i]) { arr.push(els[i]); }
+ }
+ }
+ } else if (selector.nodeType || selector === win || selector === doc) {
+ // Node/element
+ arr.push(selector);
+ } else if (selector.length > 0 && selector[0].nodeType) {
+ // Array of elements or instance of Dom
+ for (i = 0; i < selector.length; i += 1) {
+ arr.push(selector[i]);
+ }
+ }
+ }
+ return new Dom7(arr);
+ }
+
+ $.fn = Dom7.prototype;
+ $.Class = Dom7;
+ $.Dom7 = Dom7;
+
+ function unique(arr) {
+ var uniqueArray = [];
+ for (var i = 0; i < arr.length; i += 1) {
+ if (uniqueArray.indexOf(arr[i]) === -1) { uniqueArray.push(arr[i]); }
+ }
+ return uniqueArray;
+ }
+
+ // Classes and attributes
+ function addClass(className) {
+ var this$1 = this;
+
+ if (typeof className === 'undefined') {
+ return this;
+ }
+ var classes = className.split(' ');
+ for (var i = 0; i < classes.length; i += 1) {
+ for (var j = 0; j < this.length; j += 1) {
+ if (typeof this$1[j] !== 'undefined' && typeof this$1[j].classList !== 'undefined') { this$1[j].classList.add(classes[i]); }
+ }
+ }
+ return this;
+ }
+ function removeClass(className) {
+ var this$1 = this;
+
+ var classes = className.split(' ');
+ for (var i = 0; i < classes.length; i += 1) {
+ for (var j = 0; j < this.length; j += 1) {
+ if (typeof this$1[j] !== 'undefined' && typeof this$1[j].classList !== 'undefined') { this$1[j].classList.remove(classes[i]); }
+ }
+ }
+ return this;
+ }
+ function hasClass(className) {
+ if (!this[0]) { return false; }
+ return this[0].classList.contains(className);
+ }
+ function toggleClass(className) {
+ var this$1 = this;
+
+ var classes = className.split(' ');
+ for (var i = 0; i < classes.length; i += 1) {
+ for (var j = 0; j < this.length; j += 1) {
+ if (typeof this$1[j] !== 'undefined' && typeof this$1[j].classList !== 'undefined') { this$1[j].classList.toggle(classes[i]); }
+ }
+ }
+ return this;
+ }
+ function attr(attrs, value) {
+ var arguments$1 = arguments;
+ var this$1 = this;
+
+ if (arguments.length === 1 && typeof attrs === 'string') {
+ // Get attr
+ if (this[0]) { return this[0].getAttribute(attrs); }
+ return undefined;
+ }
+
+ // Set attrs
+ for (var i = 0; i < this.length; i += 1) {
+ if (arguments$1.length === 2) {
+ // String
+ this$1[i].setAttribute(attrs, value);
+ } else {
+ // Object
+ // eslint-disable-next-line
+ for (var attrName in attrs) {
+ this$1[i][attrName] = attrs[attrName];
+ this$1[i].setAttribute(attrName, attrs[attrName]);
+ }
+ }
+ }
+ return this;
+ }
+ // eslint-disable-next-line
+ function removeAttr(attr) {
+ var this$1 = this;
+
+ for (var i = 0; i < this.length; i += 1) {
+ this$1[i].removeAttribute(attr);
+ }
+ return this;
+ }
+ function data(key, value) {
+ var this$1 = this;
+
+ var el;
+ if (typeof value === 'undefined') {
+ el = this[0];
+ // Get value
+ if (el) {
+ if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {
+ return el.dom7ElementDataStorage[key];
+ }
+
+ var dataKey = el.getAttribute(("data-" + key));
+ if (dataKey) {
+ return dataKey;
+ }
+ return undefined;
+ }
+ return undefined;
+ }
+
+ // Set value
+ for (var i = 0; i < this.length; i += 1) {
+ el = this$1[i];
+ if (!el.dom7ElementDataStorage) { el.dom7ElementDataStorage = {}; }
+ el.dom7ElementDataStorage[key] = value;
+ }
+ return this;
+ }
+ // Transforms
+ // eslint-disable-next-line
+ function transform(transform) {
+ var this$1 = this;
+
+ for (var i = 0; i < this.length; i += 1) {
+ var elStyle = this$1[i].style;
+ elStyle.webkitTransform = transform;
+ elStyle.transform = transform;
+ }
+ return this;
+ }
+ function transition(duration) {
+ var this$1 = this;
+
+ if (typeof duration !== 'string') {
+ duration = duration + "ms"; // eslint-disable-line
+ }
+ for (var i = 0; i < this.length; i += 1) {
+ var elStyle = this$1[i].style;
+ elStyle.webkitTransitionDuration = duration;
+ elStyle.transitionDuration = duration;
+ }
+ return this;
+ }
+ // Events
+ function on() {
+ var this$1 = this;
+ var assign;
+
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+ var eventType = args[0];
+ var targetSelector = args[1];
+ var listener = args[2];
+ var capture = args[3];
+ if (typeof args[1] === 'function') {
+ (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);
+ targetSelector = undefined;
+ }
+ if (!capture) { capture = false; }
+
+ function handleLiveEvent(e) {
+ var target = e.target;
+ if (!target) { return; }
+ var eventData = e.target.dom7EventData || [];
+ if (eventData.indexOf(e) < 0) {
+ eventData.unshift(e);
+ }
+ if ($(target).is(targetSelector)) { listener.apply(target, eventData); }
+ else {
+ var parents = $(target).parents(); // eslint-disable-line
+ for (var k = 0; k < parents.length; k += 1) {
+ if ($(parents[k]).is(targetSelector)) { listener.apply(parents[k], eventData); }
+ }
+ }
+ }
+ function handleEvent(e) {
+ var eventData = e && e.target ? e.target.dom7EventData || [] : [];
+ if (eventData.indexOf(e) < 0) {
+ eventData.unshift(e);
+ }
+ listener.apply(this, eventData);
+ }
+ var events = eventType.split(' ');
+ var j;
+ for (var i = 0; i < this.length; i += 1) {
+ var el = this$1[i];
+ if (!targetSelector) {
+ for (j = 0; j < events.length; j += 1) {
+ var event = events[j];
+ if (!el.dom7Listeners) { el.dom7Listeners = {}; }
+ if (!el.dom7Listeners[event]) { el.dom7Listeners[event] = []; }
+ el.dom7Listeners[event].push({
+ listener: listener,
+ proxyListener: handleEvent,
+ });
+ el.addEventListener(event, handleEvent, capture);
+ }
+ } else {
+ // Live events
+ for (j = 0; j < events.length; j += 1) {
+ var event$1 = events[j];
+ if (!el.dom7LiveListeners) { el.dom7LiveListeners = {}; }
+ if (!el.dom7LiveListeners[event$1]) { el.dom7LiveListeners[event$1] = []; }
+ el.dom7LiveListeners[event$1].push({
+ listener: listener,
+ proxyListener: handleLiveEvent,
+ });
+ el.addEventListener(event$1, handleLiveEvent, capture);
+ }
+ }
+ }
+ return this;
+ }
+ function off() {
+ var this$1 = this;
+ var assign;
+
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+ var eventType = args[0];
+ var targetSelector = args[1];
+ var listener = args[2];
+ var capture = args[3];
+ if (typeof args[1] === 'function') {
+ (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);
+ targetSelector = undefined;
+ }
+ if (!capture) { capture = false; }
+
+ var events = eventType.split(' ');
+ for (var i = 0; i < events.length; i += 1) {
+ var event = events[i];
+ for (var j = 0; j < this.length; j += 1) {
+ var el = this$1[j];
+ var handlers = (void 0);
+ if (!targetSelector && el.dom7Listeners) {
+ handlers = el.dom7Listeners[event];
+ } else if (targetSelector && el.dom7LiveListeners) {
+ handlers = el.dom7LiveListeners[event];
+ }
+ if (handlers && handlers.length) {
+ for (var k = handlers.length - 1; k >= 0; k -= 1) {
+ var handler = handlers[k];
+ if (listener && handler.listener === listener) {
+ el.removeEventListener(event, handler.proxyListener, capture);
+ handlers.splice(k, 1);
+ } else if (!listener) {
+ el.removeEventListener(event, handler.proxyListener, capture);
+ handlers.splice(k, 1);
+ }
+ }
+ }
+ }
+ }
+ return this;
+ }
+ function trigger() {
+ var this$1 = this;
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+
+ var events = args[0].split(' ');
+ var eventData = args[1];
+ for (var i = 0; i < events.length; i += 1) {
+ var event = events[i];
+ for (var j = 0; j < this.length; j += 1) {
+ var el = this$1[j];
+ var evt = (void 0);
+ try {
+ evt = new win.CustomEvent(event, {
+ detail: eventData,
+ bubbles: true,
+ cancelable: true,
+ });
+ } catch (e) {
+ evt = doc.createEvent('Event');
+ evt.initEvent(event, true, true);
+ evt.detail = eventData;
+ }
+ // eslint-disable-next-line
+ el.dom7EventData = args.filter(function (data, dataIndex) { return dataIndex > 0; });
+ el.dispatchEvent(evt);
+ el.dom7EventData = [];
+ delete el.dom7EventData;
+ }
+ }
+ return this;
+ }
+ function transitionEnd(callback) {
+ var events = ['webkitTransitionEnd', 'transitionend'];
+ var dom = this;
+ var i;
+ function fireCallBack(e) {
+ /* jshint validthis:true */
+ if (e.target !== this) { return; }
+ callback.call(this, e);
+ for (i = 0; i < events.length; i += 1) {
+ dom.off(events[i], fireCallBack);
+ }
+ }
+ if (callback) {
+ for (i = 0; i < events.length; i += 1) {
+ dom.on(events[i], fireCallBack);
+ }
+ }
+ return this;
+ }
+ function outerWidth(includeMargins) {
+ if (this.length > 0) {
+ if (includeMargins) {
+ // eslint-disable-next-line
+ var styles = this.styles();
+ return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));
+ }
+ return this[0].offsetWidth;
+ }
+ return null;
+ }
+ function outerHeight(includeMargins) {
+ if (this.length > 0) {
+ if (includeMargins) {
+ // eslint-disable-next-line
+ var styles = this.styles();
+ return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));
+ }
+ return this[0].offsetHeight;
+ }
+ return null;
+ }
+ function offset() {
+ if (this.length > 0) {
+ var el = this[0];
+ var box = el.getBoundingClientRect();
+ var body = doc.body;
+ var clientTop = el.clientTop || body.clientTop || 0;
+ var clientLeft = el.clientLeft || body.clientLeft || 0;
+ var scrollTop = el === win ? win.scrollY : el.scrollTop;
+ var scrollLeft = el === win ? win.scrollX : el.scrollLeft;
+ return {
+ top: (box.top + scrollTop) - clientTop,
+ left: (box.left + scrollLeft) - clientLeft,
+ };
+ }
+
+ return null;
+ }
+ function styles() {
+ if (this[0]) { return win.getComputedStyle(this[0], null); }
+ return {};
+ }
+ function css(props, value) {
+ var this$1 = this;
+
+ var i;
+ if (arguments.length === 1) {
+ if (typeof props === 'string') {
+ if (this[0]) { return win.getComputedStyle(this[0], null).getPropertyValue(props); }
+ } else {
+ for (i = 0; i < this.length; i += 1) {
+ // eslint-disable-next-line
+ for (var prop in props) {
+ this$1[i].style[prop] = props[prop];
+ }
+ }
+ return this;
+ }
+ }
+ if (arguments.length === 2 && typeof props === 'string') {
+ for (i = 0; i < this.length; i += 1) {
+ this$1[i].style[props] = value;
+ }
+ return this;
+ }
+ return this;
+ }
+ // Iterate over the collection passing elements to `callback`
+ function each(callback) {
+ var this$1 = this;
+
+ // Don't bother continuing without a callback
+ if (!callback) { return this; }
+ // Iterate over the current collection
+ for (var i = 0; i < this.length; i += 1) {
+ // If the callback returns false
+ if (callback.call(this$1[i], i, this$1[i]) === false) {
+ // End the loop early
+ return this$1;
+ }
+ }
+ // Return `this` to allow chained DOM operations
+ return this;
+ }
+ // eslint-disable-next-line
+ function html(html) {
+ var this$1 = this;
+
+ if (typeof html === 'undefined') {
+ return this[0] ? this[0].innerHTML : undefined;
+ }
+
+ for (var i = 0; i < this.length; i += 1) {
+ this$1[i].innerHTML = html;
+ }
+ return this;
+ }
+ // eslint-disable-next-line
+ function text(text) {
+ var this$1 = this;
+
+ if (typeof text === 'undefined') {
+ if (this[0]) {
+ return this[0].textContent.trim();
+ }
+ return null;
+ }
+
+ for (var i = 0; i < this.length; i += 1) {
+ this$1[i].textContent = text;
+ }
+ return this;
+ }
+ function is(selector) {
+ var el = this[0];
+ var compareWith;
+ var i;
+ if (!el || typeof selector === 'undefined') { return false; }
+ if (typeof selector === 'string') {
+ if (el.matches) { return el.matches(selector); }
+ else if (el.webkitMatchesSelector) { return el.webkitMatchesSelector(selector); }
+ else if (el.msMatchesSelector) { return el.msMatchesSelector(selector); }
+
+ compareWith = $(selector);
+ for (i = 0; i < compareWith.length; i += 1) {
+ if (compareWith[i] === el) { return true; }
+ }
+ return false;
+ } else if (selector === doc) { return el === doc; }
+ else if (selector === win) { return el === win; }
+
+ if (selector.nodeType || selector instanceof Dom7) {
+ compareWith = selector.nodeType ? [selector] : selector;
+ for (i = 0; i < compareWith.length; i += 1) {
+ if (compareWith[i] === el) { return true; }
+ }
+ return false;
+ }
+ return false;
+ }
+ function index() {
+ var child = this[0];
+ var i;
+ if (child) {
+ i = 0;
+ // eslint-disable-next-line
+ while ((child = child.previousSibling) !== null) {
+ if (child.nodeType === 1) { i += 1; }
+ }
+ return i;
+ }
+ return undefined;
+ }
+ // eslint-disable-next-line
+ function eq(index) {
+ if (typeof index === 'undefined') { return this; }
+ var length = this.length;
+ var returnIndex;
+ if (index > length - 1) {
+ return new Dom7([]);
+ }
+ if (index < 0) {
+ returnIndex = length + index;
+ if (returnIndex < 0) { return new Dom7([]); }
+ return new Dom7([this[returnIndex]]);
+ }
+ return new Dom7([this[index]]);
+ }
+ function append() {
+ var this$1 = this;
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+
+ var newChild;
+
+ for (var k = 0; k < args.length; k += 1) {
+ newChild = args[k];
+ for (var i = 0; i < this.length; i += 1) {
+ if (typeof newChild === 'string') {
+ var tempDiv = doc.createElement('div');
+ tempDiv.innerHTML = newChild;
+ while (tempDiv.firstChild) {
+ this$1[i].appendChild(tempDiv.firstChild);
+ }
+ } else if (newChild instanceof Dom7) {
+ for (var j = 0; j < newChild.length; j += 1) {
+ this$1[i].appendChild(newChild[j]);
+ }
+ } else {
+ this$1[i].appendChild(newChild);
+ }
+ }
+ }
+
+ return this;
+ }
+ function prepend(newChild) {
+ var this$1 = this;
+
+ var i;
+ var j;
+ for (i = 0; i < this.length; i += 1) {
+ if (typeof newChild === 'string') {
+ var tempDiv = doc.createElement('div');
+ tempDiv.innerHTML = newChild;
+ for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {
+ this$1[i].insertBefore(tempDiv.childNodes[j], this$1[i].childNodes[0]);
+ }
+ } else if (newChild instanceof Dom7) {
+ for (j = 0; j < newChild.length; j += 1) {
+ this$1[i].insertBefore(newChild[j], this$1[i].childNodes[0]);
+ }
+ } else {
+ this$1[i].insertBefore(newChild, this$1[i].childNodes[0]);
+ }
+ }
+ return this;
+ }
+ function next(selector) {
+ if (this.length > 0) {
+ if (selector) {
+ if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {
+ return new Dom7([this[0].nextElementSibling]);
+ }
+ return new Dom7([]);
+ }
+
+ if (this[0].nextElementSibling) { return new Dom7([this[0].nextElementSibling]); }
+ return new Dom7([]);
+ }
+ return new Dom7([]);
+ }
+ function nextAll(selector) {
+ var nextEls = [];
+ var el = this[0];
+ if (!el) { return new Dom7([]); }
+ while (el.nextElementSibling) {
+ var next = el.nextElementSibling; // eslint-disable-line
+ if (selector) {
+ if ($(next).is(selector)) { nextEls.push(next); }
+ } else { nextEls.push(next); }
+ el = next;
+ }
+ return new Dom7(nextEls);
+ }
+ function prev(selector) {
+ if (this.length > 0) {
+ var el = this[0];
+ if (selector) {
+ if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {
+ return new Dom7([el.previousElementSibling]);
+ }
+ return new Dom7([]);
+ }
+
+ if (el.previousElementSibling) { return new Dom7([el.previousElementSibling]); }
+ return new Dom7([]);
+ }
+ return new Dom7([]);
+ }
+ function prevAll(selector) {
+ var prevEls = [];
+ var el = this[0];
+ if (!el) { return new Dom7([]); }
+ while (el.previousElementSibling) {
+ var prev = el.previousElementSibling; // eslint-disable-line
+ if (selector) {
+ if ($(prev).is(selector)) { prevEls.push(prev); }
+ } else { prevEls.push(prev); }
+ el = prev;
+ }
+ return new Dom7(prevEls);
+ }
+ function parent(selector) {
+ var this$1 = this;
+
+ var parents = []; // eslint-disable-line
+ for (var i = 0; i < this.length; i += 1) {
+ if (this$1[i].parentNode !== null) {
+ if (selector) {
+ if ($(this$1[i].parentNode).is(selector)) { parents.push(this$1[i].parentNode); }
+ } else {
+ parents.push(this$1[i].parentNode);
+ }
+ }
+ }
+ return $(unique(parents));
+ }
+ function parents(selector) {
+ var this$1 = this;
+
+ var parents = []; // eslint-disable-line
+ for (var i = 0; i < this.length; i += 1) {
+ var parent = this$1[i].parentNode; // eslint-disable-line
+ while (parent) {
+ if (selector) {
+ if ($(parent).is(selector)) { parents.push(parent); }
+ } else {
+ parents.push(parent);
+ }
+ parent = parent.parentNode;
+ }
+ }
+ return $(unique(parents));
+ }
+ function closest(selector) {
+ var closest = this; // eslint-disable-line
+ if (typeof selector === 'undefined') {
+ return new Dom7([]);
+ }
+ if (!closest.is(selector)) {
+ closest = closest.parents(selector).eq(0);
+ }
+ return closest;
+ }
+ function find(selector) {
+ var this$1 = this;
+
+ var foundElements = [];
+ for (var i = 0; i < this.length; i += 1) {
+ var found = this$1[i].querySelectorAll(selector);
+ for (var j = 0; j < found.length; j += 1) {
+ foundElements.push(found[j]);
+ }
+ }
+ return new Dom7(foundElements);
+ }
+ function children(selector) {
+ var this$1 = this;
+
+ var children = []; // eslint-disable-line
+ for (var i = 0; i < this.length; i += 1) {
+ var childNodes = this$1[i].childNodes;
+
+ for (var j = 0; j < childNodes.length; j += 1) {
+ if (!selector) {
+ if (childNodes[j].nodeType === 1) { children.push(childNodes[j]); }
+ } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {
+ children.push(childNodes[j]);
+ }
+ }
+ }
+ return new Dom7(unique(children));
+ }
+ function remove() {
+ var this$1 = this;
+
+ for (var i = 0; i < this.length; i += 1) {
+ if (this$1[i].parentNode) { this$1[i].parentNode.removeChild(this$1[i]); }
+ }
+ return this;
+ }
+ function add() {
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+
+ var dom = this;
+ var i;
+ var j;
+ for (i = 0; i < args.length; i += 1) {
+ var toAdd = $(args[i]);
+ for (j = 0; j < toAdd.length; j += 1) {
+ dom[dom.length] = toAdd[j];
+ dom.length += 1;
+ }
+ }
+ return dom;
+ }
+
+ var Methods = {
+ addClass: addClass,
+ removeClass: removeClass,
+ hasClass: hasClass,
+ toggleClass: toggleClass,
+ attr: attr,
+ removeAttr: removeAttr,
+ data: data,
+ transform: transform,
+ transition: transition,
+ on: on,
+ off: off,
+ trigger: trigger,
+ transitionEnd: transitionEnd,
+ outerWidth: outerWidth,
+ outerHeight: outerHeight,
+ offset: offset,
+ css: css,
+ each: each,
+ html: html,
+ text: text,
+ is: is,
+ index: index,
+ eq: eq,
+ append: append,
+ prepend: prepend,
+ next: next,
+ nextAll: nextAll,
+ prev: prev,
+ prevAll: prevAll,
+ parent: parent,
+ parents: parents,
+ closest: closest,
+ find: find,
+ children: children,
+ remove: remove,
+ add: add,
+ styles: styles,
+ };
+
+ Object.keys(Methods).forEach(function (methodName) {
+ $.fn[methodName] = Methods[methodName];
+ });
+
+ var Utils = {
+ deleteProps: function deleteProps(obj) {
+ var object = obj;
+ Object.keys(object).forEach(function (key) {
+ try {
+ object[key] = null;
+ } catch (e) {
+ // no getter for object
+ }
+ try {
+ delete object[key];
+ } catch (e) {
+ // something got wrong
+ }
+ });
+ },
+ nextTick: function nextTick(callback, delay) {
+ if ( delay === void 0 ) delay = 0;
+
+ return setTimeout(callback, delay);
+ },
+ now: function now() {
+ return Date.now();
+ },
+ getTranslate: function getTranslate(el, axis) {
+ if ( axis === void 0 ) axis = 'x';
+
+ var matrix;
+ var curTransform;
+ var transformMatrix;
+
+ var curStyle = win.getComputedStyle(el, null);
+
+ if (win.WebKitCSSMatrix) {
+ curTransform = curStyle.transform || curStyle.webkitTransform;
+ if (curTransform.split(',').length > 6) {
+ curTransform = curTransform.split(', ').map(function (a) { return a.replace(',', '.'); }).join(', ');
+ }
+ // Some old versions of Webkit choke when 'none' is passed; pass
+ // empty string instead in this case
+ transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
+ } else {
+ transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
+ matrix = transformMatrix.toString().split(',');
+ }
+
+ if (axis === 'x') {
+ // Latest Chrome and webkits Fix
+ if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m41; }
+ // Crazy IE10 Matrix
+ else if (matrix.length === 16) { curTransform = parseFloat(matrix[12]); }
+ // Normal Browsers
+ else { curTransform = parseFloat(matrix[4]); }
+ }
+ if (axis === 'y') {
+ // Latest Chrome and webkits Fix
+ if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m42; }
+ // Crazy IE10 Matrix
+ else if (matrix.length === 16) { curTransform = parseFloat(matrix[13]); }
+ // Normal Browsers
+ else { curTransform = parseFloat(matrix[5]); }
+ }
+ return curTransform || 0;
+ },
+ parseUrlQuery: function parseUrlQuery(url) {
+ var query = {};
+ var urlToParse = url || win.location.href;
+ var i;
+ var params;
+ var param;
+ var length;
+ if (typeof urlToParse === 'string' && urlToParse.length) {
+ urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : '';
+ params = urlToParse.split('&').filter(function (paramsPart) { return paramsPart !== ''; });
+ length = params.length;
+
+ for (i = 0; i < length; i += 1) {
+ param = params[i].replace(/#\S+/g, '').split('=');
+ query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';
+ }
+ }
+ return query;
+ },
+ isObject: function isObject(o) {
+ return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;
+ },
+ extend: function extend() {
+ var args = [], len$1 = arguments.length;
+ while ( len$1-- ) args[ len$1 ] = arguments[ len$1 ];
+
+ var to = Object(args[0]);
+ for (var i = 1; i < args.length; i += 1) {
+ var nextSource = args[i];
+ if (nextSource !== undefined && nextSource !== null) {
+ var keysArray = Object.keys(Object(nextSource));
+ for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
+ var nextKey = keysArray[nextIndex];
+ var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
+ if (desc !== undefined && desc.enumerable) {
+ if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
+ Utils.extend(to[nextKey], nextSource[nextKey]);
+ } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
+ to[nextKey] = {};
+ Utils.extend(to[nextKey], nextSource[nextKey]);
+ } else {
+ to[nextKey] = nextSource[nextKey];
+ }
+ }
+ }
+ }
+ }
+ return to;
+ },
+ };
+
+ var Support = (function Support() {
+ var testDiv = doc.createElement('div');
+ return {
+ touch: (win.Modernizr && win.Modernizr.touch === true) || (function checkTouch() {
+ return !!(('ontouchstart' in win) || (win.DocumentTouch && doc instanceof win.DocumentTouch));
+ }()),
+
+ pointerEvents: !!(win.navigator.pointerEnabled || win.PointerEvent),
+ prefixedPointerEvents: !!win.navigator.msPointerEnabled,
+
+ transition: (function checkTransition() {
+ var style = testDiv.style;
+ return ('transition' in style || 'webkitTransition' in style || 'MozTransition' in style);
+ }()),
+ transforms3d: (win.Modernizr && win.Modernizr.csstransforms3d === true) || (function checkTransforms3d() {
+ var style = testDiv.style;
+ return ('webkitPerspective' in style || 'MozPerspective' in style || 'OPerspective' in style || 'MsPerspective' in style || 'perspective' in style);
+ }()),
+
+ flexbox: (function checkFlexbox() {
+ var style = testDiv.style;
+ var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');
+ for (var i = 0; i < styles.length; i += 1) {
+ if (styles[i] in style) { return true; }
+ }
+ return false;
+ }()),
+
+ observer: (function checkObserver() {
+ return ('MutationObserver' in win || 'WebkitMutationObserver' in win);
+ }()),
+
+ passiveListener: (function checkPassiveListener() {
+ var supportsPassive = false;
+ try {
+ var opts = Object.defineProperty({}, 'passive', {
+ // eslint-disable-next-line
+ get: function get() {
+ supportsPassive = true;
+ },
+ });
+ win.addEventListener('testPassiveListener', null, opts);
+ } catch (e) {
+ // No support
+ }
+ return supportsPassive;
+ }()),
+
+ gestures: (function checkGestures() {
+ return 'ongesturestart' in win;
+ }()),
+ };
+ }());
+
+ var SwiperClass = function SwiperClass(params) {
+ if ( params === void 0 ) params = {};
+
+ var self = this;
+ self.params = params;
+
+ // Events
+ self.eventsListeners = {};
+
+ if (self.params && self.params.on) {
+ Object.keys(self.params.on).forEach(function (eventName) {
+ self.on(eventName, self.params.on[eventName]);
+ });
+ }
+ };
+
+ var staticAccessors = { components: { configurable: true } };
+
+ SwiperClass.prototype.on = function on (events, handler, priority) {
+ var self = this;
+ if (typeof handler !== 'function') { return self; }
+ var method = priority ? 'unshift' : 'push';
+ events.split(' ').forEach(function (event) {
+ if (!self.eventsListeners[event]) { self.eventsListeners[event] = []; }
+ self.eventsListeners[event][method](handler);
+ });
+ return self;
+ };
+
+ SwiperClass.prototype.once = function once (events, handler, priority) {
+ var self = this;
+ if (typeof handler !== 'function') { return self; }
+ function onceHandler() {
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+
+ handler.apply(self, args);
+ self.off(events, onceHandler);
+ }
+ return self.on(events, onceHandler, priority);
+ };
+
+ SwiperClass.prototype.off = function off (events, handler) {
+ var self = this;
+ if (!self.eventsListeners) { return self; }
+ events.split(' ').forEach(function (event) {
+ if (typeof handler === 'undefined') {
+ self.eventsListeners[event] = [];
+ } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {
+ self.eventsListeners[event].forEach(function (eventHandler, index) {
+ if (eventHandler === handler) {
+ self.eventsListeners[event].splice(index, 1);
+ }
+ });
+ }
+ });
+ return self;
+ };
+
+ SwiperClass.prototype.emit = function emit () {
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+
+ var self = this;
+ if (!self.eventsListeners) { return self; }
+ var events;
+ var data;
+ var context;
+ if (typeof args[0] === 'string' || Array.isArray(args[0])) {
+ events = args[0];
+ data = args.slice(1, args.length);
+ context = self;
+ } else {
+ events = args[0].events;
+ data = args[0].data;
+ context = args[0].context || self;
+ }
+ var eventsArray = Array.isArray(events) ? events : events.split(' ');
+ eventsArray.forEach(function (event) {
+ if (self.eventsListeners && self.eventsListeners[event]) {
+ var handlers = [];
+ self.eventsListeners[event].forEach(function (eventHandler) {
+ handlers.push(eventHandler);
+ });
+ handlers.forEach(function (eventHandler) {
+ eventHandler.apply(context, data);
+ });
+ }
+ });
+ return self;
+ };
+
+ SwiperClass.prototype.useModulesParams = function useModulesParams (instanceParams) {
+ var instance = this;
+ if (!instance.modules) { return; }
+ Object.keys(instance.modules).forEach(function (moduleName) {
+ var module = instance.modules[moduleName];
+ // Extend params
+ if (module.params) {
+ Utils.extend(instanceParams, module.params);
+ }
+ });
+ };
+
+ SwiperClass.prototype.useModules = function useModules (modulesParams) {
+ if ( modulesParams === void 0 ) modulesParams = {};
+
+ var instance = this;
+ if (!instance.modules) { return; }
+ Object.keys(instance.modules).forEach(function (moduleName) {
+ var module = instance.modules[moduleName];
+ var moduleParams = modulesParams[moduleName] || {};
+ // Extend instance methods and props
+ if (module.instance) {
+ Object.keys(module.instance).forEach(function (modulePropName) {
+ var moduleProp = module.instance[modulePropName];
+ if (typeof moduleProp === 'function') {
+ instance[modulePropName] = moduleProp.bind(instance);
+ } else {
+ instance[modulePropName] = moduleProp;
+ }
+ });
+ }
+ // Add event listeners
+ if (module.on && instance.on) {
+ Object.keys(module.on).forEach(function (moduleEventName) {
+ instance.on(moduleEventName, module.on[moduleEventName]);
+ });
+ }
+
+ // Module create callback
+ if (module.create) {
+ module.create.bind(instance)(moduleParams);
+ }
+ });
+ };
+
+ staticAccessors.components.set = function (components) {
+ var Class = this;
+ if (!Class.use) { return; }
+ Class.use(components);
+ };
+
+ SwiperClass.installModule = function installModule (module) {
+ var params = [], len = arguments.length - 1;
+ while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];
+
+ var Class = this;
+ if (!Class.prototype.modules) { Class.prototype.modules = {}; }
+ var name = module.name || (((Object.keys(Class.prototype.modules).length) + "_" + (Utils.now())));
+ Class.prototype.modules[name] = module;
+ // Prototype
+ if (module.proto) {
+ Object.keys(module.proto).forEach(function (key) {
+ Class.prototype[key] = module.proto[key];
+ });
+ }
+ // Class
+ if (module.static) {
+ Object.keys(module.static).forEach(function (key) {
+ Class[key] = module.static[key];
+ });
+ }
+ // Callback
+ if (module.install) {
+ module.install.apply(Class, params);
+ }
+ return Class;
+ };
+
+ SwiperClass.use = function use (module) {
+ var params = [], len = arguments.length - 1;
+ while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];
+
+ var Class = this;
+ if (Array.isArray(module)) {
+ module.forEach(function (m) { return Class.installModule(m); });
+ return Class;
+ }
+ return Class.installModule.apply(Class, [ module ].concat( params ));
+ };
+
+ Object.defineProperties( SwiperClass, staticAccessors );
+
+ function updateSize () {
+ var swiper = this;
+ var width;
+ var height;
+ var $el = swiper.$el;
+ if (typeof swiper.params.width !== 'undefined') {
+ width = swiper.params.width;
+ } else {
+ width = $el[0].clientWidth;
+ }
+ if (typeof swiper.params.height !== 'undefined') {
+ height = swiper.params.height;
+ } else {
+ height = $el[0].clientHeight;
+ }
+ if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {
+ return;
+ }
+
+ // Subtract paddings
+ width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);
+ height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);
+
+ Utils.extend(swiper, {
+ width: width,
+ height: height,
+ size: swiper.isHorizontal() ? width : height,
+ });
+ }
+
+ function updateSlides () {
+ var swiper = this;
+ var params = swiper.params;
+
+ var $wrapperEl = swiper.$wrapperEl;
+ var swiperSize = swiper.size;
+ var rtl = swiper.rtlTranslate;
+ var wrongRTL = swiper.wrongRTL;
+ var isVirtual = swiper.virtual && params.virtual.enabled;
+ var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
+ var slides = $wrapperEl.children(("." + (swiper.params.slideClass)));
+ var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
+ var snapGrid = [];
+ var slidesGrid = [];
+ var slidesSizesGrid = [];
+
+ var offsetBefore = params.slidesOffsetBefore;
+ if (typeof offsetBefore === 'function') {
+ offsetBefore = params.slidesOffsetBefore.call(swiper);
+ }
+
+ var offsetAfter = params.slidesOffsetAfter;
+ if (typeof offsetAfter === 'function') {
+ offsetAfter = params.slidesOffsetAfter.call(swiper);
+ }
+
+ var previousSnapGridLength = swiper.snapGrid.length;
+ var previousSlidesGridLength = swiper.snapGrid.length;
+
+ var spaceBetween = params.spaceBetween;
+ var slidePosition = -offsetBefore;
+ var prevSlideSize = 0;
+ var index = 0;
+ if (typeof swiperSize === 'undefined') {
+ return;
+ }
+ if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
+ spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;
+ }
+
+ swiper.virtualSize = -spaceBetween;
+
+ // reset margins
+ if (rtl) { slides.css({ marginLeft: '', marginTop: '' }); }
+ else { slides.css({ marginRight: '', marginBottom: '' }); }
+
+ var slidesNumberEvenToRows;
+ if (params.slidesPerColumn > 1) {
+ if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {
+ slidesNumberEvenToRows = slidesLength;
+ } else {
+ slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;
+ }
+ if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {
+ slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);
+ }
+ }
+
+ // Calc slides
+ var slideSize;
+ var slidesPerColumn = params.slidesPerColumn;
+ var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
+ var numFullColumns = slidesPerRow - ((params.slidesPerColumn * slidesPerRow) - slidesLength);
+ for (var i = 0; i < slidesLength; i += 1) {
+ slideSize = 0;
+ var slide = slides.eq(i);
+ if (params.slidesPerColumn > 1) {
+ // Set slides order
+ var newSlideOrderIndex = (void 0);
+ var column = (void 0);
+ var row = (void 0);
+ if (params.slidesPerColumnFill === 'column') {
+ column = Math.floor(i / slidesPerColumn);
+ row = i - (column * slidesPerColumn);
+ if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {
+ row += 1;
+ if (row >= slidesPerColumn) {
+ row = 0;
+ column += 1;
+ }
+ }
+ newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);
+ slide
+ .css({
+ '-webkit-box-ordinal-group': newSlideOrderIndex,
+ '-moz-box-ordinal-group': newSlideOrderIndex,
+ '-ms-flex-order': newSlideOrderIndex,
+ '-webkit-order': newSlideOrderIndex,
+ order: newSlideOrderIndex,
+ });
+ } else {
+ row = Math.floor(i / slidesPerRow);
+ column = i - (row * slidesPerRow);
+ }
+ slide
+ .css(
+ ("margin-" + (swiper.isHorizontal() ? 'top' : 'left')),
+ (row !== 0 && params.spaceBetween) && (((params.spaceBetween) + "px"))
+ )
+ .attr('data-swiper-column', column)
+ .attr('data-swiper-row', row);
+ }
+ if (slide.css('display') === 'none') { continue; } // eslint-disable-line
+
+ if (params.slidesPerView === 'auto') {
+ var slideStyles = win.getComputedStyle(slide[0], null);
+ var currentTransform = slide[0].style.transform;
+ var currentWebKitTransform = slide[0].style.webkitTransform;
+ if (currentTransform) {
+ slide[0].style.transform = 'none';
+ }
+ if (currentWebKitTransform) {
+ slide[0].style.webkitTransform = 'none';
+ }
+ if (params.roundLengths) {
+ slideSize = swiper.isHorizontal()
+ ? slide.outerWidth(true)
+ : slide.outerHeight(true);
+ } else {
+ // eslint-disable-next-line
+ if (swiper.isHorizontal()) {
+ slideSize = slide[0].getBoundingClientRect().width
+ + parseFloat(slideStyles.getPropertyValue('margin-left'))
+ + parseFloat(slideStyles.getPropertyValue('margin-right'));
+ } else {
+ slideSize = slide[0].getBoundingClientRect().height
+ + parseFloat(slideStyles.getPropertyValue('margin-top'))
+ + parseFloat(slideStyles.getPropertyValue('margin-bottom'));
+ }
+ }
+ if (currentTransform) {
+ slide[0].style.transform = currentTransform;
+ }
+ if (currentWebKitTransform) {
+ slide[0].style.webkitTransform = currentWebKitTransform;
+ }
+ if (params.roundLengths) { slideSize = Math.floor(slideSize); }
+ } else {
+ slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;
+ if (params.roundLengths) { slideSize = Math.floor(slideSize); }
+
+ if (slides[i]) {
+ if (swiper.isHorizontal()) {
+ slides[i].style.width = slideSize + "px";
+ } else {
+ slides[i].style.height = slideSize + "px";
+ }
+ }
+ }
+ if (slides[i]) {
+ slides[i].swiperSlideSize = slideSize;
+ }
+ slidesSizesGrid.push(slideSize);
+
+
+ if (params.centeredSlides) {
+ slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;
+ if (prevSlideSize === 0 && i !== 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }
+ if (i === 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }
+ if (Math.abs(slidePosition) < 1 / 1000) { slidePosition = 0; }
+ if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }
+ if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }
+ slidesGrid.push(slidePosition);
+ } else {
+ if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }
+ if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }
+ slidesGrid.push(slidePosition);
+ slidePosition = slidePosition + slideSize + spaceBetween;
+ }
+
+ swiper.virtualSize += slideSize + spaceBetween;
+
+ prevSlideSize = slideSize;
+
+ index += 1;
+ }
+ swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
+ var newSlidesGrid;
+
+ if (
+ rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
+ $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + "px") });
+ }
+ if (!Support.flexbox || params.setWrapperSize) {
+ if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + "px") }); }
+ else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + "px") }); }
+ }
+
+ if (params.slidesPerColumn > 1) {
+ swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;
+ swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;
+ if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + "px") }); }
+ else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + "px") }); }
+ if (params.centeredSlides) {
+ newSlidesGrid = [];
+ for (var i$1 = 0; i$1 < snapGrid.length; i$1 += 1) {
+ var slidesGridItem = snapGrid[i$1];
+ if (params.roundLengths) { slidesGridItem = Math.floor(slidesGridItem); }
+ if (snapGrid[i$1] < swiper.virtualSize + snapGrid[0]) { newSlidesGrid.push(slidesGridItem); }
+ }
+ snapGrid = newSlidesGrid;
+ }
+ }
+
+ // Remove last grid elements depending on width
+ if (!params.centeredSlides) {
+ newSlidesGrid = [];
+ for (var i$2 = 0; i$2 < snapGrid.length; i$2 += 1) {
+ var slidesGridItem$1 = snapGrid[i$2];
+ if (params.roundLengths) { slidesGridItem$1 = Math.floor(slidesGridItem$1); }
+ if (snapGrid[i$2] <= swiper.virtualSize - swiperSize) {
+ newSlidesGrid.push(slidesGridItem$1);
+ }
+ }
+ snapGrid = newSlidesGrid;
+ if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
+ snapGrid.push(swiper.virtualSize - swiperSize);
+ }
+ }
+ if (snapGrid.length === 0) { snapGrid = [0]; }
+
+ if (params.spaceBetween !== 0) {
+ if (swiper.isHorizontal()) {
+ if (rtl) { slides.css({ marginLeft: (spaceBetween + "px") }); }
+ else { slides.css({ marginRight: (spaceBetween + "px") }); }
+ } else { slides.css({ marginBottom: (spaceBetween + "px") }); }
+ }
+
+ if (params.centerInsufficientSlides) {
+ var allSlidesSize = 0;
+ slidesSizesGrid.forEach(function (slideSizeValue) {
+ allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
+ });
+ allSlidesSize -= params.spaceBetween;
+ if (allSlidesSize < swiperSize) {
+ var allSlidesOffset = (swiperSize - allSlidesSize) / 2;
+ snapGrid.forEach(function (snap, snapIndex) {
+ snapGrid[snapIndex] = snap - allSlidesOffset;
+ });
+ slidesGrid.forEach(function (snap, snapIndex) {
+ slidesGrid[snapIndex] = snap + allSlidesOffset;
+ });
+ }
+ }
+
+ Utils.extend(swiper, {
+ slides: slides,
+ snapGrid: snapGrid,
+ slidesGrid: slidesGrid,
+ slidesSizesGrid: slidesSizesGrid,
+ });
+
+ if (slidesLength !== previousSlidesLength) {
+ swiper.emit('slidesLengthChange');
+ }
+ if (snapGrid.length !== previousSnapGridLength) {
+ if (swiper.params.watchOverflow) { swiper.checkOverflow(); }
+ swiper.emit('snapGridLengthChange');
+ }
+ if (slidesGrid.length !== previousSlidesGridLength) {
+ swiper.emit('slidesGridLengthChange');
+ }
+
+ if (params.watchSlidesProgress || params.watchSlidesVisibility) {
+ swiper.updateSlidesOffset();
+ }
+ }
+
+ function updateAutoHeight (speed) {
+ var swiper = this;
+ var activeSlides = [];
+ var newHeight = 0;
+ var i;
+ if (typeof speed === 'number') {
+ swiper.setTransition(speed);
+ } else if (speed === true) {
+ swiper.setTransition(swiper.params.speed);
+ }
+ // Find slides currently in view
+ if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
+ for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
+ var index = swiper.activeIndex + i;
+ if (index > swiper.slides.length) { break; }
+ activeSlides.push(swiper.slides.eq(index)[0]);
+ }
+ } else {
+ activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);
+ }
+
+ // Find new height from highest slide in view
+ for (i = 0; i < activeSlides.length; i += 1) {
+ if (typeof activeSlides[i] !== 'undefined') {
+ var height = activeSlides[i].offsetHeight;
+ newHeight = height > newHeight ? height : newHeight;
+ }
+ }
+
+ // Update Height
+ if (newHeight) { swiper.$wrapperEl.css('height', (newHeight + "px")); }
+ }
+
+ function updateSlidesOffset () {
+ var swiper = this;
+ var slides = swiper.slides;
+ for (var i = 0; i < slides.length; i += 1) {
+ slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;
+ }
+ }
+
+ function updateSlidesProgress (translate) {
+ if ( translate === void 0 ) translate = (this && this.translate) || 0;
+
+ var swiper = this;
+ var params = swiper.params;
+
+ var slides = swiper.slides;
+ var rtl = swiper.rtlTranslate;
+
+ if (slides.length === 0) { return; }
+ if (typeof slides[0].swiperSlideOffset === 'undefined') { swiper.updateSlidesOffset(); }
+
+ var offsetCenter = -translate;
+ if (rtl) { offsetCenter = translate; }
+
+ // Visible Slides
+ slides.removeClass(params.slideVisibleClass);
+
+ swiper.visibleSlidesIndexes = [];
+ swiper.visibleSlides = [];
+
+ for (var i = 0; i < slides.length; i += 1) {
+ var slide = slides[i];
+ var slideProgress = (
+ (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset
+ ) / (slide.swiperSlideSize + params.spaceBetween);
+ if (params.watchSlidesVisibility) {
+ var slideBefore = -(offsetCenter - slide.swiperSlideOffset);
+ var slideAfter = slideBefore + swiper.slidesSizesGrid[i];
+ var isVisible = (slideBefore >= 0 && slideBefore < swiper.size)
+ || (slideAfter > 0 && slideAfter <= swiper.size)
+ || (slideBefore <= 0 && slideAfter >= swiper.size);
+ if (isVisible) {
+ swiper.visibleSlides.push(slide);
+ swiper.visibleSlidesIndexes.push(i);
+ slides.eq(i).addClass(params.slideVisibleClass);
+ }
+ }
+ slide.progress = rtl ? -slideProgress : slideProgress;
+ }
+ swiper.visibleSlides = $(swiper.visibleSlides);
+ }
+
+ function updateProgress (translate) {
+ if ( translate === void 0 ) translate = (this && this.translate) || 0;
+
+ var swiper = this;
+ var params = swiper.params;
+
+ var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
+ var progress = swiper.progress;
+ var isBeginning = swiper.isBeginning;
+ var isEnd = swiper.isEnd;
+ var wasBeginning = isBeginning;
+ var wasEnd = isEnd;
+ if (translatesDiff === 0) {
+ progress = 0;
+ isBeginning = true;
+ isEnd = true;
+ } else {
+ progress = (translate - swiper.minTranslate()) / (translatesDiff);
+ isBeginning = progress <= 0;
+ isEnd = progress >= 1;
+ }
+ Utils.extend(swiper, {
+ progress: progress,
+ isBeginning: isBeginning,
+ isEnd: isEnd,
+ });
+
+ if (params.watchSlidesProgress || params.watchSlidesVisibility) { swiper.updateSlidesProgress(translate); }
+
+ if (isBeginning && !wasBeginning) {
+ swiper.emit('reachBeginning toEdge');
+ }
+ if (isEnd && !wasEnd) {
+ swiper.emit('reachEnd toEdge');
+ }
+ if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {
+ swiper.emit('fromEdge');
+ }
+
+ swiper.emit('progress', progress);
+ }
+
+ function updateSlidesClasses () {
+ var swiper = this;
+
+ var slides = swiper.slides;
+ var params = swiper.params;
+ var $wrapperEl = swiper.$wrapperEl;
+ var activeIndex = swiper.activeIndex;
+ var realIndex = swiper.realIndex;
+ var isVirtual = swiper.virtual && params.virtual.enabled;
+
+ slides.removeClass(((params.slideActiveClass) + " " + (params.slideNextClass) + " " + (params.slidePrevClass) + " " + (params.slideDuplicateActiveClass) + " " + (params.slideDuplicateNextClass) + " " + (params.slideDuplicatePrevClass)));
+
+ var activeSlide;
+ if (isVirtual) {
+ activeSlide = swiper.$wrapperEl.find(("." + (params.slideClass) + "[data-swiper-slide-index=\"" + activeIndex + "\"]"));
+ } else {
+ activeSlide = slides.eq(activeIndex);
+ }
+
+ // Active classes
+ activeSlide.addClass(params.slideActiveClass);
+
+ if (params.loop) {
+ // Duplicate to all looped slides
+ if (activeSlide.hasClass(params.slideDuplicateClass)) {
+ $wrapperEl
+ .children(("." + (params.slideClass) + ":not(." + (params.slideDuplicateClass) + ")[data-swiper-slide-index=\"" + realIndex + "\"]"))
+ .addClass(params.slideDuplicateActiveClass);
+ } else {
+ $wrapperEl
+ .children(("." + (params.slideClass) + "." + (params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + realIndex + "\"]"))
+ .addClass(params.slideDuplicateActiveClass);
+ }
+ }
+ // Next Slide
+ var nextSlide = activeSlide.nextAll(("." + (params.slideClass))).eq(0).addClass(params.slideNextClass);
+ if (params.loop && nextSlide.length === 0) {
+ nextSlide = slides.eq(0);
+ nextSlide.addClass(params.slideNextClass);
+ }
+ // Prev Slide
+ var prevSlide = activeSlide.prevAll(("." + (params.slideClass))).eq(0).addClass(params.slidePrevClass);
+ if (params.loop && prevSlide.length === 0) {
+ prevSlide = slides.eq(-1);
+ prevSlide.addClass(params.slidePrevClass);
+ }
+ if (params.loop) {
+ // Duplicate to all looped slides
+ if (nextSlide.hasClass(params.slideDuplicateClass)) {
+ $wrapperEl
+ .children(("." + (params.slideClass) + ":not(." + (params.slideDuplicateClass) + ")[data-swiper-slide-index=\"" + (nextSlide.attr('data-swiper-slide-index')) + "\"]"))
+ .addClass(params.slideDuplicateNextClass);
+ } else {
+ $wrapperEl
+ .children(("." + (params.slideClass) + "." + (params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + (nextSlide.attr('data-swiper-slide-index')) + "\"]"))
+ .addClass(params.slideDuplicateNextClass);
+ }
+ if (prevSlide.hasClass(params.slideDuplicateClass)) {
+ $wrapperEl
+ .children(("." + (params.slideClass) + ":not(." + (params.slideDuplicateClass) + ")[data-swiper-slide-index=\"" + (prevSlide.attr('data-swiper-slide-index')) + "\"]"))
+ .addClass(params.slideDuplicatePrevClass);
+ } else {
+ $wrapperEl
+ .children(("." + (params.slideClass) + "." + (params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + (prevSlide.attr('data-swiper-slide-index')) + "\"]"))
+ .addClass(params.slideDuplicatePrevClass);
+ }
+ }
+ }
+
+ function updateActiveIndex (newActiveIndex) {
+ var swiper = this;
+ var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
+ var slidesGrid = swiper.slidesGrid;
+ var snapGrid = swiper.snapGrid;
+ var params = swiper.params;
+ var previousIndex = swiper.activeIndex;
+ var previousRealIndex = swiper.realIndex;
+ var previousSnapIndex = swiper.snapIndex;
+ var activeIndex = newActiveIndex;
+ var snapIndex;
+ if (typeof activeIndex === 'undefined') {
+ for (var i = 0; i < slidesGrid.length; i += 1) {
+ if (typeof slidesGrid[i + 1] !== 'undefined') {
+ if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {
+ activeIndex = i;
+ } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
+ activeIndex = i + 1;
+ }
+ } else if (translate >= slidesGrid[i]) {
+ activeIndex = i;
+ }
+ }
+ // Normalize slideIndex
+ if (params.normalizeSlideIndex) {
+ if (activeIndex < 0 || typeof activeIndex === 'undefined') { activeIndex = 0; }
+ }
+ }
+ if (snapGrid.indexOf(translate) >= 0) {
+ snapIndex = snapGrid.indexOf(translate);
+ } else {
+ snapIndex = Math.floor(activeIndex / params.slidesPerGroup);
+ }
+ if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }
+ if (activeIndex === previousIndex) {
+ if (snapIndex !== previousSnapIndex) {
+ swiper.snapIndex = snapIndex;
+ swiper.emit('snapIndexChange');
+ }
+ return;
+ }
+
+ // Get real index
+ var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);
+
+ Utils.extend(swiper, {
+ snapIndex: snapIndex,
+ realIndex: realIndex,
+ previousIndex: previousIndex,
+ activeIndex: activeIndex,
+ });
+ swiper.emit('activeIndexChange');
+ swiper.emit('snapIndexChange');
+ if (previousRealIndex !== realIndex) {
+ swiper.emit('realIndexChange');
+ }
+ swiper.emit('slideChange');
+ }
+
+ function updateClickedSlide (e) {
+ var swiper = this;
+ var params = swiper.params;
+ var slide = $(e.target).closest(("." + (params.slideClass)))[0];
+ var slideFound = false;
+ if (slide) {
+ for (var i = 0; i < swiper.slides.length; i += 1) {
+ if (swiper.slides[i] === slide) { slideFound = true; }
+ }
+ }
+
+ if (slide && slideFound) {
+ swiper.clickedSlide = slide;
+ if (swiper.virtual && swiper.params.virtual.enabled) {
+ swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);
+ } else {
+ swiper.clickedIndex = $(slide).index();
+ }
+ } else {
+ swiper.clickedSlide = undefined;
+ swiper.clickedIndex = undefined;
+ return;
+ }
+ if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
+ swiper.slideToClickedSlide();
+ }
+ }
+
+ var update = {
+ updateSize: updateSize,
+ updateSlides: updateSlides,
+ updateAutoHeight: updateAutoHeight,
+ updateSlidesOffset: updateSlidesOffset,
+ updateSlidesProgress: updateSlidesProgress,
+ updateProgress: updateProgress,
+ updateSlidesClasses: updateSlidesClasses,
+ updateActiveIndex: updateActiveIndex,
+ updateClickedSlide: updateClickedSlide,
+ };
+
+ function getTranslate (axis) {
+ if ( axis === void 0 ) axis = this.isHorizontal() ? 'x' : 'y';
+
+ var swiper = this;
+
+ var params = swiper.params;
+ var rtl = swiper.rtlTranslate;
+ var translate = swiper.translate;
+ var $wrapperEl = swiper.$wrapperEl;
+
+ if (params.virtualTranslate) {
+ return rtl ? -translate : translate;
+ }
+
+ var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);
+ if (rtl) { currentTranslate = -currentTranslate; }
+
+ return currentTranslate || 0;
+ }
+
+ function setTranslate (translate, byController) {
+ var swiper = this;
+ var rtl = swiper.rtlTranslate;
+ var params = swiper.params;
+ var $wrapperEl = swiper.$wrapperEl;
+ var progress = swiper.progress;
+ var x = 0;
+ var y = 0;
+ var z = 0;
+
+ if (swiper.isHorizontal()) {
+ x = rtl ? -translate : translate;
+ } else {
+ y = translate;
+ }
+
+ if (params.roundLengths) {
+ x = Math.floor(x);
+ y = Math.floor(y);
+ }
+
+ if (!params.virtualTranslate) {
+ if (Support.transforms3d) { $wrapperEl.transform(("translate3d(" + x + "px, " + y + "px, " + z + "px)")); }
+ else { $wrapperEl.transform(("translate(" + x + "px, " + y + "px)")); }
+ }
+ swiper.previousTranslate = swiper.translate;
+ swiper.translate = swiper.isHorizontal() ? x : y;
+
+ // Check if we need to update progress
+ var newProgress;
+ var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
+ if (translatesDiff === 0) {
+ newProgress = 0;
+ } else {
+ newProgress = (translate - swiper.minTranslate()) / (translatesDiff);
+ }
+ if (newProgress !== progress) {
+ swiper.updateProgress(translate);
+ }
+
+ swiper.emit('setTranslate', swiper.translate, byController);
+ }
+
+ function minTranslate () {
+ return (-this.snapGrid[0]);
+ }
+
+ function maxTranslate () {
+ return (-this.snapGrid[this.snapGrid.length - 1]);
+ }
+
+ var translate = {
+ getTranslate: getTranslate,
+ setTranslate: setTranslate,
+ minTranslate: minTranslate,
+ maxTranslate: maxTranslate,
+ };
+
+ function setTransition (duration, byController) {
+ var swiper = this;
+
+ swiper.$wrapperEl.transition(duration);
+
+ swiper.emit('setTransition', duration, byController);
+ }
+
+ function transitionStart (runCallbacks, direction) {
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ var activeIndex = swiper.activeIndex;
+ var params = swiper.params;
+ var previousIndex = swiper.previousIndex;
+ if (params.autoHeight) {
+ swiper.updateAutoHeight();
+ }
+
+ var dir = direction;
+ if (!dir) {
+ if (activeIndex > previousIndex) { dir = 'next'; }
+ else if (activeIndex < previousIndex) { dir = 'prev'; }
+ else { dir = 'reset'; }
+ }
+
+ swiper.emit('transitionStart');
+
+ if (runCallbacks && activeIndex !== previousIndex) {
+ if (dir === 'reset') {
+ swiper.emit('slideResetTransitionStart');
+ return;
+ }
+ swiper.emit('slideChangeTransitionStart');
+ if (dir === 'next') {
+ swiper.emit('slideNextTransitionStart');
+ } else {
+ swiper.emit('slidePrevTransitionStart');
+ }
+ }
+ }
+
+ function transitionEnd$1 (runCallbacks, direction) {
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ var activeIndex = swiper.activeIndex;
+ var previousIndex = swiper.previousIndex;
+ swiper.animating = false;
+ swiper.setTransition(0);
+
+ var dir = direction;
+ if (!dir) {
+ if (activeIndex > previousIndex) { dir = 'next'; }
+ else if (activeIndex < previousIndex) { dir = 'prev'; }
+ else { dir = 'reset'; }
+ }
+
+ swiper.emit('transitionEnd');
+
+ if (runCallbacks && activeIndex !== previousIndex) {
+ if (dir === 'reset') {
+ swiper.emit('slideResetTransitionEnd');
+ return;
+ }
+ swiper.emit('slideChangeTransitionEnd');
+ if (dir === 'next') {
+ swiper.emit('slideNextTransitionEnd');
+ } else {
+ swiper.emit('slidePrevTransitionEnd');
+ }
+ }
+ }
+
+ var transition$1 = {
+ setTransition: setTransition,
+ transitionStart: transitionStart,
+ transitionEnd: transitionEnd$1,
+ };
+
+ function slideTo (index, speed, runCallbacks, internal) {
+ if ( index === void 0 ) index = 0;
+ if ( speed === void 0 ) speed = this.params.speed;
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ var slideIndex = index;
+ if (slideIndex < 0) { slideIndex = 0; }
+
+ var params = swiper.params;
+ var snapGrid = swiper.snapGrid;
+ var slidesGrid = swiper.slidesGrid;
+ var previousIndex = swiper.previousIndex;
+ var activeIndex = swiper.activeIndex;
+ var rtl = swiper.rtlTranslate;
+ if (swiper.animating && params.preventInteractionOnTransition) {
+ return false;
+ }
+
+ var snapIndex = Math.floor(slideIndex / params.slidesPerGroup);
+ if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }
+
+ if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {
+ swiper.emit('beforeSlideChangeStart');
+ }
+
+ var translate = -snapGrid[snapIndex];
+
+ // Update progress
+ swiper.updateProgress(translate);
+
+ // Normalize slideIndex
+ if (params.normalizeSlideIndex) {
+ for (var i = 0; i < slidesGrid.length; i += 1) {
+ if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {
+ slideIndex = i;
+ }
+ }
+ }
+ // Directions locks
+ if (swiper.initialized && slideIndex !== activeIndex) {
+ if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {
+ return false;
+ }
+ if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
+ if ((activeIndex || 0) !== slideIndex) { return false; }
+ }
+ }
+
+ var direction;
+ if (slideIndex > activeIndex) { direction = 'next'; }
+ else if (slideIndex < activeIndex) { direction = 'prev'; }
+ else { direction = 'reset'; }
+
+
+ // Update Index
+ if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {
+ swiper.updateActiveIndex(slideIndex);
+ // Update Height
+ if (params.autoHeight) {
+ swiper.updateAutoHeight();
+ }
+ swiper.updateSlidesClasses();
+ if (params.effect !== 'slide') {
+ swiper.setTranslate(translate);
+ }
+ if (direction !== 'reset') {
+ swiper.transitionStart(runCallbacks, direction);
+ swiper.transitionEnd(runCallbacks, direction);
+ }
+ return false;
+ }
+
+ if (speed === 0 || !Support.transition) {
+ swiper.setTransition(0);
+ swiper.setTranslate(translate);
+ swiper.updateActiveIndex(slideIndex);
+ swiper.updateSlidesClasses();
+ swiper.emit('beforeTransitionStart', speed, internal);
+ swiper.transitionStart(runCallbacks, direction);
+ swiper.transitionEnd(runCallbacks, direction);
+ } else {
+ swiper.setTransition(speed);
+ swiper.setTranslate(translate);
+ swiper.updateActiveIndex(slideIndex);
+ swiper.updateSlidesClasses();
+ swiper.emit('beforeTransitionStart', speed, internal);
+ swiper.transitionStart(runCallbacks, direction);
+ if (!swiper.animating) {
+ swiper.animating = true;
+ if (!swiper.onSlideToWrapperTransitionEnd) {
+ swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
+ if (!swiper || swiper.destroyed) { return; }
+ if (e.target !== this) { return; }
+ swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
+ swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
+ swiper.onSlideToWrapperTransitionEnd = null;
+ delete swiper.onSlideToWrapperTransitionEnd;
+ swiper.transitionEnd(runCallbacks, direction);
+ };
+ }
+ swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
+ swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
+ }
+ }
+
+ return true;
+ }
+
+ function slideToLoop (index, speed, runCallbacks, internal) {
+ if ( index === void 0 ) index = 0;
+ if ( speed === void 0 ) speed = this.params.speed;
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ var newIndex = index;
+ if (swiper.params.loop) {
+ newIndex += swiper.loopedSlides;
+ }
+
+ return swiper.slideTo(newIndex, speed, runCallbacks, internal);
+ }
+
+ /* eslint no-unused-vars: "off" */
+ function slideNext (speed, runCallbacks, internal) {
+ if ( speed === void 0 ) speed = this.params.speed;
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ var params = swiper.params;
+ var animating = swiper.animating;
+ if (params.loop) {
+ if (animating) { return false; }
+ swiper.loopFix();
+ // eslint-disable-next-line
+ swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
+ return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);
+ }
+ return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);
+ }
+
+ /* eslint no-unused-vars: "off" */
+ function slidePrev (speed, runCallbacks, internal) {
+ if ( speed === void 0 ) speed = this.params.speed;
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ var params = swiper.params;
+ var animating = swiper.animating;
+ var snapGrid = swiper.snapGrid;
+ var slidesGrid = swiper.slidesGrid;
+ var rtlTranslate = swiper.rtlTranslate;
+
+ if (params.loop) {
+ if (animating) { return false; }
+ swiper.loopFix();
+ // eslint-disable-next-line
+ swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
+ }
+ var translate = rtlTranslate ? swiper.translate : -swiper.translate;
+ function normalize(val) {
+ if (val < 0) { return -Math.floor(Math.abs(val)); }
+ return Math.floor(val);
+ }
+ var normalizedTranslate = normalize(translate);
+ var normalizedSnapGrid = snapGrid.map(function (val) { return normalize(val); });
+ var normalizedSlidesGrid = slidesGrid.map(function (val) { return normalize(val); });
+
+ var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];
+ var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
+ var prevIndex;
+ if (typeof prevSnap !== 'undefined') {
+ prevIndex = slidesGrid.indexOf(prevSnap);
+ if (prevIndex < 0) { prevIndex = swiper.activeIndex - 1; }
+ }
+ return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
+ }
+
+ /* eslint no-unused-vars: "off" */
+ function slideReset (speed, runCallbacks, internal) {
+ if ( speed === void 0 ) speed = this.params.speed;
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
+ }
+
+ /* eslint no-unused-vars: "off" */
+ function slideToClosest (speed, runCallbacks, internal) {
+ if ( speed === void 0 ) speed = this.params.speed;
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ var index = swiper.activeIndex;
+ var snapIndex = Math.floor(index / swiper.params.slidesPerGroup);
+
+ if (snapIndex < swiper.snapGrid.length - 1) {
+ var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
+
+ var currentSnap = swiper.snapGrid[snapIndex];
+ var nextSnap = swiper.snapGrid[snapIndex + 1];
+
+ if ((translate - currentSnap) > (nextSnap - currentSnap) / 2) {
+ index = swiper.params.slidesPerGroup;
+ }
+ }
+
+ return swiper.slideTo(index, speed, runCallbacks, internal);
+ }
+
+ function slideToClickedSlide () {
+ var swiper = this;
+ var params = swiper.params;
+ var $wrapperEl = swiper.$wrapperEl;
+
+ var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
+ var slideToIndex = swiper.clickedIndex;
+ var realIndex;
+ if (params.loop) {
+ if (swiper.animating) { return; }
+ realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);
+ if (params.centeredSlides) {
+ if (
+ (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))
+ || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))
+ ) {
+ swiper.loopFix();
+ slideToIndex = $wrapperEl
+ .children(("." + (params.slideClass) + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + (params.slideDuplicateClass) + ")"))
+ .eq(0)
+ .index();
+
+ Utils.nextTick(function () {
+ swiper.slideTo(slideToIndex);
+ });
+ } else {
+ swiper.slideTo(slideToIndex);
+ }
+ } else if (slideToIndex > swiper.slides.length - slidesPerView) {
+ swiper.loopFix();
+ slideToIndex = $wrapperEl
+ .children(("." + (params.slideClass) + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + (params.slideDuplicateClass) + ")"))
+ .eq(0)
+ .index();
+
+ Utils.nextTick(function () {
+ swiper.slideTo(slideToIndex);
+ });
+ } else {
+ swiper.slideTo(slideToIndex);
+ }
+ } else {
+ swiper.slideTo(slideToIndex);
+ }
+ }
+
+ var slide = {
+ slideTo: slideTo,
+ slideToLoop: slideToLoop,
+ slideNext: slideNext,
+ slidePrev: slidePrev,
+ slideReset: slideReset,
+ slideToClosest: slideToClosest,
+ slideToClickedSlide: slideToClickedSlide,
+ };
+
+ function loopCreate () {
+ var swiper = this;
+ var params = swiper.params;
+ var $wrapperEl = swiper.$wrapperEl;
+ // Remove duplicated slides
+ $wrapperEl.children(("." + (params.slideClass) + "." + (params.slideDuplicateClass))).remove();
+
+ var slides = $wrapperEl.children(("." + (params.slideClass)));
+
+ if (params.loopFillGroupWithBlank) {
+ var blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);
+ if (blankSlidesNum !== params.slidesPerGroup) {
+ for (var i = 0; i < blankSlidesNum; i += 1) {
+ var blankNode = $(doc.createElement('div')).addClass(((params.slideClass) + " " + (params.slideBlankClass)));
+ $wrapperEl.append(blankNode);
+ }
+ slides = $wrapperEl.children(("." + (params.slideClass)));
+ }
+ }
+
+ if (params.slidesPerView === 'auto' && !params.loopedSlides) { params.loopedSlides = slides.length; }
+
+ swiper.loopedSlides = parseInt(params.loopedSlides || params.slidesPerView, 10);
+ swiper.loopedSlides += params.loopAdditionalSlides;
+ if (swiper.loopedSlides > slides.length) {
+ swiper.loopedSlides = slides.length;
+ }
+
+ var prependSlides = [];
+ var appendSlides = [];
+ slides.each(function (index, el) {
+ var slide = $(el);
+ if (index < swiper.loopedSlides) { appendSlides.push(el); }
+ if (index < slides.length && index >= slides.length - swiper.loopedSlides) { prependSlides.push(el); }
+ slide.attr('data-swiper-slide-index', index);
+ });
+ for (var i$1 = 0; i$1 < appendSlides.length; i$1 += 1) {
+ $wrapperEl.append($(appendSlides[i$1].cloneNode(true)).addClass(params.slideDuplicateClass));
+ }
+ for (var i$2 = prependSlides.length - 1; i$2 >= 0; i$2 -= 1) {
+ $wrapperEl.prepend($(prependSlides[i$2].cloneNode(true)).addClass(params.slideDuplicateClass));
+ }
+ }
+
+ function loopFix () {
+ var swiper = this;
+ var params = swiper.params;
+ var activeIndex = swiper.activeIndex;
+ var slides = swiper.slides;
+ var loopedSlides = swiper.loopedSlides;
+ var allowSlidePrev = swiper.allowSlidePrev;
+ var allowSlideNext = swiper.allowSlideNext;
+ var snapGrid = swiper.snapGrid;
+ var rtl = swiper.rtlTranslate;
+ var newIndex;
+ swiper.allowSlidePrev = true;
+ swiper.allowSlideNext = true;
+
+ var snapTranslate = -snapGrid[activeIndex];
+ var diff = snapTranslate - swiper.getTranslate();
+
+
+ // Fix For Negative Oversliding
+ if (activeIndex < loopedSlides) {
+ newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;
+ newIndex += loopedSlides;
+ var slideChanged = swiper.slideTo(newIndex, 0, false, true);
+ if (slideChanged && diff !== 0) {
+ swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
+ }
+ } else if ((params.slidesPerView === 'auto' && activeIndex >= loopedSlides * 2) || (activeIndex >= slides.length - loopedSlides)) {
+ // Fix For Positive Oversliding
+ newIndex = -slides.length + activeIndex + loopedSlides;
+ newIndex += loopedSlides;
+ var slideChanged$1 = swiper.slideTo(newIndex, 0, false, true);
+ if (slideChanged$1 && diff !== 0) {
+ swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
+ }
+ }
+ swiper.allowSlidePrev = allowSlidePrev;
+ swiper.allowSlideNext = allowSlideNext;
+ }
+
+ function loopDestroy () {
+ var swiper = this;
+ var $wrapperEl = swiper.$wrapperEl;
+ var params = swiper.params;
+ var slides = swiper.slides;
+ $wrapperEl.children(("." + (params.slideClass) + "." + (params.slideDuplicateClass))).remove();
+ slides.removeAttr('data-swiper-slide-index');
+ }
+
+ var loop = {
+ loopCreate: loopCreate,
+ loopFix: loopFix,
+ loopDestroy: loopDestroy,
+ };
+
+ function setGrabCursor (moving) {
+ var swiper = this;
+ if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked)) { return; }
+ var el = swiper.el;
+ el.style.cursor = 'move';
+ el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
+ el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
+ el.style.cursor = moving ? 'grabbing' : 'grab';
+ }
+
+ function unsetGrabCursor () {
+ var swiper = this;
+ if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked)) { return; }
+ swiper.el.style.cursor = '';
+ }
+
+ var grabCursor = {
+ setGrabCursor: setGrabCursor,
+ unsetGrabCursor: unsetGrabCursor,
+ };
+
+ function appendSlide (slides) {
+ var swiper = this;
+ var $wrapperEl = swiper.$wrapperEl;
+ var params = swiper.params;
+ if (params.loop) {
+ swiper.loopDestroy();
+ }
+ if (typeof slides === 'object' && 'length' in slides) {
+ for (var i = 0; i < slides.length; i += 1) {
+ if (slides[i]) { $wrapperEl.append(slides[i]); }
+ }
+ } else {
+ $wrapperEl.append(slides);
+ }
+ if (params.loop) {
+ swiper.loopCreate();
+ }
+ if (!(params.observer && Support.observer)) {
+ swiper.update();
+ }
+ }
+
+ function prependSlide (slides) {
+ var swiper = this;
+ var params = swiper.params;
+ var $wrapperEl = swiper.$wrapperEl;
+ var activeIndex = swiper.activeIndex;
+
+ if (params.loop) {
+ swiper.loopDestroy();
+ }
+ var newActiveIndex = activeIndex + 1;
+ if (typeof slides === 'object' && 'length' in slides) {
+ for (var i = 0; i < slides.length; i += 1) {
+ if (slides[i]) { $wrapperEl.prepend(slides[i]); }
+ }
+ newActiveIndex = activeIndex + slides.length;
+ } else {
+ $wrapperEl.prepend(slides);
+ }
+ if (params.loop) {
+ swiper.loopCreate();
+ }
+ if (!(params.observer && Support.observer)) {
+ swiper.update();
+ }
+ swiper.slideTo(newActiveIndex, 0, false);
+ }
+
+ function addSlide (index, slides) {
+ var swiper = this;
+ var $wrapperEl = swiper.$wrapperEl;
+ var params = swiper.params;
+ var activeIndex = swiper.activeIndex;
+ var activeIndexBuffer = activeIndex;
+ if (params.loop) {
+ activeIndexBuffer -= swiper.loopedSlides;
+ swiper.loopDestroy();
+ swiper.slides = $wrapperEl.children(("." + (params.slideClass)));
+ }
+ var baseLength = swiper.slides.length;
+ if (index <= 0) {
+ swiper.prependSlide(slides);
+ return;
+ }
+ if (index >= baseLength) {
+ swiper.appendSlide(slides);
+ return;
+ }
+ var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
+
+ var slidesBuffer = [];
+ for (var i = baseLength - 1; i >= index; i -= 1) {
+ var currentSlide = swiper.slides.eq(i);
+ currentSlide.remove();
+ slidesBuffer.unshift(currentSlide);
+ }
+
+ if (typeof slides === 'object' && 'length' in slides) {
+ for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {
+ if (slides[i$1]) { $wrapperEl.append(slides[i$1]); }
+ }
+ newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
+ } else {
+ $wrapperEl.append(slides);
+ }
+
+ for (var i$2 = 0; i$2 < slidesBuffer.length; i$2 += 1) {
+ $wrapperEl.append(slidesBuffer[i$2]);
+ }
+
+ if (params.loop) {
+ swiper.loopCreate();
+ }
+ if (!(params.observer && Support.observer)) {
+ swiper.update();
+ }
+ if (params.loop) {
+ swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
+ } else {
+ swiper.slideTo(newActiveIndex, 0, false);
+ }
+ }
+
+ function removeSlide (slidesIndexes) {
+ var swiper = this;
+ var params = swiper.params;
+ var $wrapperEl = swiper.$wrapperEl;
+ var activeIndex = swiper.activeIndex;
+
+ var activeIndexBuffer = activeIndex;
+ if (params.loop) {
+ activeIndexBuffer -= swiper.loopedSlides;
+ swiper.loopDestroy();
+ swiper.slides = $wrapperEl.children(("." + (params.slideClass)));
+ }
+ var newActiveIndex = activeIndexBuffer;
+ var indexToRemove;
+
+ if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {
+ for (var i = 0; i < slidesIndexes.length; i += 1) {
+ indexToRemove = slidesIndexes[i];
+ if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }
+ if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }
+ }
+ newActiveIndex = Math.max(newActiveIndex, 0);
+ } else {
+ indexToRemove = slidesIndexes;
+ if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }
+ if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }
+ newActiveIndex = Math.max(newActiveIndex, 0);
+ }
+
+ if (params.loop) {
+ swiper.loopCreate();
+ }
+
+ if (!(params.observer && Support.observer)) {
+ swiper.update();
+ }
+ if (params.loop) {
+ swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
+ } else {
+ swiper.slideTo(newActiveIndex, 0, false);
+ }
+ }
+
+ function removeAllSlides () {
+ var swiper = this;
+
+ var slidesIndexes = [];
+ for (var i = 0; i < swiper.slides.length; i += 1) {
+ slidesIndexes.push(i);
+ }
+ swiper.removeSlide(slidesIndexes);
+ }
+
+ var manipulation = {
+ appendSlide: appendSlide,
+ prependSlide: prependSlide,
+ addSlide: addSlide,
+ removeSlide: removeSlide,
+ removeAllSlides: removeAllSlides,
+ };
+
+ var Device = (function Device() {
+ var ua = win.navigator.userAgent;
+
+ var device = {
+ ios: false,
+ android: false,
+ androidChrome: false,
+ desktop: false,
+ windows: false,
+ iphone: false,
+ ipod: false,
+ ipad: false,
+ cordova: win.cordova || win.phonegap,
+ phonegap: win.cordova || win.phonegap,
+ };
+
+ var windows = ua.match(/(Windows Phone);?[\s\/]+([\d.]+)?/); // eslint-disable-line
+ var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
+ var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
+ var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
+ var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
+
+
+ // Windows
+ if (windows) {
+ device.os = 'windows';
+ device.osVersion = windows[2];
+ device.windows = true;
+ }
+ // Android
+ if (android && !windows) {
+ device.os = 'android';
+ device.osVersion = android[2];
+ device.android = true;
+ device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;
+ }
+ if (ipad || iphone || ipod) {
+ device.os = 'ios';
+ device.ios = true;
+ }
+ // iOS
+ if (iphone && !ipod) {
+ device.osVersion = iphone[2].replace(/_/g, '.');
+ device.iphone = true;
+ }
+ if (ipad) {
+ device.osVersion = ipad[2].replace(/_/g, '.');
+ device.ipad = true;
+ }
+ if (ipod) {
+ device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
+ device.iphone = true;
+ }
+ // iOS 8+ changed UA
+ if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {
+ if (device.osVersion.split('.')[0] === '10') {
+ device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];
+ }
+ }
+
+ // Desktop
+ device.desktop = !(device.os || device.android || device.webView);
+
+ // Webview
+ device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);
+
+ // Minimal UI
+ if (device.os && device.os === 'ios') {
+ var osVersionArr = device.osVersion.split('.');
+ var metaViewport = doc.querySelector('meta[name="viewport"]');
+ device.minimalUi = !device.webView
+ && (ipod || iphone)
+ && (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7)
+ && metaViewport && metaViewport.getAttribute('content').indexOf('minimal-ui') >= 0;
+ }
+
+ // Pixel Ratio
+ device.pixelRatio = win.devicePixelRatio || 1;
+
+ // Export object
+ return device;
+ }());
+
+ function onTouchStart (event) {
+ var swiper = this;
+ var data = swiper.touchEventsData;
+ var params = swiper.params;
+ var touches = swiper.touches;
+ if (swiper.animating && params.preventInteractionOnTransition) {
+ return;
+ }
+ var e = event;
+ if (e.originalEvent) { e = e.originalEvent; }
+ data.isTouchEvent = e.type === 'touchstart';
+ if (!data.isTouchEvent && 'which' in e && e.which === 3) { return; }
+ if (!data.isTouchEvent && 'button' in e && e.button > 0) { return; }
+ if (data.isTouched && data.isMoved) { return; }
+ if (params.noSwiping && $(e.target).closest(params.noSwipingSelector ? params.noSwipingSelector : ("." + (params.noSwipingClass)))[0]) {
+ swiper.allowClick = true;
+ return;
+ }
+ if (params.swipeHandler) {
+ if (!$(e).closest(params.swipeHandler)[0]) { return; }
+ }
+
+ touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
+ touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
+ var startX = touches.currentX;
+ var startY = touches.currentY;
+
+ // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore
+
+ var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
+ var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
+ if (
+ edgeSwipeDetection
+ && ((startX <= edgeSwipeThreshold)
+ || (startX >= win.screen.width - edgeSwipeThreshold))
+ ) {
+ return;
+ }
+
+ Utils.extend(data, {
+ isTouched: true,
+ isMoved: false,
+ allowTouchCallbacks: true,
+ isScrolling: undefined,
+ startMoving: undefined,
+ });
+
+ touches.startX = startX;
+ touches.startY = startY;
+ data.touchStartTime = Utils.now();
+ swiper.allowClick = true;
+ swiper.updateSize();
+ swiper.swipeDirection = undefined;
+ if (params.threshold > 0) { data.allowThresholdMove = false; }
+ if (e.type !== 'touchstart') {
+ var preventDefault = true;
+ if ($(e.target).is(data.formElements)) { preventDefault = false; }
+ if (
+ doc.activeElement
+ && $(doc.activeElement).is(data.formElements)
+ && doc.activeElement !== e.target
+ ) {
+ doc.activeElement.blur();
+ }
+ if (preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault) {
+ e.preventDefault();
+ }
+ }
+ swiper.emit('touchStart', e);
+ }
+
+ function onTouchMove (event) {
+ var swiper = this;
+ var data = swiper.touchEventsData;
+ var params = swiper.params;
+ var touches = swiper.touches;
+ var rtl = swiper.rtlTranslate;
+ var e = event;
+ if (e.originalEvent) { e = e.originalEvent; }
+ if (!data.isTouched) {
+ if (data.startMoving && data.isScrolling) {
+ swiper.emit('touchMoveOpposite', e);
+ }
+ return;
+ }
+ if (data.isTouchEvent && e.type === 'mousemove') { return; }
+ var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
+ var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
+ if (e.preventedByNestedSwiper) {
+ touches.startX = pageX;
+ touches.startY = pageY;
+ return;
+ }
+ if (!swiper.allowTouchMove) {
+ // isMoved = true;
+ swiper.allowClick = false;
+ if (data.isTouched) {
+ Utils.extend(touches, {
+ startX: pageX,
+ startY: pageY,
+ currentX: pageX,
+ currentY: pageY,
+ });
+ data.touchStartTime = Utils.now();
+ }
+ return;
+ }
+ if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {
+ if (swiper.isVertical()) {
+ // Vertical
+ if (
+ (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())
+ || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())
+ ) {
+ data.isTouched = false;
+ data.isMoved = false;
+ return;
+ }
+ } else if (
+ (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())
+ || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())
+ ) {
+ return;
+ }
+ }
+ if (data.isTouchEvent && doc.activeElement) {
+ if (e.target === doc.activeElement && $(e.target).is(data.formElements)) {
+ data.isMoved = true;
+ swiper.allowClick = false;
+ return;
+ }
+ }
+ if (data.allowTouchCallbacks) {
+ swiper.emit('touchMove', e);
+ }
+ if (e.targetTouches && e.targetTouches.length > 1) { return; }
+
+ touches.currentX = pageX;
+ touches.currentY = pageY;
+
+ var diffX = touches.currentX - touches.startX;
+ var diffY = touches.currentY - touches.startY;
+ if (swiper.params.threshold && Math.sqrt((Math.pow( diffX, 2 )) + (Math.pow( diffY, 2 ))) < swiper.params.threshold) { return; }
+
+ if (typeof data.isScrolling === 'undefined') {
+ var touchAngle;
+ if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {
+ data.isScrolling = false;
+ } else {
+ // eslint-disable-next-line
+ if ((diffX * diffX) + (diffY * diffY) >= 25) {
+ touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;
+ data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);
+ }
+ }
+ }
+ if (data.isScrolling) {
+ swiper.emit('touchMoveOpposite', e);
+ }
+ if (typeof data.startMoving === 'undefined') {
+ if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
+ data.startMoving = true;
+ }
+ }
+ if (data.isScrolling) {
+ data.isTouched = false;
+ return;
+ }
+ if (!data.startMoving) {
+ return;
+ }
+ swiper.allowClick = false;
+ e.preventDefault();
+ if (params.touchMoveStopPropagation && !params.nested) {
+ e.stopPropagation();
+ }
+
+ if (!data.isMoved) {
+ if (params.loop) {
+ swiper.loopFix();
+ }
+ data.startTranslate = swiper.getTranslate();
+ swiper.setTransition(0);
+ if (swiper.animating) {
+ swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');
+ }
+ data.allowMomentumBounce = false;
+ // Grab Cursor
+ if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
+ swiper.setGrabCursor(true);
+ }
+ swiper.emit('sliderFirstMove', e);
+ }
+ swiper.emit('sliderMove', e);
+ data.isMoved = true;
+
+ var diff = swiper.isHorizontal() ? diffX : diffY;
+ touches.diff = diff;
+
+ diff *= params.touchRatio;
+ if (rtl) { diff = -diff; }
+
+ swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
+ data.currentTranslate = diff + data.startTranslate;
+
+ var disableParentSwiper = true;
+ var resistanceRatio = params.resistanceRatio;
+ if (params.touchReleaseOnEdges) {
+ resistanceRatio = 0;
+ }
+ if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {
+ disableParentSwiper = false;
+ if (params.resistance) { data.currentTranslate = (swiper.minTranslate() - 1) + (Math.pow( (-swiper.minTranslate() + data.startTranslate + diff), resistanceRatio )); }
+ } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {
+ disableParentSwiper = false;
+ if (params.resistance) { data.currentTranslate = (swiper.maxTranslate() + 1) - (Math.pow( (swiper.maxTranslate() - data.startTranslate - diff), resistanceRatio )); }
+ }
+
+ if (disableParentSwiper) {
+ e.preventedByNestedSwiper = true;
+ }
+
+ // Directions locks
+ if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
+ data.currentTranslate = data.startTranslate;
+ }
+ if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
+ data.currentTranslate = data.startTranslate;
+ }
+
+
+ // Threshold
+ if (params.threshold > 0) {
+ if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
+ if (!data.allowThresholdMove) {
+ data.allowThresholdMove = true;
+ touches.startX = touches.currentX;
+ touches.startY = touches.currentY;
+ data.currentTranslate = data.startTranslate;
+ touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
+ return;
+ }
+ } else {
+ data.currentTranslate = data.startTranslate;
+ return;
+ }
+ }
+
+ if (!params.followFinger) { return; }
+
+ // Update active index in free mode
+ if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {
+ swiper.updateActiveIndex();
+ swiper.updateSlidesClasses();
+ }
+ if (params.freeMode) {
+ // Velocity
+ if (data.velocities.length === 0) {
+ data.velocities.push({
+ position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
+ time: data.touchStartTime,
+ });
+ }
+ data.velocities.push({
+ position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
+ time: Utils.now(),
+ });
+ }
+ // Update progress
+ swiper.updateProgress(data.currentTranslate);
+ // Update translate
+ swiper.setTranslate(data.currentTranslate);
+ }
+
+ function onTouchEnd (event) {
+ var swiper = this;
+ var data = swiper.touchEventsData;
+
+ var params = swiper.params;
+ var touches = swiper.touches;
+ var rtl = swiper.rtlTranslate;
+ var $wrapperEl = swiper.$wrapperEl;
+ var slidesGrid = swiper.slidesGrid;
+ var snapGrid = swiper.snapGrid;
+ var e = event;
+ if (e.originalEvent) { e = e.originalEvent; }
+ if (data.allowTouchCallbacks) {
+ swiper.emit('touchEnd', e);
+ }
+ data.allowTouchCallbacks = false;
+ if (!data.isTouched) {
+ if (data.isMoved && params.grabCursor) {
+ swiper.setGrabCursor(false);
+ }
+ data.isMoved = false;
+ data.startMoving = false;
+ return;
+ }
+ // Return Grab Cursor
+ if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
+ swiper.setGrabCursor(false);
+ }
+
+ // Time diff
+ var touchEndTime = Utils.now();
+ var timeDiff = touchEndTime - data.touchStartTime;
+
+ // Tap, doubleTap, Click
+ if (swiper.allowClick) {
+ swiper.updateClickedSlide(e);
+ swiper.emit('tap', e);
+ if (timeDiff < 300 && (touchEndTime - data.lastClickTime) > 300) {
+ if (data.clickTimeout) { clearTimeout(data.clickTimeout); }
+ data.clickTimeout = Utils.nextTick(function () {
+ if (!swiper || swiper.destroyed) { return; }
+ swiper.emit('click', e);
+ }, 300);
+ }
+ if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {
+ if (data.clickTimeout) { clearTimeout(data.clickTimeout); }
+ swiper.emit('doubleTap', e);
+ }
+ }
+
+ data.lastClickTime = Utils.now();
+ Utils.nextTick(function () {
+ if (!swiper.destroyed) { swiper.allowClick = true; }
+ });
+
+ if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
+ data.isTouched = false;
+ data.isMoved = false;
+ data.startMoving = false;
+ return;
+ }
+ data.isTouched = false;
+ data.isMoved = false;
+ data.startMoving = false;
+
+ var currentPos;
+ if (params.followFinger) {
+ currentPos = rtl ? swiper.translate : -swiper.translate;
+ } else {
+ currentPos = -data.currentTranslate;
+ }
+
+ if (params.freeMode) {
+ if (currentPos < -swiper.minTranslate()) {
+ swiper.slideTo(swiper.activeIndex);
+ return;
+ }
+ if (currentPos > -swiper.maxTranslate()) {
+ if (swiper.slides.length < snapGrid.length) {
+ swiper.slideTo(snapGrid.length - 1);
+ } else {
+ swiper.slideTo(swiper.slides.length - 1);
+ }
+ return;
+ }
+
+ if (params.freeModeMomentum) {
+ if (data.velocities.length > 1) {
+ var lastMoveEvent = data.velocities.pop();
+ var velocityEvent = data.velocities.pop();
+
+ var distance = lastMoveEvent.position - velocityEvent.position;
+ var time = lastMoveEvent.time - velocityEvent.time;
+ swiper.velocity = distance / time;
+ swiper.velocity /= 2;
+ if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {
+ swiper.velocity = 0;
+ }
+ // this implies that the user stopped moving a finger then released.
+ // There would be no events with distance zero, so the last event is stale.
+ if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {
+ swiper.velocity = 0;
+ }
+ } else {
+ swiper.velocity = 0;
+ }
+ swiper.velocity *= params.freeModeMomentumVelocityRatio;
+
+ data.velocities.length = 0;
+ var momentumDuration = 1000 * params.freeModeMomentumRatio;
+ var momentumDistance = swiper.velocity * momentumDuration;
+
+ var newPosition = swiper.translate + momentumDistance;
+ if (rtl) { newPosition = -newPosition; }
+
+ var doBounce = false;
+ var afterBouncePosition;
+ var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;
+ var needsLoopFix;
+ if (newPosition < swiper.maxTranslate()) {
+ if (params.freeModeMomentumBounce) {
+ if (newPosition + swiper.maxTranslate() < -bounceAmount) {
+ newPosition = swiper.maxTranslate() - bounceAmount;
+ }
+ afterBouncePosition = swiper.maxTranslate();
+ doBounce = true;
+ data.allowMomentumBounce = true;
+ } else {
+ newPosition = swiper.maxTranslate();
+ }
+ if (params.loop && params.centeredSlides) { needsLoopFix = true; }
+ } else if (newPosition > swiper.minTranslate()) {
+ if (params.freeModeMomentumBounce) {
+ if (newPosition - swiper.minTranslate() > bounceAmount) {
+ newPosition = swiper.minTranslate() + bounceAmount;
+ }
+ afterBouncePosition = swiper.minTranslate();
+ doBounce = true;
+ data.allowMomentumBounce = true;
+ } else {
+ newPosition = swiper.minTranslate();
+ }
+ if (params.loop && params.centeredSlides) { needsLoopFix = true; }
+ } else if (params.freeModeSticky) {
+ var nextSlide;
+ for (var j = 0; j < snapGrid.length; j += 1) {
+ if (snapGrid[j] > -newPosition) {
+ nextSlide = j;
+ break;
+ }
+ }
+
+ if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
+ newPosition = snapGrid[nextSlide];
+ } else {
+ newPosition = snapGrid[nextSlide - 1];
+ }
+ newPosition = -newPosition;
+ }
+ if (needsLoopFix) {
+ swiper.once('transitionEnd', function () {
+ swiper.loopFix();
+ });
+ }
+ // Fix duration
+ if (swiper.velocity !== 0) {
+ if (rtl) {
+ momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
+ } else {
+ momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
+ }
+ } else if (params.freeModeSticky) {
+ swiper.slideToClosest();
+ return;
+ }
+
+ if (params.freeModeMomentumBounce && doBounce) {
+ swiper.updateProgress(afterBouncePosition);
+ swiper.setTransition(momentumDuration);
+ swiper.setTranslate(newPosition);
+ swiper.transitionStart(true, swiper.swipeDirection);
+ swiper.animating = true;
+ $wrapperEl.transitionEnd(function () {
+ if (!swiper || swiper.destroyed || !data.allowMomentumBounce) { return; }
+ swiper.emit('momentumBounce');
+
+ swiper.setTransition(params.speed);
+ swiper.setTranslate(afterBouncePosition);
+ $wrapperEl.transitionEnd(function () {
+ if (!swiper || swiper.destroyed) { return; }
+ swiper.transitionEnd();
+ });
+ });
+ } else if (swiper.velocity) {
+ swiper.updateProgress(newPosition);
+ swiper.setTransition(momentumDuration);
+ swiper.setTranslate(newPosition);
+ swiper.transitionStart(true, swiper.swipeDirection);
+ if (!swiper.animating) {
+ swiper.animating = true;
+ $wrapperEl.transitionEnd(function () {
+ if (!swiper || swiper.destroyed) { return; }
+ swiper.transitionEnd();
+ });
+ }
+ } else {
+ swiper.updateProgress(newPosition);
+ }
+
+ swiper.updateActiveIndex();
+ swiper.updateSlidesClasses();
+ } else if (params.freeModeSticky) {
+ swiper.slideToClosest();
+ return;
+ }
+
+ if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {
+ swiper.updateProgress();
+ swiper.updateActiveIndex();
+ swiper.updateSlidesClasses();
+ }
+ return;
+ }
+
+ // Find current slide
+ var stopIndex = 0;
+ var groupSize = swiper.slidesSizesGrid[0];
+ for (var i = 0; i < slidesGrid.length; i += params.slidesPerGroup) {
+ if (typeof slidesGrid[i + params.slidesPerGroup] !== 'undefined') {
+ if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + params.slidesPerGroup]) {
+ stopIndex = i;
+ groupSize = slidesGrid[i + params.slidesPerGroup] - slidesGrid[i];
+ }
+ } else if (currentPos >= slidesGrid[i]) {
+ stopIndex = i;
+ groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
+ }
+ }
+
+ // Find current slide size
+ var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
+
+ if (timeDiff > params.longSwipesMs) {
+ // Long touches
+ if (!params.longSwipes) {
+ swiper.slideTo(swiper.activeIndex);
+ return;
+ }
+ if (swiper.swipeDirection === 'next') {
+ if (ratio >= params.longSwipesRatio) { swiper.slideTo(stopIndex + params.slidesPerGroup); }
+ else { swiper.slideTo(stopIndex); }
+ }
+ if (swiper.swipeDirection === 'prev') {
+ if (ratio > (1 - params.longSwipesRatio)) { swiper.slideTo(stopIndex + params.slidesPerGroup); }
+ else { swiper.slideTo(stopIndex); }
+ }
+ } else {
+ // Short swipes
+ if (!params.shortSwipes) {
+ swiper.slideTo(swiper.activeIndex);
+ return;
+ }
+ if (swiper.swipeDirection === 'next') {
+ swiper.slideTo(stopIndex + params.slidesPerGroup);
+ }
+ if (swiper.swipeDirection === 'prev') {
+ swiper.slideTo(stopIndex);
+ }
+ }
+ }
+
+ function onResize () {
+ var swiper = this;
+
+ var params = swiper.params;
+ var el = swiper.el;
+
+ if (el && el.offsetWidth === 0) { return; }
+
+ // Breakpoints
+ if (params.breakpoints) {
+ swiper.setBreakpoint();
+ }
+
+ // Save locks
+ var allowSlideNext = swiper.allowSlideNext;
+ var allowSlidePrev = swiper.allowSlidePrev;
+ var snapGrid = swiper.snapGrid;
+
+ // Disable locks on resize
+ swiper.allowSlideNext = true;
+ swiper.allowSlidePrev = true;
+
+ swiper.updateSize();
+ swiper.updateSlides();
+
+ if (params.freeMode) {
+ var newTranslate = Math.min(Math.max(swiper.translate, swiper.maxTranslate()), swiper.minTranslate());
+ swiper.setTranslate(newTranslate);
+ swiper.updateActiveIndex();
+ swiper.updateSlidesClasses();
+
+ if (params.autoHeight) {
+ swiper.updateAutoHeight();
+ }
+ } else {
+ swiper.updateSlidesClasses();
+ if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
+ swiper.slideTo(swiper.slides.length - 1, 0, false, true);
+ } else {
+ swiper.slideTo(swiper.activeIndex, 0, false, true);
+ }
+ }
+ // Return locks after resize
+ swiper.allowSlidePrev = allowSlidePrev;
+ swiper.allowSlideNext = allowSlideNext;
+
+ if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
+ swiper.checkOverflow();
+ }
+ }
+
+ function onClick (e) {
+ var swiper = this;
+ if (!swiper.allowClick) {
+ if (swiper.params.preventClicks) { e.preventDefault(); }
+ if (swiper.params.preventClicksPropagation && swiper.animating) {
+ e.stopPropagation();
+ e.stopImmediatePropagation();
+ }
+ }
+ }
+
+ function attachEvents() {
+ var swiper = this;
+ var params = swiper.params;
+ var touchEvents = swiper.touchEvents;
+ var el = swiper.el;
+ var wrapperEl = swiper.wrapperEl;
+
+ {
+ swiper.onTouchStart = onTouchStart.bind(swiper);
+ swiper.onTouchMove = onTouchMove.bind(swiper);
+ swiper.onTouchEnd = onTouchEnd.bind(swiper);
+ }
+
+ swiper.onClick = onClick.bind(swiper);
+
+ var target = params.touchEventsTarget === 'container' ? el : wrapperEl;
+ var capture = !!params.nested;
+
+ // Touch Events
+ {
+ if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {
+ target.addEventListener(touchEvents.start, swiper.onTouchStart, false);
+ doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
+ doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);
+ } else {
+ if (Support.touch) {
+ var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
+ target.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
+ target.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture: capture } : capture);
+ target.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
+ }
+ if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
+ target.addEventListener('mousedown', swiper.onTouchStart, false);
+ doc.addEventListener('mousemove', swiper.onTouchMove, capture);
+ doc.addEventListener('mouseup', swiper.onTouchEnd, false);
+ }
+ }
+ // Prevent Links Clicks
+ if (params.preventClicks || params.preventClicksPropagation) {
+ target.addEventListener('click', swiper.onClick, true);
+ }
+ }
+
+ // Resize handler
+ swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);
+ }
+
+ function detachEvents() {
+ var swiper = this;
+
+ var params = swiper.params;
+ var touchEvents = swiper.touchEvents;
+ var el = swiper.el;
+ var wrapperEl = swiper.wrapperEl;
+
+ var target = params.touchEventsTarget === 'container' ? el : wrapperEl;
+ var capture = !!params.nested;
+
+ // Touch Events
+ {
+ if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {
+ target.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
+ doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
+ doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);
+ } else {
+ if (Support.touch) {
+ var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
+ target.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
+ target.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
+ target.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
+ }
+ if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
+ target.removeEventListener('mousedown', swiper.onTouchStart, false);
+ doc.removeEventListener('mousemove', swiper.onTouchMove, capture);
+ doc.removeEventListener('mouseup', swiper.onTouchEnd, false);
+ }
+ }
+ // Prevent Links Clicks
+ if (params.preventClicks || params.preventClicksPropagation) {
+ target.removeEventListener('click', swiper.onClick, true);
+ }
+ }
+
+ // Resize handler
+ swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);
+ }
+
+ var events = {
+ attachEvents: attachEvents,
+ detachEvents: detachEvents,
+ };
+
+ function setBreakpoint () {
+ var swiper = this;
+ var activeIndex = swiper.activeIndex;
+ var initialized = swiper.initialized;
+ var loopedSlides = swiper.loopedSlides; if ( loopedSlides === void 0 ) loopedSlides = 0;
+ var params = swiper.params;
+ var breakpoints = params.breakpoints;
+ if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) { return; }
+ // Set breakpoint for window width and update parameters
+ var breakpoint = swiper.getBreakpoint(breakpoints);
+ if (breakpoint && swiper.currentBreakpoint !== breakpoint) {
+ var breakPointsParams = breakpoint in breakpoints ? breakpoints[breakpoint] : swiper.originalParams;
+ var needsReLoop = params.loop && (breakPointsParams.slidesPerView !== params.slidesPerView);
+
+ Utils.extend(swiper.params, breakPointsParams);
+
+ Utils.extend(swiper, {
+ allowTouchMove: swiper.params.allowTouchMove,
+ allowSlideNext: swiper.params.allowSlideNext,
+ allowSlidePrev: swiper.params.allowSlidePrev,
+ });
+
+ swiper.currentBreakpoint = breakpoint;
+
+ if (needsReLoop && initialized) {
+ swiper.loopDestroy();
+ swiper.loopCreate();
+ swiper.updateSlides();
+ swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);
+ }
+ swiper.emit('breakpoint', breakPointsParams);
+ }
+ }
+
+ function getBreakpoint (breakpoints) {
+ var swiper = this;
+ // Get breakpoint for window width
+ if (!breakpoints) { return undefined; }
+ var breakpoint = false;
+ var points = [];
+ Object.keys(breakpoints).forEach(function (point) {
+ points.push(point);
+ });
+ points.sort(function (a, b) { return parseInt(a, 10) - parseInt(b, 10); });
+ for (var i = 0; i < points.length; i += 1) {
+ var point = points[i];
+ if (swiper.params.breakpointsInverse) {
+ if (point <= win.innerWidth) {
+ breakpoint = point;
+ }
+ } else if (point >= win.innerWidth && !breakpoint) {
+ breakpoint = point;
+ }
+ }
+ return breakpoint || 'max';
+ }
+
+ var breakpoints = { setBreakpoint: setBreakpoint, getBreakpoint: getBreakpoint };
+
+ var Browser = (function Browser() {
+ function isSafari() {
+ var ua = win.navigator.userAgent.toLowerCase();
+ return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);
+ }
+ return {
+ isIE: !!win.navigator.userAgent.match(/Trident/g) || !!win.navigator.userAgent.match(/MSIE/g),
+ isEdge: !!win.navigator.userAgent.match(/Edge/g),
+ isSafari: isSafari(),
+ isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent),
+ };
+ }());
+
+ function addClasses () {
+ var swiper = this;
+ var classNames = swiper.classNames;
+ var params = swiper.params;
+ var rtl = swiper.rtl;
+ var $el = swiper.$el;
+ var suffixes = [];
+
+ suffixes.push(params.direction);
+
+ if (params.freeMode) {
+ suffixes.push('free-mode');
+ }
+ if (!Support.flexbox) {
+ suffixes.push('no-flexbox');
+ }
+ if (params.autoHeight) {
+ suffixes.push('autoheight');
+ }
+ if (rtl) {
+ suffixes.push('rtl');
+ }
+ if (params.slidesPerColumn > 1) {
+ suffixes.push('multirow');
+ }
+ if (Device.android) {
+ suffixes.push('android');
+ }
+ if (Device.ios) {
+ suffixes.push('ios');
+ }
+ // WP8 Touch Events Fix
+ if ((Browser.isIE || Browser.isEdge) && (Support.pointerEvents || Support.prefixedPointerEvents)) {
+ suffixes.push(("wp8-" + (params.direction)));
+ }
+
+ suffixes.forEach(function (suffix) {
+ classNames.push(params.containerModifierClass + suffix);
+ });
+
+ $el.addClass(classNames.join(' '));
+ }
+
+ function removeClasses () {
+ var swiper = this;
+ var $el = swiper.$el;
+ var classNames = swiper.classNames;
+
+ $el.removeClass(classNames.join(' '));
+ }
+
+ var classes = { addClasses: addClasses, removeClasses: removeClasses };
+
+ function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {
+ var image;
+ function onReady() {
+ if (callback) { callback(); }
+ }
+ if (!imageEl.complete || !checkForComplete) {
+ if (src) {
+ image = new win.Image();
+ image.onload = onReady;
+ image.onerror = onReady;
+ if (sizes) {
+ image.sizes = sizes;
+ }
+ if (srcset) {
+ image.srcset = srcset;
+ }
+ if (src) {
+ image.src = src;
+ }
+ } else {
+ onReady();
+ }
+ } else {
+ // image already loaded...
+ onReady();
+ }
+ }
+
+ function preloadImages () {
+ var swiper = this;
+ swiper.imagesToLoad = swiper.$el.find('img');
+ function onReady() {
+ if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) { return; }
+ if (swiper.imagesLoaded !== undefined) { swiper.imagesLoaded += 1; }
+ if (swiper.imagesLoaded === swiper.imagesToLoad.length) {
+ if (swiper.params.updateOnImagesReady) { swiper.update(); }
+ swiper.emit('imagesReady');
+ }
+ }
+ for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {
+ var imageEl = swiper.imagesToLoad[i];
+ swiper.loadImage(
+ imageEl,
+ imageEl.currentSrc || imageEl.getAttribute('src'),
+ imageEl.srcset || imageEl.getAttribute('srcset'),
+ imageEl.sizes || imageEl.getAttribute('sizes'),
+ true,
+ onReady
+ );
+ }
+ }
+
+ var images = {
+ loadImage: loadImage,
+ preloadImages: preloadImages,
+ };
+
+ function checkOverflow() {
+ var swiper = this;
+ var wasLocked = swiper.isLocked;
+
+ swiper.isLocked = swiper.snapGrid.length === 1;
+ swiper.allowSlideNext = !swiper.isLocked;
+ swiper.allowSlidePrev = !swiper.isLocked;
+
+ // events
+ if (wasLocked !== swiper.isLocked) { swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); }
+
+ if (wasLocked && wasLocked !== swiper.isLocked) {
+ swiper.isEnd = false;
+ swiper.navigation.update();
+ }
+ }
+
+ var checkOverflow$1 = { checkOverflow: checkOverflow };
+
+ var defaults = {
+ init: true,
+ direction: 'horizontal',
+ touchEventsTarget: 'container',
+ initialSlide: 0,
+ speed: 300,
+ //
+ preventInteractionOnTransition: false,
+
+ // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).
+ edgeSwipeDetection: false,
+ edgeSwipeThreshold: 20,
+
+ // Free mode
+ freeMode: false,
+ freeModeMomentum: true,
+ freeModeMomentumRatio: 1,
+ freeModeMomentumBounce: true,
+ freeModeMomentumBounceRatio: 1,
+ freeModeMomentumVelocityRatio: 1,
+ freeModeSticky: false,
+ freeModeMinimumVelocity: 0.02,
+
+ // Autoheight
+ autoHeight: false,
+
+ // Set wrapper width
+ setWrapperSize: false,
+
+ // Virtual Translate
+ virtualTranslate: false,
+
+ // Effects
+ effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
+
+ // Breakpoints
+ breakpoints: undefined,
+ breakpointsInverse: false,
+
+ // Slides grid
+ spaceBetween: 0,
+ slidesPerView: 1,
+ slidesPerColumn: 1,
+ slidesPerColumnFill: 'column',
+ slidesPerGroup: 1,
+ centeredSlides: false,
+ slidesOffsetBefore: 0, // in px
+ slidesOffsetAfter: 0, // in px
+ normalizeSlideIndex: true,
+ centerInsufficientSlides: false,
+
+ // Disable swiper and hide navigation when container not overflow
+ watchOverflow: false,
+
+ // Round length
+ roundLengths: false,
+
+ // Touches
+ touchRatio: 1,
+ touchAngle: 45,
+ simulateTouch: true,
+ shortSwipes: true,
+ longSwipes: true,
+ longSwipesRatio: 0.5,
+ longSwipesMs: 300,
+ followFinger: true,
+ allowTouchMove: true,
+ threshold: 0,
+ touchMoveStopPropagation: true,
+ touchStartPreventDefault: true,
+ touchReleaseOnEdges: false,
+
+ // Unique Navigation Elements
+ uniqueNavElements: true,
+
+ // Resistance
+ resistance: true,
+ resistanceRatio: 0.85,
+
+ // Progress
+ watchSlidesProgress: false,
+ watchSlidesVisibility: false,
+
+ // Cursor
+ grabCursor: false,
+
+ // Clicks
+ preventClicks: true,
+ preventClicksPropagation: true,
+ slideToClickedSlide: false,
+
+ // Images
+ preloadImages: true,
+ updateOnImagesReady: true,
+
+ // loop
+ loop: false,
+ loopAdditionalSlides: 0,
+ loopedSlides: null,
+ loopFillGroupWithBlank: false,
+
+ // Swiping/no swiping
+ allowSlidePrev: true,
+ allowSlideNext: true,
+ swipeHandler: null, // '.swipe-handler',
+ noSwiping: true,
+ noSwipingClass: 'swiper-no-swiping',
+ noSwipingSelector: null,
+
+ // Passive Listeners
+ passiveListeners: true,
+
+ // NS
+ containerModifierClass: 'swiper-container-', // NEW
+ slideClass: 'swiper-slide',
+ slideBlankClass: 'swiper-slide-invisible-blank',
+ slideActiveClass: 'swiper-slide-active',
+ slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
+ slideVisibleClass: 'swiper-slide-visible',
+ slideDuplicateClass: 'swiper-slide-duplicate',
+ slideNextClass: 'swiper-slide-next',
+ slideDuplicateNextClass: 'swiper-slide-duplicate-next',
+ slidePrevClass: 'swiper-slide-prev',
+ slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
+ wrapperClass: 'swiper-wrapper',
+
+ // Callbacks
+ runCallbacksOnInit: true,
+ };
+
+ var prototypes = {
+ update: update,
+ translate: translate,
+ transition: transition$1,
+ slide: slide,
+ loop: loop,
+ grabCursor: grabCursor,
+ manipulation: manipulation,
+ events: events,
+ breakpoints: breakpoints,
+ checkOverflow: checkOverflow$1,
+ classes: classes,
+ images: images,
+ };
+
+ var extendedDefaults = {};
+
+ var Swiper = (function (SwiperClass$$1) {
+ function Swiper() {
+ var assign;
+
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+ var el;
+ var params;
+ if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {
+ params = args[0];
+ } else {
+ (assign = args, el = assign[0], params = assign[1]);
+ }
+ if (!params) { params = {}; }
+
+ params = Utils.extend({}, params);
+ if (el && !params.el) { params.el = el; }
+
+ SwiperClass$$1.call(this, params);
+
+ Object.keys(prototypes).forEach(function (prototypeGroup) {
+ Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {
+ if (!Swiper.prototype[protoMethod]) {
+ Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
+ }
+ });
+ });
+
+ // Swiper Instance
+ var swiper = this;
+ if (typeof swiper.modules === 'undefined') {
+ swiper.modules = {};
+ }
+ Object.keys(swiper.modules).forEach(function (moduleName) {
+ var module = swiper.modules[moduleName];
+ if (module.params) {
+ var moduleParamName = Object.keys(module.params)[0];
+ var moduleParams = module.params[moduleParamName];
+ if (typeof moduleParams !== 'object' || moduleParams === null) { return; }
+ if (!(moduleParamName in params && 'enabled' in moduleParams)) { return; }
+ if (params[moduleParamName] === true) {
+ params[moduleParamName] = { enabled: true };
+ }
+ if (
+ typeof params[moduleParamName] === 'object'
+ && !('enabled' in params[moduleParamName])
+ ) {
+ params[moduleParamName].enabled = true;
+ }
+ if (!params[moduleParamName]) { params[moduleParamName] = { enabled: false }; }
+ }
+ });
+
+ // Extend defaults with modules params
+ var swiperParams = Utils.extend({}, defaults);
+ swiper.useModulesParams(swiperParams);
+
+ // Extend defaults with passed params
+ swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);
+ swiper.originalParams = Utils.extend({}, swiper.params);
+ swiper.passedParams = Utils.extend({}, params);
+
+ // Save Dom lib
+ swiper.$ = $;
+
+ // Find el
+ var $el = $(swiper.params.el);
+ el = $el[0];
+
+ if (!el) {
+ return undefined;
+ }
+
+ if ($el.length > 1) {
+ var swipers = [];
+ $el.each(function (index, containerEl) {
+ var newParams = Utils.extend({}, params, { el: containerEl });
+ swipers.push(new Swiper(newParams));
+ });
+ return swipers;
+ }
+
+ el.swiper = swiper;
+ $el.data('swiper', swiper);
+
+ // Find Wrapper
+ var $wrapperEl = $el.children(("." + (swiper.params.wrapperClass)));
+
+ // Extend Swiper
+ Utils.extend(swiper, {
+ $el: $el,
+ el: el,
+ $wrapperEl: $wrapperEl,
+ wrapperEl: $wrapperEl[0],
+
+ // Classes
+ classNames: [],
+
+ // Slides
+ slides: $(),
+ slidesGrid: [],
+ snapGrid: [],
+ slidesSizesGrid: [],
+
+ // isDirection
+ isHorizontal: function isHorizontal() {
+ return swiper.params.direction === 'horizontal';
+ },
+ isVertical: function isVertical() {
+ return swiper.params.direction === 'vertical';
+ },
+ // RTL
+ rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
+ rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
+ wrongRTL: $wrapperEl.css('display') === '-webkit-box',
+
+ // Indexes
+ activeIndex: 0,
+ realIndex: 0,
+
+ //
+ isBeginning: true,
+ isEnd: false,
+
+ // Props
+ translate: 0,
+ previousTranslate: 0,
+ progress: 0,
+ velocity: 0,
+ animating: false,
+
+ // Locks
+ allowSlideNext: swiper.params.allowSlideNext,
+ allowSlidePrev: swiper.params.allowSlidePrev,
+
+ // Touch Events
+ touchEvents: (function touchEvents() {
+ var touch = ['touchstart', 'touchmove', 'touchend'];
+ var desktop = ['mousedown', 'mousemove', 'mouseup'];
+ if (Support.pointerEvents) {
+ desktop = ['pointerdown', 'pointermove', 'pointerup'];
+ } else if (Support.prefixedPointerEvents) {
+ desktop = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];
+ }
+ swiper.touchEventsTouch = {
+ start: touch[0],
+ move: touch[1],
+ end: touch[2],
+ };
+ swiper.touchEventsDesktop = {
+ start: desktop[0],
+ move: desktop[1],
+ end: desktop[2],
+ };
+ return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;
+ }()),
+ touchEventsData: {
+ isTouched: undefined,
+ isMoved: undefined,
+ allowTouchCallbacks: undefined,
+ touchStartTime: undefined,
+ isScrolling: undefined,
+ currentTranslate: undefined,
+ startTranslate: undefined,
+ allowThresholdMove: undefined,
+ // Form elements to match
+ formElements: 'input, select, option, textarea, button, video',
+ // Last click time
+ lastClickTime: Utils.now(),
+ clickTimeout: undefined,
+ // Velocities
+ velocities: [],
+ allowMomentumBounce: undefined,
+ isTouchEvent: undefined,
+ startMoving: undefined,
+ },
+
+ // Clicks
+ allowClick: true,
+
+ // Touches
+ allowTouchMove: swiper.params.allowTouchMove,
+
+ touches: {
+ startX: 0,
+ startY: 0,
+ currentX: 0,
+ currentY: 0,
+ diff: 0,
+ },
+
+ // Images
+ imagesToLoad: [],
+ imagesLoaded: 0,
+
+ });
+
+ // Install Modules
+ swiper.useModules();
+
+ // Init
+ if (swiper.params.init) {
+ swiper.init();
+ }
+
+ // Return app instance
+ return swiper;
+ }
+
+ if ( SwiperClass$$1 ) Swiper.__proto__ = SwiperClass$$1;
+ Swiper.prototype = Object.create( SwiperClass$$1 && SwiperClass$$1.prototype );
+ Swiper.prototype.constructor = Swiper;
+
+ var staticAccessors = { extendedDefaults: { configurable: true },defaults: { configurable: true },Class: { configurable: true },$: { configurable: true } };
+
+ Swiper.prototype.slidesPerViewDynamic = function slidesPerViewDynamic () {
+ var swiper = this;
+ var params = swiper.params;
+ var slides = swiper.slides;
+ var slidesGrid = swiper.slidesGrid;
+ var swiperSize = swiper.size;
+ var activeIndex = swiper.activeIndex;
+ var spv = 1;
+ if (params.centeredSlides) {
+ var slideSize = slides[activeIndex].swiperSlideSize;
+ var breakLoop;
+ for (var i = activeIndex + 1; i < slides.length; i += 1) {
+ if (slides[i] && !breakLoop) {
+ slideSize += slides[i].swiperSlideSize;
+ spv += 1;
+ if (slideSize > swiperSize) { breakLoop = true; }
+ }
+ }
+ for (var i$1 = activeIndex - 1; i$1 >= 0; i$1 -= 1) {
+ if (slides[i$1] && !breakLoop) {
+ slideSize += slides[i$1].swiperSlideSize;
+ spv += 1;
+ if (slideSize > swiperSize) { breakLoop = true; }
+ }
+ }
+ } else {
+ for (var i$2 = activeIndex + 1; i$2 < slides.length; i$2 += 1) {
+ if (slidesGrid[i$2] - slidesGrid[activeIndex] < swiperSize) {
+ spv += 1;
+ }
+ }
+ }
+ return spv;
+ };
+
+ Swiper.prototype.update = function update$$1 () {
+ var swiper = this;
+ if (!swiper || swiper.destroyed) { return; }
+ var snapGrid = swiper.snapGrid;
+ var params = swiper.params;
+ // Breakpoints
+ if (params.breakpoints) {
+ swiper.setBreakpoint();
+ }
+ swiper.updateSize();
+ swiper.updateSlides();
+ swiper.updateProgress();
+ swiper.updateSlidesClasses();
+
+ function setTranslate() {
+ var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
+ var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
+ swiper.setTranslate(newTranslate);
+ swiper.updateActiveIndex();
+ swiper.updateSlidesClasses();
+ }
+ var translated;
+ if (swiper.params.freeMode) {
+ setTranslate();
+ if (swiper.params.autoHeight) {
+ swiper.updateAutoHeight();
+ }
+ } else {
+ if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
+ translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);
+ } else {
+ translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
+ }
+ if (!translated) {
+ setTranslate();
+ }
+ }
+ if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
+ swiper.checkOverflow();
+ }
+ swiper.emit('update');
+ };
+
+ Swiper.prototype.init = function init () {
+ var swiper = this;
+ if (swiper.initialized) { return; }
+
+ swiper.emit('beforeInit');
+
+ // Set breakpoint
+ if (swiper.params.breakpoints) {
+ swiper.setBreakpoint();
+ }
+
+ // Add Classes
+ swiper.addClasses();
+
+ // Create loop
+ if (swiper.params.loop) {
+ swiper.loopCreate();
+ }
+
+ // Update size
+ swiper.updateSize();
+
+ // Update slides
+ swiper.updateSlides();
+
+ if (swiper.params.watchOverflow) {
+ swiper.checkOverflow();
+ }
+
+ // Set Grab Cursor
+ if (swiper.params.grabCursor) {
+ swiper.setGrabCursor();
+ }
+
+ if (swiper.params.preloadImages) {
+ swiper.preloadImages();
+ }
+
+ // Slide To Initial Slide
+ if (swiper.params.loop) {
+ swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);
+ } else {
+ swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);
+ }
+
+ // Attach events
+ swiper.attachEvents();
+
+ // Init Flag
+ swiper.initialized = true;
+
+ // Emit
+ swiper.emit('init');
+ };
+
+ Swiper.prototype.destroy = function destroy (deleteInstance, cleanStyles) {
+ if ( deleteInstance === void 0 ) deleteInstance = true;
+ if ( cleanStyles === void 0 ) cleanStyles = true;
+
+ var swiper = this;
+ var params = swiper.params;
+ var $el = swiper.$el;
+ var $wrapperEl = swiper.$wrapperEl;
+ var slides = swiper.slides;
+
+ if (typeof swiper.params === 'undefined' || swiper.destroyed) {
+ return null;
+ }
+
+ swiper.emit('beforeDestroy');
+
+ // Init Flag
+ swiper.initialized = false;
+
+ // Detach events
+ swiper.detachEvents();
+
+ // Destroy loop
+ if (params.loop) {
+ swiper.loopDestroy();
+ }
+
+ // Cleanup styles
+ if (cleanStyles) {
+ swiper.removeClasses();
+ $el.removeAttr('style');
+ $wrapperEl.removeAttr('style');
+ if (slides && slides.length) {
+ slides
+ .removeClass([
+ params.slideVisibleClass,
+ params.slideActiveClass,
+ params.slideNextClass,
+ params.slidePrevClass ].join(' '))
+ .removeAttr('style')
+ .removeAttr('data-swiper-slide-index')
+ .removeAttr('data-swiper-column')
+ .removeAttr('data-swiper-row');
+ }
+ }
+
+ swiper.emit('destroy');
+
+ // Detach emitter events
+ Object.keys(swiper.eventsListeners).forEach(function (eventName) {
+ swiper.off(eventName);
+ });
+
+ if (deleteInstance !== false) {
+ swiper.$el[0].swiper = null;
+ swiper.$el.data('swiper', null);
+ Utils.deleteProps(swiper);
+ }
+ swiper.destroyed = true;
+
+ return null;
+ };
+
+ Swiper.extendDefaults = function extendDefaults (newDefaults) {
+ Utils.extend(extendedDefaults, newDefaults);
+ };
+
+ staticAccessors.extendedDefaults.get = function () {
+ return extendedDefaults;
+ };
+
+ staticAccessors.defaults.get = function () {
+ return defaults;
+ };
+
+ staticAccessors.Class.get = function () {
+ return SwiperClass$$1;
+ };
+
+ staticAccessors.$.get = function () {
+ return $;
+ };
+
+ Object.defineProperties( Swiper, staticAccessors );
+
+ return Swiper;
+ }(SwiperClass));
+
+ var Device$1 = {
+ name: 'device',
+ proto: {
+ device: Device,
+ },
+ static: {
+ device: Device,
+ },
+ };
+
+ var Support$1 = {
+ name: 'support',
+ proto: {
+ support: Support,
+ },
+ static: {
+ support: Support,
+ },
+ };
+
+ var Browser$1 = {
+ name: 'browser',
+ proto: {
+ browser: Browser,
+ },
+ static: {
+ browser: Browser,
+ },
+ };
+
+ var Resize = {
+ name: 'resize',
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ resize: {
+ resizeHandler: function resizeHandler() {
+ if (!swiper || swiper.destroyed || !swiper.initialized) { return; }
+ swiper.emit('beforeResize');
+ swiper.emit('resize');
+ },
+ orientationChangeHandler: function orientationChangeHandler() {
+ if (!swiper || swiper.destroyed || !swiper.initialized) { return; }
+ swiper.emit('orientationchange');
+ },
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ // Emit resize
+ win.addEventListener('resize', swiper.resize.resizeHandler);
+
+ // Emit orientationchange
+ win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ win.removeEventListener('resize', swiper.resize.resizeHandler);
+ win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);
+ },
+ },
+ };
+
+ var Observer = {
+ func: win.MutationObserver || win.WebkitMutationObserver,
+ attach: function attach(target, options) {
+ if ( options === void 0 ) options = {};
+
+ var swiper = this;
+
+ var ObserverFunc = Observer.func;
+ var observer = new ObserverFunc(function (mutations) {
+ // The observerUpdate event should only be triggered
+ // once despite the number of mutations. Additional
+ // triggers are redundant and are very costly
+ if (mutations.length === 1) {
+ swiper.emit('observerUpdate', mutations[0]);
+ return;
+ }
+ var observerUpdate = function observerUpdate() {
+ swiper.emit('observerUpdate', mutations[0]);
+ };
+
+ if (win.requestAnimationFrame) {
+ win.requestAnimationFrame(observerUpdate);
+ } else {
+ win.setTimeout(observerUpdate, 0);
+ }
+ });
+
+ observer.observe(target, {
+ attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
+ childList: typeof options.childList === 'undefined' ? true : options.childList,
+ characterData: typeof options.characterData === 'undefined' ? true : options.characterData,
+ });
+
+ swiper.observer.observers.push(observer);
+ },
+ init: function init() {
+ var swiper = this;
+ if (!Support.observer || !swiper.params.observer) { return; }
+ if (swiper.params.observeParents) {
+ var containerParents = swiper.$el.parents();
+ for (var i = 0; i < containerParents.length; i += 1) {
+ swiper.observer.attach(containerParents[i]);
+ }
+ }
+ // Observe container
+ swiper.observer.attach(swiper.$el[0], { childList: false });
+
+ // Observe wrapper
+ swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ swiper.observer.observers.forEach(function (observer) {
+ observer.disconnect();
+ });
+ swiper.observer.observers = [];
+ },
+ };
+
+ var Observer$1 = {
+ name: 'observer',
+ params: {
+ observer: false,
+ observeParents: false,
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ observer: {
+ init: Observer.init.bind(swiper),
+ attach: Observer.attach.bind(swiper),
+ destroy: Observer.destroy.bind(swiper),
+ observers: [],
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ swiper.observer.init();
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ swiper.observer.destroy();
+ },
+ },
+ };
+
+ var Virtual = {
+ update: function update(force) {
+ var swiper = this;
+ var ref = swiper.params;
+ var slidesPerView = ref.slidesPerView;
+ var slidesPerGroup = ref.slidesPerGroup;
+ var centeredSlides = ref.centeredSlides;
+ var ref$1 = swiper.params.virtual;
+ var addSlidesBefore = ref$1.addSlidesBefore;
+ var addSlidesAfter = ref$1.addSlidesAfter;
+ var ref$2 = swiper.virtual;
+ var previousFrom = ref$2.from;
+ var previousTo = ref$2.to;
+ var slides = ref$2.slides;
+ var previousSlidesGrid = ref$2.slidesGrid;
+ var renderSlide = ref$2.renderSlide;
+ var previousOffset = ref$2.offset;
+ swiper.updateActiveIndex();
+ var activeIndex = swiper.activeIndex || 0;
+
+ var offsetProp;
+ if (swiper.rtlTranslate) { offsetProp = 'right'; }
+ else { offsetProp = swiper.isHorizontal() ? 'left' : 'top'; }
+
+ var slidesAfter;
+ var slidesBefore;
+ if (centeredSlides) {
+ slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
+ slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
+ } else {
+ slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;
+ slidesBefore = slidesPerGroup + addSlidesAfter;
+ }
+ var from = Math.max((activeIndex || 0) - slidesBefore, 0);
+ var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);
+ var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
+
+ Utils.extend(swiper.virtual, {
+ from: from,
+ to: to,
+ offset: offset,
+ slidesGrid: swiper.slidesGrid,
+ });
+
+ function onRendered() {
+ swiper.updateSlides();
+ swiper.updateProgress();
+ swiper.updateSlidesClasses();
+ if (swiper.lazy && swiper.params.lazy.enabled) {
+ swiper.lazy.load();
+ }
+ }
+
+ if (previousFrom === from && previousTo === to && !force) {
+ if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
+ swiper.slides.css(offsetProp, (offset + "px"));
+ }
+ swiper.updateProgress();
+ return;
+ }
+ if (swiper.params.virtual.renderExternal) {
+ swiper.params.virtual.renderExternal.call(swiper, {
+ offset: offset,
+ from: from,
+ to: to,
+ slides: (function getSlides() {
+ var slidesToRender = [];
+ for (var i = from; i <= to; i += 1) {
+ slidesToRender.push(slides[i]);
+ }
+ return slidesToRender;
+ }()),
+ });
+ onRendered();
+ return;
+ }
+ var prependIndexes = [];
+ var appendIndexes = [];
+ if (force) {
+ swiper.$wrapperEl.find(("." + (swiper.params.slideClass))).remove();
+ } else {
+ for (var i = previousFrom; i <= previousTo; i += 1) {
+ if (i < from || i > to) {
+ swiper.$wrapperEl.find(("." + (swiper.params.slideClass) + "[data-swiper-slide-index=\"" + i + "\"]")).remove();
+ }
+ }
+ }
+ for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {
+ if (i$1 >= from && i$1 <= to) {
+ if (typeof previousTo === 'undefined' || force) {
+ appendIndexes.push(i$1);
+ } else {
+ if (i$1 > previousTo) { appendIndexes.push(i$1); }
+ if (i$1 < previousFrom) { prependIndexes.push(i$1); }
+ }
+ }
+ }
+ appendIndexes.forEach(function (index) {
+ swiper.$wrapperEl.append(renderSlide(slides[index], index));
+ });
+ prependIndexes.sort(function (a, b) { return a < b; }).forEach(function (index) {
+ swiper.$wrapperEl.prepend(renderSlide(slides[index], index));
+ });
+ swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, (offset + "px"));
+ onRendered();
+ },
+ renderSlide: function renderSlide(slide, index) {
+ var swiper = this;
+ var params = swiper.params.virtual;
+ if (params.cache && swiper.virtual.cache[index]) {
+ return swiper.virtual.cache[index];
+ }
+ var $slideEl = params.renderSlide
+ ? $(params.renderSlide.call(swiper, slide, index))
+ : $(("" + slide + "
"));
+ if (!$slideEl.attr('data-swiper-slide-index')) { $slideEl.attr('data-swiper-slide-index', index); }
+ if (params.cache) { swiper.virtual.cache[index] = $slideEl; }
+ return $slideEl;
+ },
+ appendSlide: function appendSlide(slide) {
+ var swiper = this;
+ swiper.virtual.slides.push(slide);
+ swiper.virtual.update(true);
+ },
+ prependSlide: function prependSlide(slide) {
+ var swiper = this;
+ swiper.virtual.slides.unshift(slide);
+ if (swiper.params.virtual.cache) {
+ var cache = swiper.virtual.cache;
+ var newCache = {};
+ Object.keys(cache).forEach(function (cachedIndex) {
+ newCache[cachedIndex + 1] = cache[cachedIndex];
+ });
+ swiper.virtual.cache = newCache;
+ }
+ swiper.virtual.update(true);
+ swiper.slideNext(0);
+ },
+ };
+
+ var Virtual$1 = {
+ name: 'virtual',
+ params: {
+ virtual: {
+ enabled: false,
+ slides: [],
+ cache: true,
+ renderSlide: null,
+ renderExternal: null,
+ addSlidesBefore: 0,
+ addSlidesAfter: 0,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ virtual: {
+ update: Virtual.update.bind(swiper),
+ appendSlide: Virtual.appendSlide.bind(swiper),
+ prependSlide: Virtual.prependSlide.bind(swiper),
+ renderSlide: Virtual.renderSlide.bind(swiper),
+ slides: swiper.params.virtual.slides,
+ cache: {},
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ if (!swiper.params.virtual.enabled) { return; }
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "virtual"));
+ var overwriteParams = {
+ watchSlidesProgress: true,
+ };
+ Utils.extend(swiper.params, overwriteParams);
+ Utils.extend(swiper.originalParams, overwriteParams);
+
+ swiper.virtual.update();
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ if (!swiper.params.virtual.enabled) { return; }
+ swiper.virtual.update();
+ },
+ },
+ };
+
+ var Keyboard = {
+ handle: function handle(event) {
+ var swiper = this;
+ var rtl = swiper.rtlTranslate;
+ var e = event;
+ if (e.originalEvent) { e = e.originalEvent; } // jquery fix
+ var kc = e.keyCode || e.charCode;
+ // Directions locks
+ if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40))) {
+ return false;
+ }
+ if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38))) {
+ return false;
+ }
+ if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
+ return undefined;
+ }
+ if (doc.activeElement && doc.activeElement.nodeName && (doc.activeElement.nodeName.toLowerCase() === 'input' || doc.activeElement.nodeName.toLowerCase() === 'textarea')) {
+ return undefined;
+ }
+ if (swiper.params.keyboard.onlyInViewport && (kc === 37 || kc === 39 || kc === 38 || kc === 40)) {
+ var inView = false;
+ // Check that swiper should be inside of visible area of window
+ if (swiper.$el.parents(("." + (swiper.params.slideClass))).length > 0 && swiper.$el.parents(("." + (swiper.params.slideActiveClass))).length === 0) {
+ return undefined;
+ }
+ var windowWidth = win.innerWidth;
+ var windowHeight = win.innerHeight;
+ var swiperOffset = swiper.$el.offset();
+ if (rtl) { swiperOffset.left -= swiper.$el[0].scrollLeft; }
+ var swiperCoord = [
+ [swiperOffset.left, swiperOffset.top],
+ [swiperOffset.left + swiper.width, swiperOffset.top],
+ [swiperOffset.left, swiperOffset.top + swiper.height],
+ [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height] ];
+ for (var i = 0; i < swiperCoord.length; i += 1) {
+ var point = swiperCoord[i];
+ if (
+ point[0] >= 0 && point[0] <= windowWidth
+ && point[1] >= 0 && point[1] <= windowHeight
+ ) {
+ inView = true;
+ }
+ }
+ if (!inView) { return undefined; }
+ }
+ if (swiper.isHorizontal()) {
+ if (kc === 37 || kc === 39) {
+ if (e.preventDefault) { e.preventDefault(); }
+ else { e.returnValue = false; }
+ }
+ if ((kc === 39 && !rtl) || (kc === 37 && rtl)) { swiper.slideNext(); }
+ if ((kc === 37 && !rtl) || (kc === 39 && rtl)) { swiper.slidePrev(); }
+ } else {
+ if (kc === 38 || kc === 40) {
+ if (e.preventDefault) { e.preventDefault(); }
+ else { e.returnValue = false; }
+ }
+ if (kc === 40) { swiper.slideNext(); }
+ if (kc === 38) { swiper.slidePrev(); }
+ }
+ swiper.emit('keyPress', kc);
+ return undefined;
+ },
+ enable: function enable() {
+ var swiper = this;
+ if (swiper.keyboard.enabled) { return; }
+ $(doc).on('keydown', swiper.keyboard.handle);
+ swiper.keyboard.enabled = true;
+ },
+ disable: function disable() {
+ var swiper = this;
+ if (!swiper.keyboard.enabled) { return; }
+ $(doc).off('keydown', swiper.keyboard.handle);
+ swiper.keyboard.enabled = false;
+ },
+ };
+
+ var Keyboard$1 = {
+ name: 'keyboard',
+ params: {
+ keyboard: {
+ enabled: false,
+ onlyInViewport: true,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ keyboard: {
+ enabled: false,
+ enable: Keyboard.enable.bind(swiper),
+ disable: Keyboard.disable.bind(swiper),
+ handle: Keyboard.handle.bind(swiper),
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ if (swiper.params.keyboard.enabled) {
+ swiper.keyboard.enable();
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (swiper.keyboard.enabled) {
+ swiper.keyboard.disable();
+ }
+ },
+ },
+ };
+
+ function isEventSupported() {
+ var eventName = 'onwheel';
+ var isSupported = eventName in doc;
+
+ if (!isSupported) {
+ var element = doc.createElement('div');
+ element.setAttribute(eventName, 'return;');
+ isSupported = typeof element[eventName] === 'function';
+ }
+
+ if (!isSupported
+ && doc.implementation
+ && doc.implementation.hasFeature
+ // always returns true in newer browsers as per the standard.
+ // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
+ && doc.implementation.hasFeature('', '') !== true
+ ) {
+ // This is the only way to test support for the `wheel` event in IE9+.
+ isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');
+ }
+
+ return isSupported;
+ }
+ var Mousewheel = {
+ lastScrollTime: Utils.now(),
+ event: (function getEvent() {
+ if (win.navigator.userAgent.indexOf('firefox') > -1) { return 'DOMMouseScroll'; }
+ return isEventSupported() ? 'wheel' : 'mousewheel';
+ }()),
+ normalize: function normalize(e) {
+ // Reasonable defaults
+ var PIXEL_STEP = 10;
+ var LINE_HEIGHT = 40;
+ var PAGE_HEIGHT = 800;
+
+ var sX = 0;
+ var sY = 0; // spinX, spinY
+ var pX = 0;
+ var pY = 0; // pixelX, pixelY
+
+ // Legacy
+ if ('detail' in e) {
+ sY = e.detail;
+ }
+ if ('wheelDelta' in e) {
+ sY = -e.wheelDelta / 120;
+ }
+ if ('wheelDeltaY' in e) {
+ sY = -e.wheelDeltaY / 120;
+ }
+ if ('wheelDeltaX' in e) {
+ sX = -e.wheelDeltaX / 120;
+ }
+
+ // side scrolling on FF with DOMMouseScroll
+ if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
+ sX = sY;
+ sY = 0;
+ }
+
+ pX = sX * PIXEL_STEP;
+ pY = sY * PIXEL_STEP;
+
+ if ('deltaY' in e) {
+ pY = e.deltaY;
+ }
+ if ('deltaX' in e) {
+ pX = e.deltaX;
+ }
+
+ if ((pX || pY) && e.deltaMode) {
+ if (e.deltaMode === 1) { // delta in LINE units
+ pX *= LINE_HEIGHT;
+ pY *= LINE_HEIGHT;
+ } else { // delta in PAGE units
+ pX *= PAGE_HEIGHT;
+ pY *= PAGE_HEIGHT;
+ }
+ }
+
+ // Fall-back if spin cannot be determined
+ if (pX && !sX) {
+ sX = (pX < 1) ? -1 : 1;
+ }
+ if (pY && !sY) {
+ sY = (pY < 1) ? -1 : 1;
+ }
+
+ return {
+ spinX: sX,
+ spinY: sY,
+ pixelX: pX,
+ pixelY: pY,
+ };
+ },
+ handleMouseEnter: function handleMouseEnter() {
+ var swiper = this;
+ swiper.mouseEntered = true;
+ },
+ handleMouseLeave: function handleMouseLeave() {
+ var swiper = this;
+ swiper.mouseEntered = false;
+ },
+ handle: function handle(event) {
+ var e = event;
+ var swiper = this;
+ var params = swiper.params.mousewheel;
+
+ if (!swiper.mouseEntered && !params.releaseOnEdges) { return true; }
+
+ if (e.originalEvent) { e = e.originalEvent; } // jquery fix
+ var delta = 0;
+ var rtlFactor = swiper.rtlTranslate ? -1 : 1;
+
+ var data = Mousewheel.normalize(e);
+
+ if (params.forceToAxis) {
+ if (swiper.isHorizontal()) {
+ if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) { delta = data.pixelX * rtlFactor; }
+ else { return true; }
+ } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) { delta = data.pixelY; }
+ else { return true; }
+ } else {
+ delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
+ }
+
+ if (delta === 0) { return true; }
+
+ if (params.invert) { delta = -delta; }
+
+ if (!swiper.params.freeMode) {
+ if (Utils.now() - swiper.mousewheel.lastScrollTime > 60) {
+ if (delta < 0) {
+ if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
+ swiper.slideNext();
+ swiper.emit('scroll', e);
+ } else if (params.releaseOnEdges) { return true; }
+ } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
+ swiper.slidePrev();
+ swiper.emit('scroll', e);
+ } else if (params.releaseOnEdges) { return true; }
+ }
+ swiper.mousewheel.lastScrollTime = (new win.Date()).getTime();
+ } else {
+ // Freemode or scrollContainer:
+ if (swiper.params.loop) {
+ swiper.loopFix();
+ }
+ var position = swiper.getTranslate() + (delta * params.sensitivity);
+ var wasBeginning = swiper.isBeginning;
+ var wasEnd = swiper.isEnd;
+
+ if (position >= swiper.minTranslate()) { position = swiper.minTranslate(); }
+ if (position <= swiper.maxTranslate()) { position = swiper.maxTranslate(); }
+
+ swiper.setTransition(0);
+ swiper.setTranslate(position);
+ swiper.updateProgress();
+ swiper.updateActiveIndex();
+ swiper.updateSlidesClasses();
+
+ if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {
+ swiper.updateSlidesClasses();
+ }
+
+ if (swiper.params.freeModeSticky) {
+ clearTimeout(swiper.mousewheel.timeout);
+ swiper.mousewheel.timeout = Utils.nextTick(function () {
+ swiper.slideToClosest();
+ }, 300);
+ }
+ // Emit event
+ swiper.emit('scroll', e);
+
+ // Stop autoplay
+ if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) { swiper.autoplay.stop(); }
+ // Return page scroll on edge positions
+ if (position === swiper.minTranslate() || position === swiper.maxTranslate()) { return true; }
+ }
+
+ if (e.preventDefault) { e.preventDefault(); }
+ else { e.returnValue = false; }
+ return false;
+ },
+ enable: function enable() {
+ var swiper = this;
+ if (!Mousewheel.event) { return false; }
+ if (swiper.mousewheel.enabled) { return false; }
+ var target = swiper.$el;
+ if (swiper.params.mousewheel.eventsTarged !== 'container') {
+ target = $(swiper.params.mousewheel.eventsTarged);
+ }
+ target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
+ target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
+ target.on(Mousewheel.event, swiper.mousewheel.handle);
+ swiper.mousewheel.enabled = true;
+ return true;
+ },
+ disable: function disable() {
+ var swiper = this;
+ if (!Mousewheel.event) { return false; }
+ if (!swiper.mousewheel.enabled) { return false; }
+ var target = swiper.$el;
+ if (swiper.params.mousewheel.eventsTarged !== 'container') {
+ target = $(swiper.params.mousewheel.eventsTarged);
+ }
+ target.off(Mousewheel.event, swiper.mousewheel.handle);
+ swiper.mousewheel.enabled = false;
+ return true;
+ },
+ };
+
+ var Mousewheel$1 = {
+ name: 'mousewheel',
+ params: {
+ mousewheel: {
+ enabled: false,
+ releaseOnEdges: false,
+ invert: false,
+ forceToAxis: false,
+ sensitivity: 1,
+ eventsTarged: 'container',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ mousewheel: {
+ enabled: false,
+ enable: Mousewheel.enable.bind(swiper),
+ disable: Mousewheel.disable.bind(swiper),
+ handle: Mousewheel.handle.bind(swiper),
+ handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),
+ handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),
+ lastScrollTime: Utils.now(),
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ if (swiper.params.mousewheel.enabled) { swiper.mousewheel.enable(); }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (swiper.mousewheel.enabled) { swiper.mousewheel.disable(); }
+ },
+ },
+ };
+
+ var Navigation = {
+ update: function update() {
+ // Update Navigation Buttons
+ var swiper = this;
+ var params = swiper.params.navigation;
+
+ if (swiper.params.loop) { return; }
+ var ref = swiper.navigation;
+ var $nextEl = ref.$nextEl;
+ var $prevEl = ref.$prevEl;
+
+ if ($prevEl && $prevEl.length > 0) {
+ if (swiper.isBeginning) {
+ $prevEl.addClass(params.disabledClass);
+ } else {
+ $prevEl.removeClass(params.disabledClass);
+ }
+ $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
+ }
+ if ($nextEl && $nextEl.length > 0) {
+ if (swiper.isEnd) {
+ $nextEl.addClass(params.disabledClass);
+ } else {
+ $nextEl.removeClass(params.disabledClass);
+ }
+ $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
+ }
+ },
+ init: function init() {
+ var swiper = this;
+ var params = swiper.params.navigation;
+ if (!(params.nextEl || params.prevEl)) { return; }
+
+ var $nextEl;
+ var $prevEl;
+ if (params.nextEl) {
+ $nextEl = $(params.nextEl);
+ if (
+ swiper.params.uniqueNavElements
+ && typeof params.nextEl === 'string'
+ && $nextEl.length > 1
+ && swiper.$el.find(params.nextEl).length === 1
+ ) {
+ $nextEl = swiper.$el.find(params.nextEl);
+ }
+ }
+ if (params.prevEl) {
+ $prevEl = $(params.prevEl);
+ if (
+ swiper.params.uniqueNavElements
+ && typeof params.prevEl === 'string'
+ && $prevEl.length > 1
+ && swiper.$el.find(params.prevEl).length === 1
+ ) {
+ $prevEl = swiper.$el.find(params.prevEl);
+ }
+ }
+
+ if ($nextEl && $nextEl.length > 0) {
+ $nextEl.on('click', function (e) {
+ e.preventDefault();
+ if (swiper.isEnd && !swiper.params.loop) { return; }
+ swiper.slideNext();
+ });
+ }
+ if ($prevEl && $prevEl.length > 0) {
+ $prevEl.on('click', function (e) {
+ e.preventDefault();
+ if (swiper.isBeginning && !swiper.params.loop) { return; }
+ swiper.slidePrev();
+ });
+ }
+
+ Utils.extend(swiper.navigation, {
+ $nextEl: $nextEl,
+ nextEl: $nextEl && $nextEl[0],
+ $prevEl: $prevEl,
+ prevEl: $prevEl && $prevEl[0],
+ });
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ var ref = swiper.navigation;
+ var $nextEl = ref.$nextEl;
+ var $prevEl = ref.$prevEl;
+ if ($nextEl && $nextEl.length) {
+ $nextEl.off('click');
+ $nextEl.removeClass(swiper.params.navigation.disabledClass);
+ }
+ if ($prevEl && $prevEl.length) {
+ $prevEl.off('click');
+ $prevEl.removeClass(swiper.params.navigation.disabledClass);
+ }
+ },
+ };
+
+ var Navigation$1 = {
+ name: 'navigation',
+ params: {
+ navigation: {
+ nextEl: null,
+ prevEl: null,
+
+ hideOnClick: false,
+ disabledClass: 'swiper-button-disabled',
+ hiddenClass: 'swiper-button-hidden',
+ lockClass: 'swiper-button-lock',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ navigation: {
+ init: Navigation.init.bind(swiper),
+ update: Navigation.update.bind(swiper),
+ destroy: Navigation.destroy.bind(swiper),
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ swiper.navigation.init();
+ swiper.navigation.update();
+ },
+ toEdge: function toEdge() {
+ var swiper = this;
+ swiper.navigation.update();
+ },
+ fromEdge: function fromEdge() {
+ var swiper = this;
+ swiper.navigation.update();
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ swiper.navigation.destroy();
+ },
+ click: function click(e) {
+ var swiper = this;
+ var ref = swiper.navigation;
+ var $nextEl = ref.$nextEl;
+ var $prevEl = ref.$prevEl;
+ if (
+ swiper.params.navigation.hideOnClick
+ && !$(e.target).is($prevEl)
+ && !$(e.target).is($nextEl)
+ ) {
+ if ($nextEl) { $nextEl.toggleClass(swiper.params.navigation.hiddenClass); }
+ if ($prevEl) { $prevEl.toggleClass(swiper.params.navigation.hiddenClass); }
+ }
+ },
+ },
+ };
+
+ var Pagination = {
+ update: function update() {
+ // Render || Update Pagination bullets/items
+ var swiper = this;
+ var rtl = swiper.rtl;
+ var params = swiper.params.pagination;
+ if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }
+ var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
+ var $el = swiper.pagination.$el;
+ // Current/Total
+ var current;
+ var total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
+ if (swiper.params.loop) {
+ current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);
+ if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {
+ current -= (slidesLength - (swiper.loopedSlides * 2));
+ }
+ if (current > total - 1) { current -= total; }
+ if (current < 0 && swiper.params.paginationType !== 'bullets') { current = total + current; }
+ } else if (typeof swiper.snapIndex !== 'undefined') {
+ current = swiper.snapIndex;
+ } else {
+ current = swiper.activeIndex || 0;
+ }
+ // Types
+ if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
+ var bullets = swiper.pagination.bullets;
+ var firstIndex;
+ var lastIndex;
+ var midIndex;
+ if (params.dynamicBullets) {
+ swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);
+ $el.css(swiper.isHorizontal() ? 'width' : 'height', ((swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)) + "px"));
+ if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {
+ swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);
+ if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {
+ swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
+ } else if (swiper.pagination.dynamicBulletIndex < 0) {
+ swiper.pagination.dynamicBulletIndex = 0;
+ }
+ }
+ firstIndex = current - swiper.pagination.dynamicBulletIndex;
+ lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
+ midIndex = (lastIndex + firstIndex) / 2;
+ }
+ bullets.removeClass(((params.bulletActiveClass) + " " + (params.bulletActiveClass) + "-next " + (params.bulletActiveClass) + "-next-next " + (params.bulletActiveClass) + "-prev " + (params.bulletActiveClass) + "-prev-prev " + (params.bulletActiveClass) + "-main"));
+ if ($el.length > 1) {
+ bullets.each(function (index, bullet) {
+ var $bullet = $(bullet);
+ var bulletIndex = $bullet.index();
+ if (bulletIndex === current) {
+ $bullet.addClass(params.bulletActiveClass);
+ }
+ if (params.dynamicBullets) {
+ if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
+ $bullet.addClass(((params.bulletActiveClass) + "-main"));
+ }
+ if (bulletIndex === firstIndex) {
+ $bullet
+ .prev()
+ .addClass(((params.bulletActiveClass) + "-prev"))
+ .prev()
+ .addClass(((params.bulletActiveClass) + "-prev-prev"));
+ }
+ if (bulletIndex === lastIndex) {
+ $bullet
+ .next()
+ .addClass(((params.bulletActiveClass) + "-next"))
+ .next()
+ .addClass(((params.bulletActiveClass) + "-next-next"));
+ }
+ }
+ });
+ } else {
+ var $bullet = bullets.eq(current);
+ $bullet.addClass(params.bulletActiveClass);
+ if (params.dynamicBullets) {
+ var $firstDisplayedBullet = bullets.eq(firstIndex);
+ var $lastDisplayedBullet = bullets.eq(lastIndex);
+ for (var i = firstIndex; i <= lastIndex; i += 1) {
+ bullets.eq(i).addClass(((params.bulletActiveClass) + "-main"));
+ }
+ $firstDisplayedBullet
+ .prev()
+ .addClass(((params.bulletActiveClass) + "-prev"))
+ .prev()
+ .addClass(((params.bulletActiveClass) + "-prev-prev"));
+ $lastDisplayedBullet
+ .next()
+ .addClass(((params.bulletActiveClass) + "-next"))
+ .next()
+ .addClass(((params.bulletActiveClass) + "-next-next"));
+ }
+ }
+ if (params.dynamicBullets) {
+ var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
+ var bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);
+ var offsetProp = rtl ? 'right' : 'left';
+ bullets.css(swiper.isHorizontal() ? offsetProp : 'top', (bulletsOffset + "px"));
+ }
+ }
+ if (params.type === 'fraction') {
+ $el.find(("." + (params.currentClass))).text(params.formatFractionCurrent(current + 1));
+ $el.find(("." + (params.totalClass))).text(params.formatFractionTotal(total));
+ }
+ if (params.type === 'progressbar') {
+ var progressbarDirection;
+ if (params.progressbarOpposite) {
+ progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
+ } else {
+ progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
+ }
+ var scale = (current + 1) / total;
+ var scaleX = 1;
+ var scaleY = 1;
+ if (progressbarDirection === 'horizontal') {
+ scaleX = scale;
+ } else {
+ scaleY = scale;
+ }
+ $el.find(("." + (params.progressbarFillClass))).transform(("translate3d(0,0,0) scaleX(" + scaleX + ") scaleY(" + scaleY + ")")).transition(swiper.params.speed);
+ }
+ if (params.type === 'custom' && params.renderCustom) {
+ $el.html(params.renderCustom(swiper, current + 1, total));
+ swiper.emit('paginationRender', swiper, $el[0]);
+ } else {
+ swiper.emit('paginationUpdate', swiper, $el[0]);
+ }
+ $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
+ },
+ render: function render() {
+ // Render Container
+ var swiper = this;
+ var params = swiper.params.pagination;
+ if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }
+ var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
+
+ var $el = swiper.pagination.$el;
+ var paginationHTML = '';
+ if (params.type === 'bullets') {
+ var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
+ for (var i = 0; i < numberOfBullets; i += 1) {
+ if (params.renderBullet) {
+ paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
+ } else {
+ paginationHTML += "<" + (params.bulletElement) + " class=\"" + (params.bulletClass) + "\">" + (params.bulletElement) + ">";
+ }
+ }
+ $el.html(paginationHTML);
+ swiper.pagination.bullets = $el.find(("." + (params.bulletClass)));
+ }
+ if (params.type === 'fraction') {
+ if (params.renderFraction) {
+ paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
+ } else {
+ paginationHTML = ""
+ + ' / '
+ + "";
+ }
+ $el.html(paginationHTML);
+ }
+ if (params.type === 'progressbar') {
+ if (params.renderProgressbar) {
+ paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
+ } else {
+ paginationHTML = "";
+ }
+ $el.html(paginationHTML);
+ }
+ if (params.type !== 'custom') {
+ swiper.emit('paginationRender', swiper.pagination.$el[0]);
+ }
+ },
+ init: function init() {
+ var swiper = this;
+ var params = swiper.params.pagination;
+ if (!params.el) { return; }
+
+ var $el = $(params.el);
+ if ($el.length === 0) { return; }
+
+ if (
+ swiper.params.uniqueNavElements
+ && typeof params.el === 'string'
+ && $el.length > 1
+ && swiper.$el.find(params.el).length === 1
+ ) {
+ $el = swiper.$el.find(params.el);
+ }
+
+ if (params.type === 'bullets' && params.clickable) {
+ $el.addClass(params.clickableClass);
+ }
+
+ $el.addClass(params.modifierClass + params.type);
+
+ if (params.type === 'bullets' && params.dynamicBullets) {
+ $el.addClass(("" + (params.modifierClass) + (params.type) + "-dynamic"));
+ swiper.pagination.dynamicBulletIndex = 0;
+ if (params.dynamicMainBullets < 1) {
+ params.dynamicMainBullets = 1;
+ }
+ }
+ if (params.type === 'progressbar' && params.progressbarOpposite) {
+ $el.addClass(params.progressbarOppositeClass);
+ }
+
+ if (params.clickable) {
+ $el.on('click', ("." + (params.bulletClass)), function onClick(e) {
+ e.preventDefault();
+ var index = $(this).index() * swiper.params.slidesPerGroup;
+ if (swiper.params.loop) { index += swiper.loopedSlides; }
+ swiper.slideTo(index);
+ });
+ }
+
+ Utils.extend(swiper.pagination, {
+ $el: $el,
+ el: $el[0],
+ });
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ var params = swiper.params.pagination;
+ if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }
+ var $el = swiper.pagination.$el;
+
+ $el.removeClass(params.hiddenClass);
+ $el.removeClass(params.modifierClass + params.type);
+ if (swiper.pagination.bullets) { swiper.pagination.bullets.removeClass(params.bulletActiveClass); }
+ if (params.clickable) {
+ $el.off('click', ("." + (params.bulletClass)));
+ }
+ },
+ };
+
+ var Pagination$1 = {
+ name: 'pagination',
+ params: {
+ pagination: {
+ el: null,
+ bulletElement: 'span',
+ clickable: false,
+ hideOnClick: false,
+ renderBullet: null,
+ renderProgressbar: null,
+ renderFraction: null,
+ renderCustom: null,
+ progressbarOpposite: false,
+ type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'
+ dynamicBullets: false,
+ dynamicMainBullets: 1,
+ formatFractionCurrent: function (number) { return number; },
+ formatFractionTotal: function (number) { return number; },
+ bulletClass: 'swiper-pagination-bullet',
+ bulletActiveClass: 'swiper-pagination-bullet-active',
+ modifierClass: 'swiper-pagination-', // NEW
+ currentClass: 'swiper-pagination-current',
+ totalClass: 'swiper-pagination-total',
+ hiddenClass: 'swiper-pagination-hidden',
+ progressbarFillClass: 'swiper-pagination-progressbar-fill',
+ progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',
+ clickableClass: 'swiper-pagination-clickable', // NEW
+ lockClass: 'swiper-pagination-lock',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ pagination: {
+ init: Pagination.init.bind(swiper),
+ render: Pagination.render.bind(swiper),
+ update: Pagination.update.bind(swiper),
+ destroy: Pagination.destroy.bind(swiper),
+ dynamicBulletIndex: 0,
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ swiper.pagination.init();
+ swiper.pagination.render();
+ swiper.pagination.update();
+ },
+ activeIndexChange: function activeIndexChange() {
+ var swiper = this;
+ if (swiper.params.loop) {
+ swiper.pagination.update();
+ } else if (typeof swiper.snapIndex === 'undefined') {
+ swiper.pagination.update();
+ }
+ },
+ snapIndexChange: function snapIndexChange() {
+ var swiper = this;
+ if (!swiper.params.loop) {
+ swiper.pagination.update();
+ }
+ },
+ slidesLengthChange: function slidesLengthChange() {
+ var swiper = this;
+ if (swiper.params.loop) {
+ swiper.pagination.render();
+ swiper.pagination.update();
+ }
+ },
+ snapGridLengthChange: function snapGridLengthChange() {
+ var swiper = this;
+ if (!swiper.params.loop) {
+ swiper.pagination.render();
+ swiper.pagination.update();
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ swiper.pagination.destroy();
+ },
+ click: function click(e) {
+ var swiper = this;
+ if (
+ swiper.params.pagination.el
+ && swiper.params.pagination.hideOnClick
+ && swiper.pagination.$el.length > 0
+ && !$(e.target).hasClass(swiper.params.pagination.bulletClass)
+ ) {
+ swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);
+ }
+ },
+ },
+ };
+
+ var Scrollbar = {
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }
+ var scrollbar = swiper.scrollbar;
+ var rtl = swiper.rtlTranslate;
+ var progress = swiper.progress;
+ var dragSize = scrollbar.dragSize;
+ var trackSize = scrollbar.trackSize;
+ var $dragEl = scrollbar.$dragEl;
+ var $el = scrollbar.$el;
+ var params = swiper.params.scrollbar;
+
+ var newSize = dragSize;
+ var newPos = (trackSize - dragSize) * progress;
+ if (rtl) {
+ newPos = -newPos;
+ if (newPos > 0) {
+ newSize = dragSize - newPos;
+ newPos = 0;
+ } else if (-newPos + dragSize > trackSize) {
+ newSize = trackSize + newPos;
+ }
+ } else if (newPos < 0) {
+ newSize = dragSize + newPos;
+ newPos = 0;
+ } else if (newPos + dragSize > trackSize) {
+ newSize = trackSize - newPos;
+ }
+ if (swiper.isHorizontal()) {
+ if (Support.transforms3d) {
+ $dragEl.transform(("translate3d(" + newPos + "px, 0, 0)"));
+ } else {
+ $dragEl.transform(("translateX(" + newPos + "px)"));
+ }
+ $dragEl[0].style.width = newSize + "px";
+ } else {
+ if (Support.transforms3d) {
+ $dragEl.transform(("translate3d(0px, " + newPos + "px, 0)"));
+ } else {
+ $dragEl.transform(("translateY(" + newPos + "px)"));
+ }
+ $dragEl[0].style.height = newSize + "px";
+ }
+ if (params.hide) {
+ clearTimeout(swiper.scrollbar.timeout);
+ $el[0].style.opacity = 1;
+ swiper.scrollbar.timeout = setTimeout(function () {
+ $el[0].style.opacity = 0;
+ $el.transition(400);
+ }, 1000);
+ }
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }
+ swiper.scrollbar.$dragEl.transition(duration);
+ },
+ updateSize: function updateSize() {
+ var swiper = this;
+ if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }
+
+ var scrollbar = swiper.scrollbar;
+ var $dragEl = scrollbar.$dragEl;
+ var $el = scrollbar.$el;
+
+ $dragEl[0].style.width = '';
+ $dragEl[0].style.height = '';
+ var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;
+
+ var divider = swiper.size / swiper.virtualSize;
+ var moveDivider = divider * (trackSize / swiper.size);
+ var dragSize;
+ if (swiper.params.scrollbar.dragSize === 'auto') {
+ dragSize = trackSize * divider;
+ } else {
+ dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
+ }
+
+ if (swiper.isHorizontal()) {
+ $dragEl[0].style.width = dragSize + "px";
+ } else {
+ $dragEl[0].style.height = dragSize + "px";
+ }
+
+ if (divider >= 1) {
+ $el[0].style.display = 'none';
+ } else {
+ $el[0].style.display = '';
+ }
+ if (swiper.params.scrollbarHide) {
+ $el[0].style.opacity = 0;
+ }
+ Utils.extend(scrollbar, {
+ trackSize: trackSize,
+ divider: divider,
+ moveDivider: moveDivider,
+ dragSize: dragSize,
+ });
+ scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);
+ },
+ setDragPosition: function setDragPosition(e) {
+ var swiper = this;
+ var scrollbar = swiper.scrollbar;
+ var rtl = swiper.rtlTranslate;
+ var $el = scrollbar.$el;
+ var dragSize = scrollbar.dragSize;
+ var trackSize = scrollbar.trackSize;
+
+ var pointerPosition;
+ if (swiper.isHorizontal()) {
+ pointerPosition = ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX);
+ } else {
+ pointerPosition = ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY);
+ }
+ var positionRatio;
+ positionRatio = ((pointerPosition) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragSize / 2)) / (trackSize - dragSize);
+ positionRatio = Math.max(Math.min(positionRatio, 1), 0);
+ if (rtl) {
+ positionRatio = 1 - positionRatio;
+ }
+
+ var position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);
+
+ swiper.updateProgress(position);
+ swiper.setTranslate(position);
+ swiper.updateActiveIndex();
+ swiper.updateSlidesClasses();
+ },
+ onDragStart: function onDragStart(e) {
+ var swiper = this;
+ var params = swiper.params.scrollbar;
+ var scrollbar = swiper.scrollbar;
+ var $wrapperEl = swiper.$wrapperEl;
+ var $el = scrollbar.$el;
+ var $dragEl = scrollbar.$dragEl;
+ swiper.scrollbar.isTouched = true;
+ e.preventDefault();
+ e.stopPropagation();
+
+ $wrapperEl.transition(100);
+ $dragEl.transition(100);
+ scrollbar.setDragPosition(e);
+
+ clearTimeout(swiper.scrollbar.dragTimeout);
+
+ $el.transition(0);
+ if (params.hide) {
+ $el.css('opacity', 1);
+ }
+ swiper.emit('scrollbarDragStart', e);
+ },
+ onDragMove: function onDragMove(e) {
+ var swiper = this;
+ var scrollbar = swiper.scrollbar;
+ var $wrapperEl = swiper.$wrapperEl;
+ var $el = scrollbar.$el;
+ var $dragEl = scrollbar.$dragEl;
+
+ if (!swiper.scrollbar.isTouched) { return; }
+ if (e.preventDefault) { e.preventDefault(); }
+ else { e.returnValue = false; }
+ scrollbar.setDragPosition(e);
+ $wrapperEl.transition(0);
+ $el.transition(0);
+ $dragEl.transition(0);
+ swiper.emit('scrollbarDragMove', e);
+ },
+ onDragEnd: function onDragEnd(e) {
+ var swiper = this;
+
+ var params = swiper.params.scrollbar;
+ var scrollbar = swiper.scrollbar;
+ var $el = scrollbar.$el;
+
+ if (!swiper.scrollbar.isTouched) { return; }
+ swiper.scrollbar.isTouched = false;
+ if (params.hide) {
+ clearTimeout(swiper.scrollbar.dragTimeout);
+ swiper.scrollbar.dragTimeout = Utils.nextTick(function () {
+ $el.css('opacity', 0);
+ $el.transition(400);
+ }, 1000);
+ }
+ swiper.emit('scrollbarDragEnd', e);
+ if (params.snapOnRelease) {
+ swiper.slideToClosest();
+ }
+ },
+ enableDraggable: function enableDraggable() {
+ var swiper = this;
+ if (!swiper.params.scrollbar.el) { return; }
+ var scrollbar = swiper.scrollbar;
+ var touchEvents = swiper.touchEvents;
+ var touchEventsDesktop = swiper.touchEventsDesktop;
+ var params = swiper.params;
+ var $el = scrollbar.$el;
+ var target = $el[0];
+ var activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;
+ var passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
+ if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {
+ target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
+ doc.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
+ doc.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
+ } else {
+ if (Support.touch) {
+ target.addEventListener(touchEvents.start, swiper.scrollbar.onDragStart, activeListener);
+ target.addEventListener(touchEvents.move, swiper.scrollbar.onDragMove, activeListener);
+ target.addEventListener(touchEvents.end, swiper.scrollbar.onDragEnd, passiveListener);
+ }
+ if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
+ target.addEventListener('mousedown', swiper.scrollbar.onDragStart, activeListener);
+ doc.addEventListener('mousemove', swiper.scrollbar.onDragMove, activeListener);
+ doc.addEventListener('mouseup', swiper.scrollbar.onDragEnd, passiveListener);
+ }
+ }
+ },
+ disableDraggable: function disableDraggable() {
+ var swiper = this;
+ if (!swiper.params.scrollbar.el) { return; }
+ var scrollbar = swiper.scrollbar;
+ var touchEvents = swiper.touchEvents;
+ var touchEventsDesktop = swiper.touchEventsDesktop;
+ var params = swiper.params;
+ var $el = scrollbar.$el;
+ var target = $el[0];
+ var activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;
+ var passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
+ if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {
+ target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
+ doc.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
+ doc.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
+ } else {
+ if (Support.touch) {
+ target.removeEventListener(touchEvents.start, swiper.scrollbar.onDragStart, activeListener);
+ target.removeEventListener(touchEvents.move, swiper.scrollbar.onDragMove, activeListener);
+ target.removeEventListener(touchEvents.end, swiper.scrollbar.onDragEnd, passiveListener);
+ }
+ if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
+ target.removeEventListener('mousedown', swiper.scrollbar.onDragStart, activeListener);
+ doc.removeEventListener('mousemove', swiper.scrollbar.onDragMove, activeListener);
+ doc.removeEventListener('mouseup', swiper.scrollbar.onDragEnd, passiveListener);
+ }
+ }
+ },
+ init: function init() {
+ var swiper = this;
+ if (!swiper.params.scrollbar.el) { return; }
+ var scrollbar = swiper.scrollbar;
+ var $swiperEl = swiper.$el;
+ var params = swiper.params.scrollbar;
+
+ var $el = $(params.el);
+ if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {
+ $el = $swiperEl.find(params.el);
+ }
+
+ var $dragEl = $el.find(("." + (swiper.params.scrollbar.dragClass)));
+ if ($dragEl.length === 0) {
+ $dragEl = $((""));
+ $el.append($dragEl);
+ }
+
+ Utils.extend(scrollbar, {
+ $el: $el,
+ el: $el[0],
+ $dragEl: $dragEl,
+ dragEl: $dragEl[0],
+ });
+
+ if (params.draggable) {
+ scrollbar.enableDraggable();
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ swiper.scrollbar.disableDraggable();
+ },
+ };
+
+ var Scrollbar$1 = {
+ name: 'scrollbar',
+ params: {
+ scrollbar: {
+ el: null,
+ dragSize: 'auto',
+ hide: false,
+ draggable: false,
+ snapOnRelease: true,
+ lockClass: 'swiper-scrollbar-lock',
+ dragClass: 'swiper-scrollbar-drag',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ scrollbar: {
+ init: Scrollbar.init.bind(swiper),
+ destroy: Scrollbar.destroy.bind(swiper),
+ updateSize: Scrollbar.updateSize.bind(swiper),
+ setTranslate: Scrollbar.setTranslate.bind(swiper),
+ setTransition: Scrollbar.setTransition.bind(swiper),
+ enableDraggable: Scrollbar.enableDraggable.bind(swiper),
+ disableDraggable: Scrollbar.disableDraggable.bind(swiper),
+ setDragPosition: Scrollbar.setDragPosition.bind(swiper),
+ onDragStart: Scrollbar.onDragStart.bind(swiper),
+ onDragMove: Scrollbar.onDragMove.bind(swiper),
+ onDragEnd: Scrollbar.onDragEnd.bind(swiper),
+ isTouched: false,
+ timeout: null,
+ dragTimeout: null,
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ swiper.scrollbar.init();
+ swiper.scrollbar.updateSize();
+ swiper.scrollbar.setTranslate();
+ },
+ update: function update() {
+ var swiper = this;
+ swiper.scrollbar.updateSize();
+ },
+ resize: function resize() {
+ var swiper = this;
+ swiper.scrollbar.updateSize();
+ },
+ observerUpdate: function observerUpdate() {
+ var swiper = this;
+ swiper.scrollbar.updateSize();
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ swiper.scrollbar.setTranslate();
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ swiper.scrollbar.setTransition(duration);
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ swiper.scrollbar.destroy();
+ },
+ },
+ };
+
+ var Parallax = {
+ setTransform: function setTransform(el, progress) {
+ var swiper = this;
+ var rtl = swiper.rtl;
+
+ var $el = $(el);
+ var rtlFactor = rtl ? -1 : 1;
+
+ var p = $el.attr('data-swiper-parallax') || '0';
+ var x = $el.attr('data-swiper-parallax-x');
+ var y = $el.attr('data-swiper-parallax-y');
+ var scale = $el.attr('data-swiper-parallax-scale');
+ var opacity = $el.attr('data-swiper-parallax-opacity');
+
+ if (x || y) {
+ x = x || '0';
+ y = y || '0';
+ } else if (swiper.isHorizontal()) {
+ x = p;
+ y = '0';
+ } else {
+ y = p;
+ x = '0';
+ }
+
+ if ((x).indexOf('%') >= 0) {
+ x = (parseInt(x, 10) * progress * rtlFactor) + "%";
+ } else {
+ x = (x * progress * rtlFactor) + "px";
+ }
+ if ((y).indexOf('%') >= 0) {
+ y = (parseInt(y, 10) * progress) + "%";
+ } else {
+ y = (y * progress) + "px";
+ }
+
+ if (typeof opacity !== 'undefined' && opacity !== null) {
+ var currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));
+ $el[0].style.opacity = currentOpacity;
+ }
+ if (typeof scale === 'undefined' || scale === null) {
+ $el.transform(("translate3d(" + x + ", " + y + ", 0px)"));
+ } else {
+ var currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));
+ $el.transform(("translate3d(" + x + ", " + y + ", 0px) scale(" + currentScale + ")"));
+ }
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ var $el = swiper.$el;
+ var slides = swiper.slides;
+ var progress = swiper.progress;
+ var snapGrid = swiper.snapGrid;
+ $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]')
+ .each(function (index, el) {
+ swiper.parallax.setTransform(el, progress);
+ });
+ slides.each(function (slideIndex, slideEl) {
+ var slideProgress = slideEl.progress;
+ if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
+ slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));
+ }
+ slideProgress = Math.min(Math.max(slideProgress, -1), 1);
+ $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]')
+ .each(function (index, el) {
+ swiper.parallax.setTransform(el, slideProgress);
+ });
+ });
+ },
+ setTransition: function setTransition(duration) {
+ if ( duration === void 0 ) duration = this.params.speed;
+
+ var swiper = this;
+ var $el = swiper.$el;
+ $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]')
+ .each(function (index, parallaxEl) {
+ var $parallaxEl = $(parallaxEl);
+ var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;
+ if (duration === 0) { parallaxDuration = 0; }
+ $parallaxEl.transition(parallaxDuration);
+ });
+ },
+ };
+
+ var Parallax$1 = {
+ name: 'parallax',
+ params: {
+ parallax: {
+ enabled: false,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ parallax: {
+ setTransform: Parallax.setTransform.bind(swiper),
+ setTranslate: Parallax.setTranslate.bind(swiper),
+ setTransition: Parallax.setTransition.bind(swiper),
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ if (!swiper.params.parallax.enabled) { return; }
+ swiper.params.watchSlidesProgress = true;
+ swiper.originalParams.watchSlidesProgress = true;
+ },
+ init: function init() {
+ var swiper = this;
+ if (!swiper.params.parallax) { return; }
+ swiper.parallax.setTranslate();
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ if (!swiper.params.parallax) { return; }
+ swiper.parallax.setTranslate();
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ if (!swiper.params.parallax) { return; }
+ swiper.parallax.setTransition(duration);
+ },
+ },
+ };
+
+ var Zoom = {
+ // Calc Scale From Multi-touches
+ getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {
+ if (e.targetTouches.length < 2) { return 1; }
+ var x1 = e.targetTouches[0].pageX;
+ var y1 = e.targetTouches[0].pageY;
+ var x2 = e.targetTouches[1].pageX;
+ var y2 = e.targetTouches[1].pageY;
+ var distance = Math.sqrt((Math.pow( (x2 - x1), 2 )) + (Math.pow( (y2 - y1), 2 )));
+ return distance;
+ },
+ // Events
+ onGestureStart: function onGestureStart(e) {
+ var swiper = this;
+ var params = swiper.params.zoom;
+ var zoom = swiper.zoom;
+ var gesture = zoom.gesture;
+ zoom.fakeGestureTouched = false;
+ zoom.fakeGestureMoved = false;
+ if (!Support.gestures) {
+ if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {
+ return;
+ }
+ zoom.fakeGestureTouched = true;
+ gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);
+ }
+ if (!gesture.$slideEl || !gesture.$slideEl.length) {
+ gesture.$slideEl = $(e.target).closest('.swiper-slide');
+ if (gesture.$slideEl.length === 0) { gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); }
+ gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');
+ gesture.$imageWrapEl = gesture.$imageEl.parent(("." + (params.containerClass)));
+ gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
+ if (gesture.$imageWrapEl.length === 0) {
+ gesture.$imageEl = undefined;
+ return;
+ }
+ }
+ gesture.$imageEl.transition(0);
+ swiper.zoom.isScaling = true;
+ },
+ onGestureChange: function onGestureChange(e) {
+ var swiper = this;
+ var params = swiper.params.zoom;
+ var zoom = swiper.zoom;
+ var gesture = zoom.gesture;
+ if (!Support.gestures) {
+ if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {
+ return;
+ }
+ zoom.fakeGestureMoved = true;
+ gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);
+ }
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
+ if (Support.gestures) {
+ swiper.zoom.scale = e.scale * zoom.currentScale;
+ } else {
+ zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;
+ }
+ if (zoom.scale > gesture.maxRatio) {
+ zoom.scale = (gesture.maxRatio - 1) + (Math.pow( ((zoom.scale - gesture.maxRatio) + 1), 0.5 ));
+ }
+ if (zoom.scale < params.minRatio) {
+ zoom.scale = (params.minRatio + 1) - (Math.pow( ((params.minRatio - zoom.scale) + 1), 0.5 ));
+ }
+ gesture.$imageEl.transform(("translate3d(0,0,0) scale(" + (zoom.scale) + ")"));
+ },
+ onGestureEnd: function onGestureEnd(e) {
+ var swiper = this;
+ var params = swiper.params.zoom;
+ var zoom = swiper.zoom;
+ var gesture = zoom.gesture;
+ if (!Support.gestures) {
+ if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {
+ return;
+ }
+ if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {
+ return;
+ }
+ zoom.fakeGestureTouched = false;
+ zoom.fakeGestureMoved = false;
+ }
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
+ zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
+ gesture.$imageEl.transition(swiper.params.speed).transform(("translate3d(0,0,0) scale(" + (zoom.scale) + ")"));
+ zoom.currentScale = zoom.scale;
+ zoom.isScaling = false;
+ if (zoom.scale === 1) { gesture.$slideEl = undefined; }
+ },
+ onTouchStart: function onTouchStart(e) {
+ var swiper = this;
+ var zoom = swiper.zoom;
+ var gesture = zoom.gesture;
+ var image = zoom.image;
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
+ if (image.isTouched) { return; }
+ if (Device.android) { e.preventDefault(); }
+ image.isTouched = true;
+ image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
+ image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
+ },
+ onTouchMove: function onTouchMove(e) {
+ var swiper = this;
+ var zoom = swiper.zoom;
+ var gesture = zoom.gesture;
+ var image = zoom.image;
+ var velocity = zoom.velocity;
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
+ swiper.allowClick = false;
+ if (!image.isTouched || !gesture.$slideEl) { return; }
+
+ if (!image.isMoved) {
+ image.width = gesture.$imageEl[0].offsetWidth;
+ image.height = gesture.$imageEl[0].offsetHeight;
+ image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;
+ image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;
+ gesture.slideWidth = gesture.$slideEl[0].offsetWidth;
+ gesture.slideHeight = gesture.$slideEl[0].offsetHeight;
+ gesture.$imageWrapEl.transition(0);
+ if (swiper.rtl) {
+ image.startX = -image.startX;
+ image.startY = -image.startY;
+ }
+ }
+ // Define if we need image drag
+ var scaledWidth = image.width * zoom.scale;
+ var scaledHeight = image.height * zoom.scale;
+
+ if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) { return; }
+
+ image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
+ image.maxX = -image.minX;
+ image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
+ image.maxY = -image.minY;
+
+ image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
+ image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
+
+ if (!image.isMoved && !zoom.isScaling) {
+ if (
+ swiper.isHorizontal()
+ && (
+ (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)
+ || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)
+ )
+ ) {
+ image.isTouched = false;
+ return;
+ } if (
+ !swiper.isHorizontal()
+ && (
+ (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)
+ || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)
+ )
+ ) {
+ image.isTouched = false;
+ return;
+ }
+ }
+ e.preventDefault();
+ e.stopPropagation();
+
+ image.isMoved = true;
+ image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;
+ image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;
+
+ if (image.currentX < image.minX) {
+ image.currentX = (image.minX + 1) - (Math.pow( ((image.minX - image.currentX) + 1), 0.8 ));
+ }
+ if (image.currentX > image.maxX) {
+ image.currentX = (image.maxX - 1) + (Math.pow( ((image.currentX - image.maxX) + 1), 0.8 ));
+ }
+
+ if (image.currentY < image.minY) {
+ image.currentY = (image.minY + 1) - (Math.pow( ((image.minY - image.currentY) + 1), 0.8 ));
+ }
+ if (image.currentY > image.maxY) {
+ image.currentY = (image.maxY - 1) + (Math.pow( ((image.currentY - image.maxY) + 1), 0.8 ));
+ }
+
+ // Velocity
+ if (!velocity.prevPositionX) { velocity.prevPositionX = image.touchesCurrent.x; }
+ if (!velocity.prevPositionY) { velocity.prevPositionY = image.touchesCurrent.y; }
+ if (!velocity.prevTime) { velocity.prevTime = Date.now(); }
+ velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
+ velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
+ if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) { velocity.x = 0; }
+ if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) { velocity.y = 0; }
+ velocity.prevPositionX = image.touchesCurrent.x;
+ velocity.prevPositionY = image.touchesCurrent.y;
+ velocity.prevTime = Date.now();
+
+ gesture.$imageWrapEl.transform(("translate3d(" + (image.currentX) + "px, " + (image.currentY) + "px,0)"));
+ },
+ onTouchEnd: function onTouchEnd() {
+ var swiper = this;
+ var zoom = swiper.zoom;
+ var gesture = zoom.gesture;
+ var image = zoom.image;
+ var velocity = zoom.velocity;
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
+ if (!image.isTouched || !image.isMoved) {
+ image.isTouched = false;
+ image.isMoved = false;
+ return;
+ }
+ image.isTouched = false;
+ image.isMoved = false;
+ var momentumDurationX = 300;
+ var momentumDurationY = 300;
+ var momentumDistanceX = velocity.x * momentumDurationX;
+ var newPositionX = image.currentX + momentumDistanceX;
+ var momentumDistanceY = velocity.y * momentumDurationY;
+ var newPositionY = image.currentY + momentumDistanceY;
+
+ // Fix duration
+ if (velocity.x !== 0) { momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); }
+ if (velocity.y !== 0) { momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); }
+ var momentumDuration = Math.max(momentumDurationX, momentumDurationY);
+
+ image.currentX = newPositionX;
+ image.currentY = newPositionY;
+
+ // Define if we need image drag
+ var scaledWidth = image.width * zoom.scale;
+ var scaledHeight = image.height * zoom.scale;
+ image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
+ image.maxX = -image.minX;
+ image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
+ image.maxY = -image.minY;
+ image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
+ image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
+
+ gesture.$imageWrapEl.transition(momentumDuration).transform(("translate3d(" + (image.currentX) + "px, " + (image.currentY) + "px,0)"));
+ },
+ onTransitionEnd: function onTransitionEnd() {
+ var swiper = this;
+ var zoom = swiper.zoom;
+ var gesture = zoom.gesture;
+ if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {
+ gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');
+ gesture.$imageWrapEl.transform('translate3d(0,0,0)');
+ gesture.$slideEl = undefined;
+ gesture.$imageEl = undefined;
+ gesture.$imageWrapEl = undefined;
+
+ zoom.scale = 1;
+ zoom.currentScale = 1;
+ }
+ },
+ // Toggle Zoom
+ toggle: function toggle(e) {
+ var swiper = this;
+ var zoom = swiper.zoom;
+
+ if (zoom.scale && zoom.scale !== 1) {
+ // Zoom Out
+ zoom.out();
+ } else {
+ // Zoom In
+ zoom.in(e);
+ }
+ },
+ in: function in$1(e) {
+ var swiper = this;
+
+ var zoom = swiper.zoom;
+ var params = swiper.params.zoom;
+ var gesture = zoom.gesture;
+ var image = zoom.image;
+
+ if (!gesture.$slideEl) {
+ gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);
+ gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');
+ gesture.$imageWrapEl = gesture.$imageEl.parent(("." + (params.containerClass)));
+ }
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
+
+ gesture.$slideEl.addClass(("" + (params.zoomedSlideClass)));
+
+ var touchX;
+ var touchY;
+ var offsetX;
+ var offsetY;
+ var diffX;
+ var diffY;
+ var translateX;
+ var translateY;
+ var imageWidth;
+ var imageHeight;
+ var scaledWidth;
+ var scaledHeight;
+ var translateMinX;
+ var translateMinY;
+ var translateMaxX;
+ var translateMaxY;
+ var slideWidth;
+ var slideHeight;
+
+ if (typeof image.touchesStart.x === 'undefined' && e) {
+ touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
+ touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
+ } else {
+ touchX = image.touchesStart.x;
+ touchY = image.touchesStart.y;
+ }
+
+ zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
+ zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
+ if (e) {
+ slideWidth = gesture.$slideEl[0].offsetWidth;
+ slideHeight = gesture.$slideEl[0].offsetHeight;
+ offsetX = gesture.$slideEl.offset().left;
+ offsetY = gesture.$slideEl.offset().top;
+ diffX = (offsetX + (slideWidth / 2)) - touchX;
+ diffY = (offsetY + (slideHeight / 2)) - touchY;
+
+ imageWidth = gesture.$imageEl[0].offsetWidth;
+ imageHeight = gesture.$imageEl[0].offsetHeight;
+ scaledWidth = imageWidth * zoom.scale;
+ scaledHeight = imageHeight * zoom.scale;
+
+ translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);
+ translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);
+ translateMaxX = -translateMinX;
+ translateMaxY = -translateMinY;
+
+ translateX = diffX * zoom.scale;
+ translateY = diffY * zoom.scale;
+
+ if (translateX < translateMinX) {
+ translateX = translateMinX;
+ }
+ if (translateX > translateMaxX) {
+ translateX = translateMaxX;
+ }
+
+ if (translateY < translateMinY) {
+ translateY = translateMinY;
+ }
+ if (translateY > translateMaxY) {
+ translateY = translateMaxY;
+ }
+ } else {
+ translateX = 0;
+ translateY = 0;
+ }
+ gesture.$imageWrapEl.transition(300).transform(("translate3d(" + translateX + "px, " + translateY + "px,0)"));
+ gesture.$imageEl.transition(300).transform(("translate3d(0,0,0) scale(" + (zoom.scale) + ")"));
+ },
+ out: function out() {
+ var swiper = this;
+
+ var zoom = swiper.zoom;
+ var params = swiper.params.zoom;
+ var gesture = zoom.gesture;
+
+ if (!gesture.$slideEl) {
+ gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);
+ gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');
+ gesture.$imageWrapEl = gesture.$imageEl.parent(("." + (params.containerClass)));
+ }
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
+
+ zoom.scale = 1;
+ zoom.currentScale = 1;
+ gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');
+ gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');
+ gesture.$slideEl.removeClass(("" + (params.zoomedSlideClass)));
+ gesture.$slideEl = undefined;
+ },
+ // Attach/Detach Events
+ enable: function enable() {
+ var swiper = this;
+ var zoom = swiper.zoom;
+ if (zoom.enabled) { return; }
+ zoom.enabled = true;
+
+ var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
+
+ // Scale image
+ if (Support.gestures) {
+ swiper.$wrapperEl.on('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);
+ swiper.$wrapperEl.on('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);
+ swiper.$wrapperEl.on('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);
+ } else if (swiper.touchEvents.start === 'touchstart') {
+ swiper.$wrapperEl.on(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);
+ swiper.$wrapperEl.on(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);
+ swiper.$wrapperEl.on(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);
+ }
+
+ // Move image
+ swiper.$wrapperEl.on(swiper.touchEvents.move, ("." + (swiper.params.zoom.containerClass)), zoom.onTouchMove);
+ },
+ disable: function disable() {
+ var swiper = this;
+ var zoom = swiper.zoom;
+ if (!zoom.enabled) { return; }
+
+ swiper.zoom.enabled = false;
+
+ var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
+
+ // Scale image
+ if (Support.gestures) {
+ swiper.$wrapperEl.off('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);
+ swiper.$wrapperEl.off('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);
+ swiper.$wrapperEl.off('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);
+ } else if (swiper.touchEvents.start === 'touchstart') {
+ swiper.$wrapperEl.off(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);
+ swiper.$wrapperEl.off(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);
+ swiper.$wrapperEl.off(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);
+ }
+
+ // Move image
+ swiper.$wrapperEl.off(swiper.touchEvents.move, ("." + (swiper.params.zoom.containerClass)), zoom.onTouchMove);
+ },
+ };
+
+ var Zoom$1 = {
+ name: 'zoom',
+ params: {
+ zoom: {
+ enabled: false,
+ maxRatio: 3,
+ minRatio: 1,
+ toggle: true,
+ containerClass: 'swiper-zoom-container',
+ zoomedSlideClass: 'swiper-slide-zoomed',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ var zoom = {
+ enabled: false,
+ scale: 1,
+ currentScale: 1,
+ isScaling: false,
+ gesture: {
+ $slideEl: undefined,
+ slideWidth: undefined,
+ slideHeight: undefined,
+ $imageEl: undefined,
+ $imageWrapEl: undefined,
+ maxRatio: 3,
+ },
+ image: {
+ isTouched: undefined,
+ isMoved: undefined,
+ currentX: undefined,
+ currentY: undefined,
+ minX: undefined,
+ minY: undefined,
+ maxX: undefined,
+ maxY: undefined,
+ width: undefined,
+ height: undefined,
+ startX: undefined,
+ startY: undefined,
+ touchesStart: {},
+ touchesCurrent: {},
+ },
+ velocity: {
+ x: undefined,
+ y: undefined,
+ prevPositionX: undefined,
+ prevPositionY: undefined,
+ prevTime: undefined,
+ },
+ };
+ ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach(function (methodName) {
+ zoom[methodName] = Zoom[methodName].bind(swiper);
+ });
+ Utils.extend(swiper, {
+ zoom: zoom,
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ if (swiper.params.zoom.enabled) {
+ swiper.zoom.enable();
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ swiper.zoom.disable();
+ },
+ touchStart: function touchStart(e) {
+ var swiper = this;
+ if (!swiper.zoom.enabled) { return; }
+ swiper.zoom.onTouchStart(e);
+ },
+ touchEnd: function touchEnd(e) {
+ var swiper = this;
+ if (!swiper.zoom.enabled) { return; }
+ swiper.zoom.onTouchEnd(e);
+ },
+ doubleTap: function doubleTap(e) {
+ var swiper = this;
+ if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
+ swiper.zoom.toggle(e);
+ }
+ },
+ transitionEnd: function transitionEnd() {
+ var swiper = this;
+ if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
+ swiper.zoom.onTransitionEnd();
+ }
+ },
+ },
+ };
+
+ var Lazy = {
+ loadInSlide: function loadInSlide(index, loadInDuplicate) {
+ if ( loadInDuplicate === void 0 ) loadInDuplicate = true;
+
+ var swiper = this;
+ var params = swiper.params.lazy;
+ if (typeof index === 'undefined') { return; }
+ if (swiper.slides.length === 0) { return; }
+ var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
+
+ var $slideEl = isVirtual
+ ? swiper.$wrapperEl.children(("." + (swiper.params.slideClass) + "[data-swiper-slide-index=\"" + index + "\"]"))
+ : swiper.slides.eq(index);
+
+ var $images = $slideEl.find(("." + (params.elementClass) + ":not(." + (params.loadedClass) + "):not(." + (params.loadingClass) + ")"));
+ if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {
+ $images = $images.add($slideEl[0]);
+ }
+ if ($images.length === 0) { return; }
+
+ $images.each(function (imageIndex, imageEl) {
+ var $imageEl = $(imageEl);
+ $imageEl.addClass(params.loadingClass);
+
+ var background = $imageEl.attr('data-background');
+ var src = $imageEl.attr('data-src');
+ var srcset = $imageEl.attr('data-srcset');
+ var sizes = $imageEl.attr('data-sizes');
+
+ swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, function () {
+ if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) { return; }
+ if (background) {
+ $imageEl.css('background-image', ("url(\"" + background + "\")"));
+ $imageEl.removeAttr('data-background');
+ } else {
+ if (srcset) {
+ $imageEl.attr('srcset', srcset);
+ $imageEl.removeAttr('data-srcset');
+ }
+ if (sizes) {
+ $imageEl.attr('sizes', sizes);
+ $imageEl.removeAttr('data-sizes');
+ }
+ if (src) {
+ $imageEl.attr('src', src);
+ $imageEl.removeAttr('data-src');
+ }
+ }
+
+ $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);
+ $slideEl.find(("." + (params.preloaderClass))).remove();
+ if (swiper.params.loop && loadInDuplicate) {
+ var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');
+ if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {
+ var originalSlide = swiper.$wrapperEl.children(("[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]:not(." + (swiper.params.slideDuplicateClass) + ")"));
+ swiper.lazy.loadInSlide(originalSlide.index(), false);
+ } else {
+ var duplicatedSlide = swiper.$wrapperEl.children(("." + (swiper.params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]"));
+ swiper.lazy.loadInSlide(duplicatedSlide.index(), false);
+ }
+ }
+ swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);
+ });
+
+ swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);
+ });
+ },
+ load: function load() {
+ var swiper = this;
+ var $wrapperEl = swiper.$wrapperEl;
+ var swiperParams = swiper.params;
+ var slides = swiper.slides;
+ var activeIndex = swiper.activeIndex;
+ var isVirtual = swiper.virtual && swiperParams.virtual.enabled;
+ var params = swiperParams.lazy;
+
+ var slidesPerView = swiperParams.slidesPerView;
+ if (slidesPerView === 'auto') {
+ slidesPerView = 0;
+ }
+
+ function slideExist(index) {
+ if (isVirtual) {
+ if ($wrapperEl.children(("." + (swiperParams.slideClass) + "[data-swiper-slide-index=\"" + index + "\"]")).length) {
+ return true;
+ }
+ } else if (slides[index]) { return true; }
+ return false;
+ }
+ function slideIndex(slideEl) {
+ if (isVirtual) {
+ return $(slideEl).attr('data-swiper-slide-index');
+ }
+ return $(slideEl).index();
+ }
+
+ if (!swiper.lazy.initialImageLoaded) { swiper.lazy.initialImageLoaded = true; }
+ if (swiper.params.watchSlidesVisibility) {
+ $wrapperEl.children(("." + (swiperParams.slideVisibleClass))).each(function (elIndex, slideEl) {
+ var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();
+ swiper.lazy.loadInSlide(index);
+ });
+ } else if (slidesPerView > 1) {
+ for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {
+ if (slideExist(i)) { swiper.lazy.loadInSlide(i); }
+ }
+ } else {
+ swiper.lazy.loadInSlide(activeIndex);
+ }
+ if (params.loadPrevNext) {
+ if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {
+ var amount = params.loadPrevNextAmount;
+ var spv = slidesPerView;
+ var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);
+ var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);
+ // Next Slides
+ for (var i$1 = activeIndex + slidesPerView; i$1 < maxIndex; i$1 += 1) {
+ if (slideExist(i$1)) { swiper.lazy.loadInSlide(i$1); }
+ }
+ // Prev Slides
+ for (var i$2 = minIndex; i$2 < activeIndex; i$2 += 1) {
+ if (slideExist(i$2)) { swiper.lazy.loadInSlide(i$2); }
+ }
+ } else {
+ var nextSlide = $wrapperEl.children(("." + (swiperParams.slideNextClass)));
+ if (nextSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(nextSlide)); }
+
+ var prevSlide = $wrapperEl.children(("." + (swiperParams.slidePrevClass)));
+ if (prevSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(prevSlide)); }
+ }
+ }
+ },
+ };
+
+ var Lazy$1 = {
+ name: 'lazy',
+ params: {
+ lazy: {
+ enabled: false,
+ loadPrevNext: false,
+ loadPrevNextAmount: 1,
+ loadOnTransitionStart: false,
+
+ elementClass: 'swiper-lazy',
+ loadingClass: 'swiper-lazy-loading',
+ loadedClass: 'swiper-lazy-loaded',
+ preloaderClass: 'swiper-lazy-preloader',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ lazy: {
+ initialImageLoaded: false,
+ load: Lazy.load.bind(swiper),
+ loadInSlide: Lazy.loadInSlide.bind(swiper),
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ if (swiper.params.lazy.enabled && swiper.params.preloadImages) {
+ swiper.params.preloadImages = false;
+ }
+ },
+ init: function init() {
+ var swiper = this;
+ if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {
+ swiper.lazy.load();
+ }
+ },
+ scroll: function scroll() {
+ var swiper = this;
+ if (swiper.params.freeMode && !swiper.params.freeModeSticky) {
+ swiper.lazy.load();
+ }
+ },
+ resize: function resize() {
+ var swiper = this;
+ if (swiper.params.lazy.enabled) {
+ swiper.lazy.load();
+ }
+ },
+ scrollbarDragMove: function scrollbarDragMove() {
+ var swiper = this;
+ if (swiper.params.lazy.enabled) {
+ swiper.lazy.load();
+ }
+ },
+ transitionStart: function transitionStart() {
+ var swiper = this;
+ if (swiper.params.lazy.enabled) {
+ if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {
+ swiper.lazy.load();
+ }
+ }
+ },
+ transitionEnd: function transitionEnd() {
+ var swiper = this;
+ if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {
+ swiper.lazy.load();
+ }
+ },
+ },
+ };
+
+ /* eslint no-bitwise: ["error", { "allow": [">>"] }] */
+
+ var Controller = {
+ LinearSpline: function LinearSpline(x, y) {
+ var binarySearch = (function search() {
+ var maxIndex;
+ var minIndex;
+ var guess;
+ return function (array, val) {
+ minIndex = -1;
+ maxIndex = array.length;
+ while (maxIndex - minIndex > 1) {
+ guess = maxIndex + minIndex >> 1;
+ if (array[guess] <= val) {
+ minIndex = guess;
+ } else {
+ maxIndex = guess;
+ }
+ }
+ return maxIndex;
+ };
+ }());
+ this.x = x;
+ this.y = y;
+ this.lastIndex = x.length - 1;
+ // Given an x value (x2), return the expected y2 value:
+ // (x1,y1) is the known point before given value,
+ // (x3,y3) is the known point after given value.
+ var i1;
+ var i3;
+
+ this.interpolate = function interpolate(x2) {
+ if (!x2) { return 0; }
+
+ // Get the indexes of x1 and x3 (the array indexes before and after given x2):
+ i3 = binarySearch(this.x, x2);
+ i1 = i3 - 1;
+
+ // We have our indexes i1 & i3, so we can calculate already:
+ // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
+ return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];
+ };
+ return this;
+ },
+ // xxx: for now i will just save one spline function to to
+ getInterpolateFunction: function getInterpolateFunction(c) {
+ var swiper = this;
+ if (!swiper.controller.spline) {
+ swiper.controller.spline = swiper.params.loop
+ ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)
+ : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);
+ }
+ },
+ setTranslate: function setTranslate(setTranslate$1, byController) {
+ var swiper = this;
+ var controlled = swiper.controller.control;
+ var multiplier;
+ var controlledTranslate;
+ function setControlledTranslate(c) {
+ // this will create an Interpolate function based on the snapGrids
+ // x is the Grid of the scrolled scroller and y will be the controlled scroller
+ // it makes sense to create this only once and recall it for the interpolation
+ // the function does a lot of value caching for performance
+ var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
+ if (swiper.params.controller.by === 'slide') {
+ swiper.controller.getInterpolateFunction(c);
+ // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
+ // but it did not work out
+ controlledTranslate = -swiper.controller.spline.interpolate(-translate);
+ }
+
+ if (!controlledTranslate || swiper.params.controller.by === 'container') {
+ multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
+ controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();
+ }
+
+ if (swiper.params.controller.inverse) {
+ controlledTranslate = c.maxTranslate() - controlledTranslate;
+ }
+ c.updateProgress(controlledTranslate);
+ c.setTranslate(controlledTranslate, swiper);
+ c.updateActiveIndex();
+ c.updateSlidesClasses();
+ }
+ if (Array.isArray(controlled)) {
+ for (var i = 0; i < controlled.length; i += 1) {
+ if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
+ setControlledTranslate(controlled[i]);
+ }
+ }
+ } else if (controlled instanceof Swiper && byController !== controlled) {
+ setControlledTranslate(controlled);
+ }
+ },
+ setTransition: function setTransition(duration, byController) {
+ var swiper = this;
+ var controlled = swiper.controller.control;
+ var i;
+ function setControlledTransition(c) {
+ c.setTransition(duration, swiper);
+ if (duration !== 0) {
+ c.transitionStart();
+ if (c.params.autoHeight) {
+ Utils.nextTick(function () {
+ c.updateAutoHeight();
+ });
+ }
+ c.$wrapperEl.transitionEnd(function () {
+ if (!controlled) { return; }
+ if (c.params.loop && swiper.params.controller.by === 'slide') {
+ c.loopFix();
+ }
+ c.transitionEnd();
+ });
+ }
+ }
+ if (Array.isArray(controlled)) {
+ for (i = 0; i < controlled.length; i += 1) {
+ if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
+ setControlledTransition(controlled[i]);
+ }
+ }
+ } else if (controlled instanceof Swiper && byController !== controlled) {
+ setControlledTransition(controlled);
+ }
+ },
+ };
+ var Controller$1 = {
+ name: 'controller',
+ params: {
+ controller: {
+ control: undefined,
+ inverse: false,
+ by: 'slide', // or 'container'
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ controller: {
+ control: swiper.params.controller.control,
+ getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),
+ setTranslate: Controller.setTranslate.bind(swiper),
+ setTransition: Controller.setTransition.bind(swiper),
+ },
+ });
+ },
+ on: {
+ update: function update() {
+ var swiper = this;
+ if (!swiper.controller.control) { return; }
+ if (swiper.controller.spline) {
+ swiper.controller.spline = undefined;
+ delete swiper.controller.spline;
+ }
+ },
+ resize: function resize() {
+ var swiper = this;
+ if (!swiper.controller.control) { return; }
+ if (swiper.controller.spline) {
+ swiper.controller.spline = undefined;
+ delete swiper.controller.spline;
+ }
+ },
+ observerUpdate: function observerUpdate() {
+ var swiper = this;
+ if (!swiper.controller.control) { return; }
+ if (swiper.controller.spline) {
+ swiper.controller.spline = undefined;
+ delete swiper.controller.spline;
+ }
+ },
+ setTranslate: function setTranslate(translate, byController) {
+ var swiper = this;
+ if (!swiper.controller.control) { return; }
+ swiper.controller.setTranslate(translate, byController);
+ },
+ setTransition: function setTransition(duration, byController) {
+ var swiper = this;
+ if (!swiper.controller.control) { return; }
+ swiper.controller.setTransition(duration, byController);
+ },
+ },
+ };
+
+ var a11y = {
+ makeElFocusable: function makeElFocusable($el) {
+ $el.attr('tabIndex', '0');
+ return $el;
+ },
+ addElRole: function addElRole($el, role) {
+ $el.attr('role', role);
+ return $el;
+ },
+ addElLabel: function addElLabel($el, label) {
+ $el.attr('aria-label', label);
+ return $el;
+ },
+ disableEl: function disableEl($el) {
+ $el.attr('aria-disabled', true);
+ return $el;
+ },
+ enableEl: function enableEl($el) {
+ $el.attr('aria-disabled', false);
+ return $el;
+ },
+ onEnterKey: function onEnterKey(e) {
+ var swiper = this;
+ var params = swiper.params.a11y;
+ if (e.keyCode !== 13) { return; }
+ var $targetEl = $(e.target);
+ if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {
+ if (!(swiper.isEnd && !swiper.params.loop)) {
+ swiper.slideNext();
+ }
+ if (swiper.isEnd) {
+ swiper.a11y.notify(params.lastSlideMessage);
+ } else {
+ swiper.a11y.notify(params.nextSlideMessage);
+ }
+ }
+ if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {
+ if (!(swiper.isBeginning && !swiper.params.loop)) {
+ swiper.slidePrev();
+ }
+ if (swiper.isBeginning) {
+ swiper.a11y.notify(params.firstSlideMessage);
+ } else {
+ swiper.a11y.notify(params.prevSlideMessage);
+ }
+ }
+ if (swiper.pagination && $targetEl.is(("." + (swiper.params.pagination.bulletClass)))) {
+ $targetEl[0].click();
+ }
+ },
+ notify: function notify(message) {
+ var swiper = this;
+ var notification = swiper.a11y.liveRegion;
+ if (notification.length === 0) { return; }
+ notification.html('');
+ notification.html(message);
+ },
+ updateNavigation: function updateNavigation() {
+ var swiper = this;
+
+ if (swiper.params.loop) { return; }
+ var ref = swiper.navigation;
+ var $nextEl = ref.$nextEl;
+ var $prevEl = ref.$prevEl;
+
+ if ($prevEl && $prevEl.length > 0) {
+ if (swiper.isBeginning) {
+ swiper.a11y.disableEl($prevEl);
+ } else {
+ swiper.a11y.enableEl($prevEl);
+ }
+ }
+ if ($nextEl && $nextEl.length > 0) {
+ if (swiper.isEnd) {
+ swiper.a11y.disableEl($nextEl);
+ } else {
+ swiper.a11y.enableEl($nextEl);
+ }
+ }
+ },
+ updatePagination: function updatePagination() {
+ var swiper = this;
+ var params = swiper.params.a11y;
+ if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
+ swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {
+ var $bulletEl = $(bulletEl);
+ swiper.a11y.makeElFocusable($bulletEl);
+ swiper.a11y.addElRole($bulletEl, 'button');
+ swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1));
+ });
+ }
+ },
+ init: function init() {
+ var swiper = this;
+
+ swiper.$el.append(swiper.a11y.liveRegion);
+
+ // Navigation
+ var params = swiper.params.a11y;
+ var $nextEl;
+ var $prevEl;
+ if (swiper.navigation && swiper.navigation.$nextEl) {
+ $nextEl = swiper.navigation.$nextEl;
+ }
+ if (swiper.navigation && swiper.navigation.$prevEl) {
+ $prevEl = swiper.navigation.$prevEl;
+ }
+ if ($nextEl) {
+ swiper.a11y.makeElFocusable($nextEl);
+ swiper.a11y.addElRole($nextEl, 'button');
+ swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);
+ $nextEl.on('keydown', swiper.a11y.onEnterKey);
+ }
+ if ($prevEl) {
+ swiper.a11y.makeElFocusable($prevEl);
+ swiper.a11y.addElRole($prevEl, 'button');
+ swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);
+ $prevEl.on('keydown', swiper.a11y.onEnterKey);
+ }
+
+ // Pagination
+ if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
+ swiper.pagination.$el.on('keydown', ("." + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) { swiper.a11y.liveRegion.remove(); }
+
+ var $nextEl;
+ var $prevEl;
+ if (swiper.navigation && swiper.navigation.$nextEl) {
+ $nextEl = swiper.navigation.$nextEl;
+ }
+ if (swiper.navigation && swiper.navigation.$prevEl) {
+ $prevEl = swiper.navigation.$prevEl;
+ }
+ if ($nextEl) {
+ $nextEl.off('keydown', swiper.a11y.onEnterKey);
+ }
+ if ($prevEl) {
+ $prevEl.off('keydown', swiper.a11y.onEnterKey);
+ }
+
+ // Pagination
+ if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
+ swiper.pagination.$el.off('keydown', ("." + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);
+ }
+ },
+ };
+ var A11y = {
+ name: 'a11y',
+ params: {
+ a11y: {
+ enabled: true,
+ notificationClass: 'swiper-notification',
+ prevSlideMessage: 'Previous slide',
+ nextSlideMessage: 'Next slide',
+ firstSlideMessage: 'This is the first slide',
+ lastSlideMessage: 'This is the last slide',
+ paginationBulletMessage: 'Go to slide {{index}}',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ a11y: {
+ liveRegion: $(("")),
+ },
+ });
+ Object.keys(a11y).forEach(function (methodName) {
+ swiper.a11y[methodName] = a11y[methodName].bind(swiper);
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ if (!swiper.params.a11y.enabled) { return; }
+ swiper.a11y.init();
+ swiper.a11y.updateNavigation();
+ },
+ toEdge: function toEdge() {
+ var swiper = this;
+ if (!swiper.params.a11y.enabled) { return; }
+ swiper.a11y.updateNavigation();
+ },
+ fromEdge: function fromEdge() {
+ var swiper = this;
+ if (!swiper.params.a11y.enabled) { return; }
+ swiper.a11y.updateNavigation();
+ },
+ paginationUpdate: function paginationUpdate() {
+ var swiper = this;
+ if (!swiper.params.a11y.enabled) { return; }
+ swiper.a11y.updatePagination();
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (!swiper.params.a11y.enabled) { return; }
+ swiper.a11y.destroy();
+ },
+ },
+ };
+
+ var History = {
+ init: function init() {
+ var swiper = this;
+ if (!swiper.params.history) { return; }
+ if (!win.history || !win.history.pushState) {
+ swiper.params.history.enabled = false;
+ swiper.params.hashNavigation.enabled = true;
+ return;
+ }
+ var history = swiper.history;
+ history.initialized = true;
+ history.paths = History.getPathValues();
+ if (!history.paths.key && !history.paths.value) { return; }
+ history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);
+ if (!swiper.params.history.replaceState) {
+ win.addEventListener('popstate', swiper.history.setHistoryPopState);
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (!swiper.params.history.replaceState) {
+ win.removeEventListener('popstate', swiper.history.setHistoryPopState);
+ }
+ },
+ setHistoryPopState: function setHistoryPopState() {
+ var swiper = this;
+ swiper.history.paths = History.getPathValues();
+ swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);
+ },
+ getPathValues: function getPathValues() {
+ var pathArray = win.location.pathname.slice(1).split('/').filter(function (part) { return part !== ''; });
+ var total = pathArray.length;
+ var key = pathArray[total - 2];
+ var value = pathArray[total - 1];
+ return { key: key, value: value };
+ },
+ setHistory: function setHistory(key, index) {
+ var swiper = this;
+ if (!swiper.history.initialized || !swiper.params.history.enabled) { return; }
+ var slide = swiper.slides.eq(index);
+ var value = History.slugify(slide.attr('data-history'));
+ if (!win.location.pathname.includes(key)) {
+ value = key + "/" + value;
+ }
+ var currentState = win.history.state;
+ if (currentState && currentState.value === value) {
+ return;
+ }
+ if (swiper.params.history.replaceState) {
+ win.history.replaceState({ value: value }, null, value);
+ } else {
+ win.history.pushState({ value: value }, null, value);
+ }
+ },
+ slugify: function slugify(text) {
+ return text.toString().toLowerCase()
+ .replace(/\s+/g, '-')
+ .replace(/[^\w-]+/g, '')
+ .replace(/--+/g, '-')
+ .replace(/^-+/, '')
+ .replace(/-+$/, '');
+ },
+ scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {
+ var swiper = this;
+ if (value) {
+ for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
+ var slide = swiper.slides.eq(i);
+ var slideHistory = History.slugify(slide.attr('data-history'));
+ if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {
+ var index = slide.index();
+ swiper.slideTo(index, speed, runCallbacks);
+ }
+ }
+ } else {
+ swiper.slideTo(0, speed, runCallbacks);
+ }
+ },
+ };
+
+ var History$1 = {
+ name: 'history',
+ params: {
+ history: {
+ enabled: false,
+ replaceState: false,
+ key: 'slides',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ history: {
+ init: History.init.bind(swiper),
+ setHistory: History.setHistory.bind(swiper),
+ setHistoryPopState: History.setHistoryPopState.bind(swiper),
+ scrollToSlide: History.scrollToSlide.bind(swiper),
+ destroy: History.destroy.bind(swiper),
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ if (swiper.params.history.enabled) {
+ swiper.history.init();
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (swiper.params.history.enabled) {
+ swiper.history.destroy();
+ }
+ },
+ transitionEnd: function transitionEnd() {
+ var swiper = this;
+ if (swiper.history.initialized) {
+ swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
+ }
+ },
+ },
+ };
+
+ var HashNavigation = {
+ onHashCange: function onHashCange() {
+ var swiper = this;
+ var newHash = doc.location.hash.replace('#', '');
+ var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');
+ if (newHash !== activeSlideHash) {
+ var newIndex = swiper.$wrapperEl.children(("." + (swiper.params.slideClass) + "[data-hash=\"" + newHash + "\"]")).index();
+ if (typeof newIndex === 'undefined') { return; }
+ swiper.slideTo(newIndex);
+ }
+ },
+ setHash: function setHash() {
+ var swiper = this;
+ if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) { return; }
+ if (swiper.params.hashNavigation.replaceState && win.history && win.history.replaceState) {
+ win.history.replaceState(null, null, (("#" + (swiper.slides.eq(swiper.activeIndex).attr('data-hash'))) || ''));
+ } else {
+ var slide = swiper.slides.eq(swiper.activeIndex);
+ var hash = slide.attr('data-hash') || slide.attr('data-history');
+ doc.location.hash = hash || '';
+ }
+ },
+ init: function init() {
+ var swiper = this;
+ if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) { return; }
+ swiper.hashNavigation.initialized = true;
+ var hash = doc.location.hash.replace('#', '');
+ if (hash) {
+ var speed = 0;
+ for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
+ var slide = swiper.slides.eq(i);
+ var slideHash = slide.attr('data-hash') || slide.attr('data-history');
+ if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {
+ var index = slide.index();
+ swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);
+ }
+ }
+ }
+ if (swiper.params.hashNavigation.watchState) {
+ $(win).on('hashchange', swiper.hashNavigation.onHashCange);
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (swiper.params.hashNavigation.watchState) {
+ $(win).off('hashchange', swiper.hashNavigation.onHashCange);
+ }
+ },
+ };
+ var HashNavigation$1 = {
+ name: 'hash-navigation',
+ params: {
+ hashNavigation: {
+ enabled: false,
+ replaceState: false,
+ watchState: false,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ hashNavigation: {
+ initialized: false,
+ init: HashNavigation.init.bind(swiper),
+ destroy: HashNavigation.destroy.bind(swiper),
+ setHash: HashNavigation.setHash.bind(swiper),
+ onHashCange: HashNavigation.onHashCange.bind(swiper),
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ if (swiper.params.hashNavigation.enabled) {
+ swiper.hashNavigation.init();
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (swiper.params.hashNavigation.enabled) {
+ swiper.hashNavigation.destroy();
+ }
+ },
+ transitionEnd: function transitionEnd() {
+ var swiper = this;
+ if (swiper.hashNavigation.initialized) {
+ swiper.hashNavigation.setHash();
+ }
+ },
+ },
+ };
+
+ /* eslint no-underscore-dangle: "off" */
+
+ var Autoplay = {
+ run: function run() {
+ var swiper = this;
+ var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);
+ var delay = swiper.params.autoplay.delay;
+ if ($activeSlideEl.attr('data-swiper-autoplay')) {
+ delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;
+ }
+ swiper.autoplay.timeout = Utils.nextTick(function () {
+ if (swiper.params.autoplay.reverseDirection) {
+ if (swiper.params.loop) {
+ swiper.loopFix();
+ swiper.slidePrev(swiper.params.speed, true, true);
+ swiper.emit('autoplay');
+ } else if (!swiper.isBeginning) {
+ swiper.slidePrev(swiper.params.speed, true, true);
+ swiper.emit('autoplay');
+ } else if (!swiper.params.autoplay.stopOnLastSlide) {
+ swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);
+ swiper.emit('autoplay');
+ } else {
+ swiper.autoplay.stop();
+ }
+ } else if (swiper.params.loop) {
+ swiper.loopFix();
+ swiper.slideNext(swiper.params.speed, true, true);
+ swiper.emit('autoplay');
+ } else if (!swiper.isEnd) {
+ swiper.slideNext(swiper.params.speed, true, true);
+ swiper.emit('autoplay');
+ } else if (!swiper.params.autoplay.stopOnLastSlide) {
+ swiper.slideTo(0, swiper.params.speed, true, true);
+ swiper.emit('autoplay');
+ } else {
+ swiper.autoplay.stop();
+ }
+ }, delay);
+ },
+ start: function start() {
+ var swiper = this;
+ if (typeof swiper.autoplay.timeout !== 'undefined') { return false; }
+ if (swiper.autoplay.running) { return false; }
+ swiper.autoplay.running = true;
+ swiper.emit('autoplayStart');
+ swiper.autoplay.run();
+ return true;
+ },
+ stop: function stop() {
+ var swiper = this;
+ if (!swiper.autoplay.running) { return false; }
+ if (typeof swiper.autoplay.timeout === 'undefined') { return false; }
+
+ if (swiper.autoplay.timeout) {
+ clearTimeout(swiper.autoplay.timeout);
+ swiper.autoplay.timeout = undefined;
+ }
+ swiper.autoplay.running = false;
+ swiper.emit('autoplayStop');
+ return true;
+ },
+ pause: function pause(speed) {
+ var swiper = this;
+ if (!swiper.autoplay.running) { return; }
+ if (swiper.autoplay.paused) { return; }
+ if (swiper.autoplay.timeout) { clearTimeout(swiper.autoplay.timeout); }
+ swiper.autoplay.paused = true;
+ if (speed === 0 || !swiper.params.autoplay.waitForTransition) {
+ swiper.autoplay.paused = false;
+ swiper.autoplay.run();
+ } else {
+ swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);
+ swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
+ }
+ },
+ };
+
+ var Autoplay$1 = {
+ name: 'autoplay',
+ params: {
+ autoplay: {
+ enabled: false,
+ delay: 3000,
+ waitForTransition: true,
+ disableOnInteraction: true,
+ stopOnLastSlide: false,
+ reverseDirection: false,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ autoplay: {
+ running: false,
+ paused: false,
+ run: Autoplay.run.bind(swiper),
+ start: Autoplay.start.bind(swiper),
+ stop: Autoplay.stop.bind(swiper),
+ pause: Autoplay.pause.bind(swiper),
+ onTransitionEnd: function onTransitionEnd(e) {
+ if (!swiper || swiper.destroyed || !swiper.$wrapperEl) { return; }
+ if (e.target !== this) { return; }
+ swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);
+ swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
+ swiper.autoplay.paused = false;
+ if (!swiper.autoplay.running) {
+ swiper.autoplay.stop();
+ } else {
+ swiper.autoplay.run();
+ }
+ },
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ if (swiper.params.autoplay.enabled) {
+ swiper.autoplay.start();
+ }
+ },
+ beforeTransitionStart: function beforeTransitionStart(speed, internal) {
+ var swiper = this;
+ if (swiper.autoplay.running) {
+ if (internal || !swiper.params.autoplay.disableOnInteraction) {
+ swiper.autoplay.pause(speed);
+ } else {
+ swiper.autoplay.stop();
+ }
+ }
+ },
+ sliderFirstMove: function sliderFirstMove() {
+ var swiper = this;
+ if (swiper.autoplay.running) {
+ if (swiper.params.autoplay.disableOnInteraction) {
+ swiper.autoplay.stop();
+ } else {
+ swiper.autoplay.pause();
+ }
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (swiper.autoplay.running) {
+ swiper.autoplay.stop();
+ }
+ },
+ },
+ };
+
+ var Fade = {
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ var slides = swiper.slides;
+ for (var i = 0; i < slides.length; i += 1) {
+ var $slideEl = swiper.slides.eq(i);
+ var offset = $slideEl[0].swiperSlideOffset;
+ var tx = -offset;
+ if (!swiper.params.virtualTranslate) { tx -= swiper.translate; }
+ var ty = 0;
+ if (!swiper.isHorizontal()) {
+ ty = tx;
+ tx = 0;
+ }
+ var slideOpacity = swiper.params.fadeEffect.crossFade
+ ? Math.max(1 - Math.abs($slideEl[0].progress), 0)
+ : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);
+ $slideEl
+ .css({
+ opacity: slideOpacity,
+ })
+ .transform(("translate3d(" + tx + "px, " + ty + "px, 0px)"));
+ }
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ var slides = swiper.slides;
+ var $wrapperEl = swiper.$wrapperEl;
+ slides.transition(duration);
+ if (swiper.params.virtualTranslate && duration !== 0) {
+ var eventTriggered = false;
+ slides.transitionEnd(function () {
+ if (eventTriggered) { return; }
+ if (!swiper || swiper.destroyed) { return; }
+ eventTriggered = true;
+ swiper.animating = false;
+ var triggerEvents = ['webkitTransitionEnd', 'transitionend'];
+ for (var i = 0; i < triggerEvents.length; i += 1) {
+ $wrapperEl.trigger(triggerEvents[i]);
+ }
+ });
+ }
+ },
+ };
+
+ var EffectFade = {
+ name: 'effect-fade',
+ params: {
+ fadeEffect: {
+ crossFade: false,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ fadeEffect: {
+ setTranslate: Fade.setTranslate.bind(swiper),
+ setTransition: Fade.setTransition.bind(swiper),
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ if (swiper.params.effect !== 'fade') { return; }
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "fade"));
+ var overwriteParams = {
+ slidesPerView: 1,
+ slidesPerColumn: 1,
+ slidesPerGroup: 1,
+ watchSlidesProgress: true,
+ spaceBetween: 0,
+ virtualTranslate: true,
+ };
+ Utils.extend(swiper.params, overwriteParams);
+ Utils.extend(swiper.originalParams, overwriteParams);
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ if (swiper.params.effect !== 'fade') { return; }
+ swiper.fadeEffect.setTranslate();
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ if (swiper.params.effect !== 'fade') { return; }
+ swiper.fadeEffect.setTransition(duration);
+ },
+ },
+ };
+
+ var Cube = {
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ var $el = swiper.$el;
+ var $wrapperEl = swiper.$wrapperEl;
+ var slides = swiper.slides;
+ var swiperWidth = swiper.width;
+ var swiperHeight = swiper.height;
+ var rtl = swiper.rtlTranslate;
+ var swiperSize = swiper.size;
+ var params = swiper.params.cubeEffect;
+ var isHorizontal = swiper.isHorizontal();
+ var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
+ var wrapperRotate = 0;
+ var $cubeShadowEl;
+ if (params.shadow) {
+ if (isHorizontal) {
+ $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');
+ if ($cubeShadowEl.length === 0) {
+ $cubeShadowEl = $('');
+ $wrapperEl.append($cubeShadowEl);
+ }
+ $cubeShadowEl.css({ height: (swiperWidth + "px") });
+ } else {
+ $cubeShadowEl = $el.find('.swiper-cube-shadow');
+ if ($cubeShadowEl.length === 0) {
+ $cubeShadowEl = $('');
+ $el.append($cubeShadowEl);
+ }
+ }
+ }
+ for (var i = 0; i < slides.length; i += 1) {
+ var $slideEl = slides.eq(i);
+ var slideIndex = i;
+ if (isVirtual) {
+ slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);
+ }
+ var slideAngle = slideIndex * 90;
+ var round = Math.floor(slideAngle / 360);
+ if (rtl) {
+ slideAngle = -slideAngle;
+ round = Math.floor(-slideAngle / 360);
+ }
+ var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
+ var tx = 0;
+ var ty = 0;
+ var tz = 0;
+ if (slideIndex % 4 === 0) {
+ tx = -round * 4 * swiperSize;
+ tz = 0;
+ } else if ((slideIndex - 1) % 4 === 0) {
+ tx = 0;
+ tz = -round * 4 * swiperSize;
+ } else if ((slideIndex - 2) % 4 === 0) {
+ tx = swiperSize + (round * 4 * swiperSize);
+ tz = swiperSize;
+ } else if ((slideIndex - 3) % 4 === 0) {
+ tx = -swiperSize;
+ tz = (3 * swiperSize) + (swiperSize * 4 * round);
+ }
+ if (rtl) {
+ tx = -tx;
+ }
+
+ if (!isHorizontal) {
+ ty = tx;
+ tx = 0;
+ }
+
+ var transform = "rotateX(" + (isHorizontal ? 0 : -slideAngle) + "deg) rotateY(" + (isHorizontal ? slideAngle : 0) + "deg) translate3d(" + tx + "px, " + ty + "px, " + tz + "px)";
+ if (progress <= 1 && progress > -1) {
+ wrapperRotate = (slideIndex * 90) + (progress * 90);
+ if (rtl) { wrapperRotate = (-slideIndex * 90) - (progress * 90); }
+ }
+ $slideEl.transform(transform);
+ if (params.slideShadows) {
+ // Set shadows
+ var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
+ var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
+ if (shadowBefore.length === 0) {
+ shadowBefore = $((""));
+ $slideEl.append(shadowBefore);
+ }
+ if (shadowAfter.length === 0) {
+ shadowAfter = $((""));
+ $slideEl.append(shadowAfter);
+ }
+ if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); }
+ if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); }
+ }
+ }
+ $wrapperEl.css({
+ '-webkit-transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"),
+ '-moz-transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"),
+ '-ms-transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"),
+ 'transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"),
+ });
+
+ if (params.shadow) {
+ if (isHorizontal) {
+ $cubeShadowEl.transform(("translate3d(0px, " + ((swiperWidth / 2) + params.shadowOffset) + "px, " + (-swiperWidth / 2) + "px) rotateX(90deg) rotateZ(0deg) scale(" + (params.shadowScale) + ")"));
+ } else {
+ var shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);
+ var multiplier = 1.5 - (
+ (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)
+ + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)
+ );
+ var scale1 = params.shadowScale;
+ var scale2 = params.shadowScale / multiplier;
+ var offset = params.shadowOffset;
+ $cubeShadowEl.transform(("scale3d(" + scale1 + ", 1, " + scale2 + ") translate3d(0px, " + ((swiperHeight / 2) + offset) + "px, " + (-swiperHeight / 2 / scale2) + "px) rotateX(-90deg)"));
+ }
+ }
+ var zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;
+ $wrapperEl
+ .transform(("translate3d(0px,0," + zFactor + "px) rotateX(" + (swiper.isHorizontal() ? 0 : wrapperRotate) + "deg) rotateY(" + (swiper.isHorizontal() ? -wrapperRotate : 0) + "deg)"));
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ var $el = swiper.$el;
+ var slides = swiper.slides;
+ slides
+ .transition(duration)
+ .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
+ .transition(duration);
+ if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
+ $el.find('.swiper-cube-shadow').transition(duration);
+ }
+ },
+ };
+
+ var EffectCube = {
+ name: 'effect-cube',
+ params: {
+ cubeEffect: {
+ slideShadows: true,
+ shadow: true,
+ shadowOffset: 20,
+ shadowScale: 0.94,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ cubeEffect: {
+ setTranslate: Cube.setTranslate.bind(swiper),
+ setTransition: Cube.setTransition.bind(swiper),
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ if (swiper.params.effect !== 'cube') { return; }
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "cube"));
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "3d"));
+ var overwriteParams = {
+ slidesPerView: 1,
+ slidesPerColumn: 1,
+ slidesPerGroup: 1,
+ watchSlidesProgress: true,
+ resistanceRatio: 0,
+ spaceBetween: 0,
+ centeredSlides: false,
+ virtualTranslate: true,
+ };
+ Utils.extend(swiper.params, overwriteParams);
+ Utils.extend(swiper.originalParams, overwriteParams);
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ if (swiper.params.effect !== 'cube') { return; }
+ swiper.cubeEffect.setTranslate();
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ if (swiper.params.effect !== 'cube') { return; }
+ swiper.cubeEffect.setTransition(duration);
+ },
+ },
+ };
+
+ var Flip = {
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ var slides = swiper.slides;
+ var rtl = swiper.rtlTranslate;
+ for (var i = 0; i < slides.length; i += 1) {
+ var $slideEl = slides.eq(i);
+ var progress = $slideEl[0].progress;
+ if (swiper.params.flipEffect.limitRotation) {
+ progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
+ }
+ var offset = $slideEl[0].swiperSlideOffset;
+ var rotate = -180 * progress;
+ var rotateY = rotate;
+ var rotateX = 0;
+ var tx = -offset;
+ var ty = 0;
+ if (!swiper.isHorizontal()) {
+ ty = tx;
+ tx = 0;
+ rotateX = -rotateY;
+ rotateY = 0;
+ } else if (rtl) {
+ rotateY = -rotateY;
+ }
+
+ $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
+
+ if (swiper.params.flipEffect.slideShadows) {
+ // Set shadows
+ var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
+ var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
+ if (shadowBefore.length === 0) {
+ shadowBefore = $((""));
+ $slideEl.append(shadowBefore);
+ }
+ if (shadowAfter.length === 0) {
+ shadowAfter = $((""));
+ $slideEl.append(shadowAfter);
+ }
+ if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); }
+ if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); }
+ }
+ $slideEl
+ .transform(("translate3d(" + tx + "px, " + ty + "px, 0px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)"));
+ }
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ var slides = swiper.slides;
+ var activeIndex = swiper.activeIndex;
+ var $wrapperEl = swiper.$wrapperEl;
+ slides
+ .transition(duration)
+ .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
+ .transition(duration);
+ if (swiper.params.virtualTranslate && duration !== 0) {
+ var eventTriggered = false;
+ // eslint-disable-next-line
+ slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {
+ if (eventTriggered) { return; }
+ if (!swiper || swiper.destroyed) { return; }
+ // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;
+ eventTriggered = true;
+ swiper.animating = false;
+ var triggerEvents = ['webkitTransitionEnd', 'transitionend'];
+ for (var i = 0; i < triggerEvents.length; i += 1) {
+ $wrapperEl.trigger(triggerEvents[i]);
+ }
+ });
+ }
+ },
+ };
+
+ var EffectFlip = {
+ name: 'effect-flip',
+ params: {
+ flipEffect: {
+ slideShadows: true,
+ limitRotation: true,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ flipEffect: {
+ setTranslate: Flip.setTranslate.bind(swiper),
+ setTransition: Flip.setTransition.bind(swiper),
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ if (swiper.params.effect !== 'flip') { return; }
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "flip"));
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "3d"));
+ var overwriteParams = {
+ slidesPerView: 1,
+ slidesPerColumn: 1,
+ slidesPerGroup: 1,
+ watchSlidesProgress: true,
+ spaceBetween: 0,
+ virtualTranslate: true,
+ };
+ Utils.extend(swiper.params, overwriteParams);
+ Utils.extend(swiper.originalParams, overwriteParams);
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ if (swiper.params.effect !== 'flip') { return; }
+ swiper.flipEffect.setTranslate();
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ if (swiper.params.effect !== 'flip') { return; }
+ swiper.flipEffect.setTransition(duration);
+ },
+ },
+ };
+
+ var Coverflow = {
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ var swiperWidth = swiper.width;
+ var swiperHeight = swiper.height;
+ var slides = swiper.slides;
+ var $wrapperEl = swiper.$wrapperEl;
+ var slidesSizesGrid = swiper.slidesSizesGrid;
+ var params = swiper.params.coverflowEffect;
+ var isHorizontal = swiper.isHorizontal();
+ var transform = swiper.translate;
+ var center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);
+ var rotate = isHorizontal ? params.rotate : -params.rotate;
+ var translate = params.depth;
+ // Each slide offset from center
+ for (var i = 0, length = slides.length; i < length; i += 1) {
+ var $slideEl = slides.eq(i);
+ var slideSize = slidesSizesGrid[i];
+ var slideOffset = $slideEl[0].swiperSlideOffset;
+ var offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;
+
+ var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
+ var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
+ // var rotateZ = 0
+ var translateZ = -translate * Math.abs(offsetMultiplier);
+
+ var translateY = isHorizontal ? 0 : params.stretch * (offsetMultiplier);
+ var translateX = isHorizontal ? params.stretch * (offsetMultiplier) : 0;
+
+ // Fix for ultra small values
+ if (Math.abs(translateX) < 0.001) { translateX = 0; }
+ if (Math.abs(translateY) < 0.001) { translateY = 0; }
+ if (Math.abs(translateZ) < 0.001) { translateZ = 0; }
+ if (Math.abs(rotateY) < 0.001) { rotateY = 0; }
+ if (Math.abs(rotateX) < 0.001) { rotateX = 0; }
+
+ var slideTransform = "translate3d(" + translateX + "px," + translateY + "px," + translateZ + "px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)";
+
+ $slideEl.transform(slideTransform);
+ $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
+ if (params.slideShadows) {
+ // Set shadows
+ var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
+ var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
+ if ($shadowBeforeEl.length === 0) {
+ $shadowBeforeEl = $((""));
+ $slideEl.append($shadowBeforeEl);
+ }
+ if ($shadowAfterEl.length === 0) {
+ $shadowAfterEl = $((""));
+ $slideEl.append($shadowAfterEl);
+ }
+ if ($shadowBeforeEl.length) { $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; }
+ if ($shadowAfterEl.length) { $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; }
+ }
+ }
+
+ // Set correct perspective for IE10
+ if (Support.pointerEvents || Support.prefixedPointerEvents) {
+ var ws = $wrapperEl[0].style;
+ ws.perspectiveOrigin = center + "px 50%";
+ }
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ swiper.slides
+ .transition(duration)
+ .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
+ .transition(duration);
+ },
+ };
+
+ var EffectCoverflow = {
+ name: 'effect-coverflow',
+ params: {
+ coverflowEffect: {
+ rotate: 50,
+ stretch: 0,
+ depth: 100,
+ modifier: 1,
+ slideShadows: true,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ coverflowEffect: {
+ setTranslate: Coverflow.setTranslate.bind(swiper),
+ setTransition: Coverflow.setTransition.bind(swiper),
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ if (swiper.params.effect !== 'coverflow') { return; }
+
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "coverflow"));
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "3d"));
+
+ swiper.params.watchSlidesProgress = true;
+ swiper.originalParams.watchSlidesProgress = true;
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ if (swiper.params.effect !== 'coverflow') { return; }
+ swiper.coverflowEffect.setTranslate();
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ if (swiper.params.effect !== 'coverflow') { return; }
+ swiper.coverflowEffect.setTransition(duration);
+ },
+ },
+ };
+
+ var Thumbs = {
+ init: function init() {
+ var swiper = this;
+ var ref = swiper.params;
+ var thumbsParams = ref.thumbs;
+ var SwiperClass = swiper.constructor;
+ if (thumbsParams.swiper instanceof SwiperClass) {
+ swiper.thumbs.swiper = thumbsParams.swiper;
+ Utils.extend(swiper.thumbs.swiper.originalParams, {
+ watchSlidesProgress: true,
+ slideToClickedSlide: false,
+ });
+ Utils.extend(swiper.thumbs.swiper.params, {
+ watchSlidesProgress: true,
+ slideToClickedSlide: false,
+ });
+ } else if (Utils.isObject(thumbsParams.swiper)) {
+ swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {
+ watchSlidesVisibility: true,
+ watchSlidesProgress: true,
+ slideToClickedSlide: false,
+ }));
+ swiper.thumbs.swiperCreated = true;
+ }
+ swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);
+ swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);
+ },
+ onThumbClick: function onThumbClick() {
+ var swiper = this;
+ var thumbsSwiper = swiper.thumbs.swiper;
+ if (!thumbsSwiper) { return; }
+ var clickedIndex = thumbsSwiper.clickedIndex;
+ if (typeof clickedIndex === 'undefined' || clickedIndex === null) { return; }
+ var slideToIndex;
+ if (thumbsSwiper.params.loop) {
+ slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);
+ } else {
+ slideToIndex = clickedIndex;
+ }
+ if (swiper.params.loop) {
+ var currentIndex = swiper.activeIndex;
+ if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {
+ swiper.loopFix();
+ // eslint-disable-next-line
+ swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
+ currentIndex = swiper.activeIndex;
+ }
+ var prevIndex = swiper.slides.eq(currentIndex).prevAll(("[data-swiper-slide-index=\"" + slideToIndex + "\"]")).eq(0).index();
+ var nextIndex = swiper.slides.eq(currentIndex).nextAll(("[data-swiper-slide-index=\"" + slideToIndex + "\"]")).eq(0).index();
+ if (typeof prevIndex === 'undefined') { slideToIndex = nextIndex; }
+ else if (typeof nextIndex === 'undefined') { slideToIndex = prevIndex; }
+ else if (nextIndex - currentIndex < currentIndex - prevIndex) { slideToIndex = nextIndex; }
+ else { slideToIndex = prevIndex; }
+ }
+ swiper.slideTo(slideToIndex);
+ },
+ update: function update(initial) {
+ var swiper = this;
+ var thumbsSwiper = swiper.thumbs.swiper;
+ if (!thumbsSwiper) { return; }
+
+ var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'
+ ? thumbsSwiper.slidesPerViewDynamic()
+ : thumbsSwiper.params.slidesPerView;
+
+ if (swiper.realIndex !== thumbsSwiper.realIndex) {
+ var currentThumbsIndex = thumbsSwiper.activeIndex;
+ var newThumbsIndex;
+ if (thumbsSwiper.params.loop) {
+ if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {
+ thumbsSwiper.loopFix();
+ // eslint-disable-next-line
+ thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;
+ currentThumbsIndex = thumbsSwiper.activeIndex;
+ }
+ // Find actual thumbs index to slide to
+ var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(("[data-swiper-slide-index=\"" + (swiper.realIndex) + "\"]")).eq(0).index();
+ var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(("[data-swiper-slide-index=\"" + (swiper.realIndex) + "\"]")).eq(0).index();
+ if (typeof prevThumbsIndex === 'undefined') { newThumbsIndex = nextThumbsIndex; }
+ else if (typeof nextThumbsIndex === 'undefined') { newThumbsIndex = prevThumbsIndex; }
+ else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) { newThumbsIndex = nextThumbsIndex; }
+ else { newThumbsIndex = prevThumbsIndex; }
+ } else {
+ newThumbsIndex = swiper.realIndex;
+ }
+
+ if (thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
+ if (thumbsSwiper.params.centeredSlides) {
+ if (newThumbsIndex > currentThumbsIndex) {
+ newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
+ } else {
+ newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
+ }
+ } else if (newThumbsIndex > currentThumbsIndex) {
+ newThumbsIndex = newThumbsIndex - slidesPerView + 1;
+ }
+ thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
+ }
+ }
+
+ // Activate thumbs
+ var thumbsToActivate = 1;
+ var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;
+
+ if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
+ thumbsToActivate = swiper.params.slidesPerView;
+ }
+
+ thumbsSwiper.slides.removeClass(thumbActiveClass);
+ if (thumbsSwiper.params.loop) {
+ for (var i = 0; i < thumbsToActivate; i += 1) {
+ thumbsSwiper.$wrapperEl.children(("[data-swiper-slide-index=\"" + (swiper.realIndex + i) + "\"]")).addClass(thumbActiveClass);
+ }
+ } else {
+ for (var i$1 = 0; i$1 < thumbsToActivate; i$1 += 1) {
+ thumbsSwiper.slides.eq(swiper.realIndex + i$1).addClass(thumbActiveClass);
+ }
+ }
+ },
+ };
+ var Thumbs$1 = {
+ name: 'thumbs',
+ params: {
+ thumbs: {
+ swiper: null,
+ slideThumbActiveClass: 'swiper-slide-thumb-active',
+ thumbsContainerClass: 'swiper-container-thumbs',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ thumbs: {
+ swiper: null,
+ init: Thumbs.init.bind(swiper),
+ update: Thumbs.update.bind(swiper),
+ onThumbClick: Thumbs.onThumbClick.bind(swiper),
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ var ref = swiper.params;
+ var thumbs = ref.thumbs;
+ if (!thumbs || !thumbs.swiper) { return; }
+ swiper.thumbs.init();
+ swiper.thumbs.update(true);
+ },
+ slideChange: function slideChange() {
+ var swiper = this;
+ if (!swiper.thumbs.swiper) { return; }
+ swiper.thumbs.update();
+ },
+ update: function update() {
+ var swiper = this;
+ if (!swiper.thumbs.swiper) { return; }
+ swiper.thumbs.update();
+ },
+ resize: function resize() {
+ var swiper = this;
+ if (!swiper.thumbs.swiper) { return; }
+ swiper.thumbs.update();
+ },
+ observerUpdate: function observerUpdate() {
+ var swiper = this;
+ if (!swiper.thumbs.swiper) { return; }
+ swiper.thumbs.update();
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ var thumbsSwiper = swiper.thumbs.swiper;
+ if (!thumbsSwiper) { return; }
+ thumbsSwiper.setTransition(duration);
+ },
+ beforeDestroy: function beforeDestroy() {
+ var swiper = this;
+ var thumbsSwiper = swiper.thumbs.swiper;
+ if (!thumbsSwiper) { return; }
+ if (swiper.thumbs.swiperCreated && thumbsSwiper) {
+ thumbsSwiper.destroy();
+ }
+ },
+ },
+ };
+
+ // Swiper Class
+
+ var components = [
+ Device$1,
+ Support$1,
+ Browser$1,
+ Resize,
+ Observer$1,
+ Virtual$1,
+ Keyboard$1,
+ Mousewheel$1,
+ Navigation$1,
+ Pagination$1,
+ Scrollbar$1,
+ Parallax$1,
+ Zoom$1,
+ Lazy$1,
+ Controller$1,
+ A11y,
+ History$1,
+ HashNavigation$1,
+ Autoplay$1,
+ EffectFade,
+ EffectCube,
+ EffectFlip,
+ EffectCoverflow,
+ Thumbs$1
+ ];
+
+ if (typeof Swiper.use === 'undefined') {
+ Swiper.use = Swiper.Class.use;
+ Swiper.installModule = Swiper.Class.installModule;
+ }
+
+ Swiper.use(components);
+
+ return Swiper;
+
+})));
diff --git a/style.css b/style.css
index 30e458a..d91b146 100755
--- a/style.css
+++ b/style.css
@@ -1,3 +1,4 @@
+
*{
margin:0;
padding:0;
@@ -384,6 +385,17 @@ a:hover{
End Header CSS
=====================*/
+/*===================
+ swiper CSS
+=====================*/
+.swiper-container {
+ width: 100%;
+ height: 600px;
+}
+
+/*===================
+ End swiper CSS
+=====================*/
/*===================
Slider CSS