 
			
				14.12.2019, 17:34
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 15.10.2014 
					
					
					
						Сообщений: 255
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Посоветуйте простой touch слайдер картинок без внешних библиотек и фреймворков.
			 
			
		
		
		
		Никак не могу найти нормальный  простой слайдер картинок для телефона. В основном есть какие-то супер огромные полуплатные библиотеки как Swiper.js и другие.
 
Мне бы подошло что-то такое  https://www.cssscript.com/draggable-...ider-carousel/ , но с ним можно только один слайдер на страницу из-за того, что элементы привязываются по id. Возможно кто-то встречал что-то симпатичное, но с привязкой на class?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.12.2019, 17:51
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от sovsem-nub
			
		
	 | 
 
	| 
		но с ним можно только один слайдер на страницу из-за того, что элементы привязываются по id
	 | 
 
	
 
 что мешает сделать цикл по всем слайдерам?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.12.2019, 18:00
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		sovsem-nub, 
 было 
 
var slider = document.getElementById('slider'),
    sliderItems = document.getElementById('items'),
    prev = document.getElementById('prev'),
    next = document.getElementById('next');
slide(slider, sliderItems, prev, next);
стало
 
document.querySelectorAll('.slider').forEach(function(slider) {
var sliderItems = slider.querySelector('.items'),
    prev = slider.querySelector('.prev'),
    next = slider.querySelector('.next');
    slide(slider, sliderItems, prev, next);
})
в css заменить все # на точку и 
всё!!!  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.12.2019, 18:11
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Draggable & Touch-friendly Slider Carousel In Pure JS
			 
			
		
		
		
		sovsem-nub,
 
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
@import url("https://fonts.googleapis.com/css?family=Montserrat");
* {
  box-sizing: border-box;
}
body {
  height: 100%;
  background: #efefef;
  color: #333;
  font-family: 'Montserrat', sans-serif;
  font-weight: 600;
  text-align: center;
  letter-spacing: 0.15em;
  font-size: 18px;
}
.slider {
  position:  relative;
  margin: 20px auto;
  width: 400px;
  height: 300px;
  box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.2);
}
.wrapper {
  overflow: hidden;
  position: relative;
  background: #222;
  z-index: 1;
}
.items {
  width: 10000px;
  position: relative;
  top: 0;
  left: -400px;
}
.items.shifting {
  transition: left .2s ease-out;
}
.slide {
  width: 400px;
  height: 300px;
  cursor: pointer;
  float: left;
  display: flex;
  flex-direction: column;
  justify-content: center;
  transition: all 1s;
  position: relative;
  background: #FFCF47;
}
.slider.loaded .slide:nth-child(2),
.slider.loaded .slide:nth-child(7) {
  background: #FFCF47;
}
.slider.loaded .slide:nth-child(1),
.slider.loaded .slide:nth-child(6) {
  background: #7ADCEF;
}
.slider.loaded .slide:nth-child(3) {
  background: #F97C68;
}
.slider.loaded .slide:nth-child(4) {
  background: #a78df5;
}
.slider.loaded .slide:nth-child(5) {
  background: #ff8686;
}
.control {
  position: absolute;
  top: 50%;
  width: 40px;
  height: 40px;
  background: #fff;
  border-radius: 20px;
  margin-top: -20px;
  box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3);
  z-index: 2;
}
.prev,
.next {
  background-size: 22px;
  background-position: center;
  background-repeat: no-repeat;
  cursor: pointer;
}
.prev {
  background-image: url(https://cdn0.iconfinder.com/data/icons/navigation-set-arrows-part-one/32/ChevronLeft-512.png);
  left: -20px;
}
.next {
  background-image: url(https://cdn0.iconfinder.com/data/icons/navigation-set-arrows-part-one/32/ChevronRight-512.png);
  right: -20px;
}
.prev:active,
.next:active {
  transform: scale(0.8);
}
  </style>
</head>
<body>
<div  class="slider">
  <div class="wrapper">
    <div id="items" class="items">
      <span class="slide">Slide 1</span>
      <span class="slide">Slide 2</span>
      <span class="slide">Slide 3</span>
      <span class="slide">Slide 4</span>
      <span class="slide">Slide 5</span>
    </div>
  </div>
  <a  class="control prev"></a>
  <a  class="control next"></a>
</div>
<div  class="slider">
  <div class="wrapper">
    <div  class="items">
      <span class="slide">Slide 1</span>
      <span class="slide">Slide 2</span>
      <span class="slide">Slide 3</span>
      <span class="slide">Slide 4</span>
      <span class="slide">Slide 5</span>
    </div>
  </div>
  <a  class="control prev"></a>
  <a  class="control next"></a>
</div>
<div  class="slider">
  <div class="wrapper">
    <div  class="items">
      <span class="slide">Slide 1</span>
      <span class="slide">Slide 2</span>
      <span class="slide">Slide 3</span>
      <span class="slide">Slide 4</span>
      <span class="slide">Slide 5</span>
    </div>
  </div>
  <a  class="control prev"></a>
  <a  class="control next"></a>
</div>
  <script>
document.querySelectorAll('.slider').forEach(function(slider) {
var sliderItems = slider.querySelector('.items'),
    prev = slider.querySelector('.prev'),
    next = slider.querySelector('.next');
    slide(slider, sliderItems, prev, next);
})
function slide(wrapper, items, prev, next) {
  var posX1 = 0,
      posX2 = 0,
      posInitial,
      posFinal,
      threshold = 100,
      slides = items.getElementsByClassName('slide'),
      slidesLength = slides.length,
      slideSize = items.getElementsByClassName('slide')[0].offsetWidth,
      firstSlide = slides[0],
      lastSlide = slides[slidesLength - 1],
      cloneFirst = firstSlide.cloneNode(true),
      cloneLast = lastSlide.cloneNode(true),
      index = 0,
      allowShift = true;
  // Clone first and last slide
  items.appendChild(cloneFirst);
  items.insertBefore(cloneLast, firstSlide);
  wrapper.classList.add('loaded');
  // Mouse and Touch events
  items.onmousedown = dragStart;
  // Touch events
  items.addEventListener('touchstart', dragStart);
  items.addEventListener('touchend', dragEnd);
  items.addEventListener('touchmove', dragAction);
  // Click events
  prev.addEventListener('click', function () { shiftSlide(-1) });
  next.addEventListener('click', function () { shiftSlide(1) });
  // Transition events
  items.addEventListener('transitionend', checkIndex);
  function dragStart (e) {
    e = e || window.event;
    e.preventDefault();
    posInitial = items.offsetLeft;
    if (e.type == 'touchstart') {
      posX1 = e.touches[0].clientX;
    } else {
      posX1 = e.clientX;
      document.onmouseup = dragEnd;
      document.onmousemove = dragAction;
    }
  }
  function dragAction (e) {
    e = e || window.event;
    if (e.type == 'touchmove') {
      posX2 = posX1 - e.touches[0].clientX;
      posX1 = e.touches[0].clientX;
    } else {
      posX2 = posX1 - e.clientX;
      posX1 = e.clientX;
    }
    items.style.left = (items.offsetLeft - posX2) + "px";
  }
  function dragEnd (e) {
    posFinal = items.offsetLeft;
    if (posFinal - posInitial < -threshold) {
      shiftSlide(1, 'drag');
    } else if (posFinal - posInitial > threshold) {
      shiftSlide(-1, 'drag');
    } else {
      items.style.left = (posInitial) + "px";
    }
    document.onmouseup = null;
    document.onmousemove = null;
  }
  function shiftSlide(dir, action) {
    items.classList.add('shifting');
    if (allowShift) {
      if (!action) { posInitial = items.offsetLeft; }
      if (dir == 1) {
        items.style.left = (posInitial - slideSize) + "px";
        index++;
      } else if (dir == -1) {
        items.style.left = (posInitial + slideSize) + "px";
        index--;
      }
    };
    allowShift = false;
  }
  function checkIndex (){
    items.classList.remove('shifting');
    if (index == -1) {
      items.style.left = -(slidesLength * slideSize) + "px";
      index = slidesLength - 1;
    }
    if (index == slidesLength) {
      items.style.left = -(1 * slideSize) + "px";
      index = 0;
    }
    allowShift = true;
  }
}
  </script>
</body>
</html>
 
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.12.2019, 21:26
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 15.10.2014 
					
					
					
						Сообщений: 255
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Рони, большое спасибо.  Всё работает и даже можно разобраться. 
 
если запускать код несколько раз на странице, можно пропускать loaded 
document.querySelectorAll('.slider:not(.loaded)').  forEach(function(slider) {.... 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.12.2019, 01:23
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от sovsem-nub
			
		
	 | 
 
	| 
		если запускать код несколько раз на странице
	 | 
 
	
 
 зачем?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.12.2019, 09:53
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 15.10.2014 
					
					
					
						Сообщений: 255
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от рони
			 
		
	 | 
 
	| 
		зачем?
	 | 
 
	
 
 
	
 
	
		
			Сообщение от рони
			 
		
	 | 
 
	| 
		зачем?
	 | 
 
	
 
 потому что при загрузке страницы этого слайдера нет . js вырисовывает html код этого слайдера, а потом запускает этот код на поиск слайдеров на странице. В общем это не важно.
 
У этого слайдера есть недостаток. Он плохо тянется.  
Вставил его на страничку и  попробовал все размеры сделать В% через css стили  тут
хотел чтобы картинка была максимум по высоте окна, а ширина подгонялась, но не была шире экрана. Это работает, если ширину экрана не менять. Но если перевернуть телефон на бок, то весь слайдер сдвигается.
 
это связано с тем, что все размеры (таскания и ширины экрана) в пикселях а не в %.
 
как вот тут
 
items.style.left = (posInitial - slideSize) + "px";
 как posInitial  сделать в %? если slideSize всегда равен 100% ? а не slideSize = items.getElementsByClassName('slide')[0].offsetWidth,  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.12.2019, 10:23
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 15.10.2014 
					
					
					
						Сообщений: 255
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 И второй недостаток, что палец на картинке работает только вправо и влево. А нужно чтобы, если  пальцем вверх или вниз,  был скрол страницы.  так себе слайдер.... 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.12.2019, 19:54
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 15.10.2014 
					
					
					
						Сообщений: 255
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		забил на этот слайдер взял  другой  
вроде нормальный, единственный минус - на нем не срабатывает тач двумя пальцами. То  есть в любом другом месте можно увеличение сделать пальцами, а на самой картинке нет.     буду думать  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |