#javascript #html #css #flexbox
#javascript #HTML #css #flexbox
Вопрос:
У меня есть слайдер flexbox, над которым я работаю, но js не работает гладко. Функция перетаскивания работает близко к тому, как я этого хочу, но содержимое прыгает / дрожит при перетаскивании. Не уверен, связана ли проблема с js или из-за конфликта с CSS. Или, может быть, мне следует использовать разные прослушиватели событий?
Самый последний фрагмент js — это функция перетаскивания. Спасибо
let container = document.querySelector('.container');
let sliderWrapper = document.querySelector('.slider-wrapper');
let pressed = false;
let startx;
let x;
container.addEventListener('mousedown', (e)=>{
pressed = true;
startx = e.offsetX - sliderWrapper.offsetLeft;
container.style.cursor = 'grabbing'
});
container.addEventListener('mouseenter', ()=>{
container.style.cursor = 'grab'
});
container.addEventListener('mouseup', ()=>{
container.style.cursor = 'grab'
});
window.addEventListener('mouseup',()=>{
pressed = false;
});
container.addEventListener('mousemove', (e)=>{
if(!pressed) return;
e.preventDefault();
x = e.offsetX
sliderWrapper.style.left = `${x - startx}px`;
});
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
width: 100vw;
height: 100vh;
}
.gallery {
position: relative;
height: calc(100vh - 200px);
width: 90vw;
left: 05vw;
top: 100px;
overflow-x: hidden;
}
.container {
height: inherit;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
}
.slider-wrapper{
display: flex;
position: absolute;
height: inherit;
}
.swiper-slide {
height: 100%;
pointer-events: none;
}
.element{
height: 100%;
}
<body>
<div class="gallery">
<div class="container">
<div class="slider-wrapper">
<div class="swiper-slide">
<img class="element" src="https://via.placeholder.com/150/f19.png/mmm">
</div>
<div class="swiper-slide">
<img class="element" src="https://via.placeholder.com/300/f71.png/mmm">
</div>
<div class="swiper-slide">
<img class="element" src="https://via.placeholder.com/300/09f.png/mmm">
</div>
</div>
</div>
</div>
<script src="slider.js"></script>
</body>
</html>
Ответ №1:
Я не говорю, что мне нравится ваш код или он волшебным образом будет работать, как ваша мечта, но изменение x = e.offsetX
на x = e.clientX
сработало для меня.
Комментарии:
1. спасибо, это исправило. У вас есть какие-либо идеи, почему моя функция не будет работать со смещением?
2.
e.offsetX
выдавал целочисленные значения вместо двойных, что, на мой взгляд, не должно этого делать, но это экспериментальная технология …. так что я бы все равно ее не использовал.