console
window.slidestalk_sliding = false;
function slidestalkSlide(direction = 'left') {
let animate_class = direction == 'left' ? 'slidestalk-slide-move-left' : 'slidestalk-slide-move-right';
if (!window.slidestalk_sliding) {
window.slidestalk_sliding = true;
let root = document.documentElement;
let ele = document.querySelector('div.slidestalk-slide-container>ul');
let n_offset = parseInt(getComputedStyle(root).getPropertyValue('--slide-offset-x'));
let scale = parseInt(getComputedStyle(root).getPropertyValue('--slide-container-width')) * (direction == 'left' ? -1 : 1);
let slider_limit_width = (ele.children.length - 1) * scale;
if (direction == 'left' && n_offset <= slider_limit_width) {
window.slidestalk_sliding = false;
return false;
} else if (direction == 'right' && n_offset >= 0) {
window.slidestalk_sliding = false;
return false;
} else {
ele.classList.add(animate_class);
ele.addEventListener('animationend', function _listener() {
let cled_offset = n_offset + scale;
root.style.setProperty('--slide-offset-x', cled_offset);
ele.classList.remove(animate_class);
ele.removeEventListener('animationend', _listener, false);
window.slidestalk_sliding = false;
}, false);
}
}
}
function initSlidestalkSlide(width, height) {
let root = document.documentElement;
root.style.setProperty('--slide-container-width', width);
root.style.setProperty('--slide-container-height', height);
document.querySelector('.slidestalk-slide-right-trigger').addEventListener('click', function () {
slidestalkSlide('right');
}, false);
document.querySelector('.slidestalk-slide-left-trigger').addEventListener('click', function () {
slidestalkSlide('left');
}, false);
var box = document.querySelector('div.slidestalk-slide-container');
swipe(box, {
swipeLeft: function () { slidestalkSlide('left'); },
swipeRight: function () { slidestalkSlide('right'); },
swipeDown: function () { },
swipeUp: function () { },
drag: function (e) { }
});
}
initSlidestalkSlide(33, 33);
function swipe(el, options) {
var isMove = false;
var startX = 0;
var startY = 0;
var moveX = 0;
var moveY = 0;
var disX = 0;
var disY = 0;
var data = {
swipeLeft: function () { },
swipeRight: function () { },
swipeDown: function () { },
swipeUp: function () { },
drag: function () { }
}
Object.assign(data, options);
el.addEventListener('touchstart', function (e) {
startX = e.touches[0].pageX;
startY = e.touches[0].pageY;
disX = startX - el.offsetLeft;
disY = startY - el.offsetTop;
});
el.addEventListener('touchmove', function (e) {
isMove = true;
moveX = e.touches[0].pageX;
moveY = e.touches[0].pageY;
e.mation = {
startX: startX,
startY: startY,
moveX: moveX,
moveY: moveY,
disX: disX,
disY: disY
}
data.drag.call(el, e);
});
el.addEventListener('touchend', function (e) {
if (isMove) {
var absX = Math.abs(moveX - startX);
var absY = Math.abs(moveY - startY);
if (absX > absY) {
if (moveX - startX > 0) {
data.swipeRight.call(el, e);
} else {
data.swipeLeft.call(el, e);
}
} else {
if (moveY - start > 0) {
data.swipeDown.call(el, e);
} else {
data.swipeUp.call(el, e);
}
}
}
isMove = false;
});
}
<div class="slidestalk-slide-container">
<ul>
<li>
<img src="http://picture.benshar.com/wp/wp1.jpg" alt="">
<span class="slides-title">第一张</span>
</li>
<li>
<img src="http://picture.benshar.com/wp/wp2.jpg" alt="">
<span class="slides-title">第二张</span>
</li>
<li>
<img src="http://picture.benshar.com/wp/wp3.jpg" alt="">
<span class="slides-title">第三张</span>
</li>
<li>
<img src="http://picture.benshar.com/wp/wp4.jpg" alt="">
<span class="slides-title">第四张</span>
</li>
<li>
<img src="http://picture.benshar.com/wp/wp5.jpg" alt="">
<span class="slides-title">第五张</span>
</li>
<li>
<img src="http://picture.benshar.com/wp/wp6.jpg" alt="">
<span class="slides-title">第六张</span>
</li>
<li>
<img src="http://picture.benshar.com/wp/wp7.jpg" alt="">
<span class="slides-title">第七张</span>
</li>
</ul>
</div>
<button class="slidestalk-slide-right-trigger">Previous</button>
<button class="slidestalk-slide-left-trigger">Next</button>
html,body{
font-size: 10px;
}
:root {
--slide-offset-x: 0;
--slide-container-width: 30;
--slide-container-height: 30;
}
div.slidestalk-slide-container{
padding: 0;
margin: 0;
width: calc(var(--slide-container-width)*1rem);
height: calc(var(--slide-container-height)*1rem);
overflow: hidden;
}
div.slidestalk-slide-container>ul{
list-style: none;
padding: 0;
margin: 0;
display: block;
white-space:nowrap;
margin-left: calc(var(--slide-offset-x)*1rem);
font-size: 0;
width: 100%;
height: 100%;
}
div.slidestalk-slide-container>ul>li {
list-style: none;
padding: 0;
margin: 0;
width: 100%;
height: 100%;
background-color: #eee;
display: inline-block;
}
div.slidestalk-slide-container>ul>li>img{
width: 100%;
height: auto;
padding: 0;
margin: 0;
}
div.slidestalk-slide-container .slides-title{
position: relative;
display: block;
font-size: 2rem;
left: 0rem;
bottom: 3rem;
color: #fff;
font-weight: bold;
background: rgba(0,152,50,0.7);
width: 100%;
text-align: center;
}
.slidestalk-slide-move-left{
animation-name: slidestalk_slide_move_left;
animation-duration: 1s;
animation-timing-function: ease-in-out;
animation-iteration-count: 1;
animation-fill-mode:forwards;
}
@keyframes slidestalk_slide_move_left{
0%{
}
100%{
transform: translateX(calc(var(--slide-container-height)*-1rem));
}
}
@-webkit-keyframes slidestalk_slide_move_left{
0%{
}
100%{
transform: translateX(calc(var(--slide-container-height)*-1rem));
}
}
.slidestalk-slide-move-right{
animation-name: slidestalk_slide_move_right;
animation-duration: 1s;
animation-timing-function: ease-in-out;
animation-iteration-count: 1;
animation-fill-mode:forwards;
}
@keyframes slidestalk_slide_move_right{
0%{
}
100%{
transform: translateX(calc(var(--slide-container-height)*1rem));
}
}
@-webkit-keyframes slidestalk_slide_move_right{
0%{
}
100%{
transform: translateX(calc(var(--slide-container-height)*1rem));
}
}