Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jQuery range slider + carousel price (https://javascript.ru/forum/jquery/71612-jquery-range-slider-carousel-price.html)

Some Way 30.11.2017 22:37

jQuery range slider + carousel price
 
Здравствуйте !

Заранее прошу прощения, за свои познания, по этому и решил обратиться за помощью к вам.

Я, только начал изучение библиотеки а мне дали задание, весьма сложное для начинающего...
Нужно создать range slider с каруселью изображений товаров, и привязать ползунок к ценам, что бы в диапазоне от 50 до 500 при движение ползунка появлялись соответственные товары отсортированные в зависимости от выбранного диапазона цен.

Единственное что пока получилось так это сам ползунок
<script>

	jQuery(function(){

		jQuery("#range").ionRangeSlider({
			type: "double",
		    grid: true,
		    min: 0,
		    max: 500,
		    from: 200,
		    to: 300,
		    step: 100
		});
	});	

		
</script>

Понимаю, что можно сделать так, при выборе диапазона с текстом цены от 50 до 150, будут видны только элементы у которых цена соответствует этим значениям, но как это сделать, уже ломаю голову не первый день :(
Проблема именно в том, что я только начал изучать javascript и попросту знаю всего ничего.

Буду очень признателен за любые фрагменты кода, которые будут понятны для человека моего уровня, а так же ссылки и любую информацию которая поможет в обучение.

Изображение собственно по ссылке.
http://joxi.ru/Q2KLba5f4e1qLA.jpg

рони 30.11.2017 22:51

Цитата:

Сообщение от Some Way
carousel

на чём сделана?

void() 01.12.2017 00:52

Вот пример. У вас скрипт отдает две переменные from и to (диапазон). Его надо отправлять на сервер через AJAX и получать товары, а затем вставлять в слайдер. Так? А если товары типа уже загружены, то перебирать их в цикле и проверять, что если их цена больше from и меньше to, тогда их выводить в слайдер.
Строка 42.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>test</title>
    <link rel="stylesheet" href="css/normalize.css">
    <link rel="stylesheet" href="css/ion.rangeSlider.css">
    <link rel="stylesheet" href="css/ion.rangeSlider.skinFlat.css">
    <script src="js/jquery-1.12.3.min.js"></script>
    <script src="js/ion.rangeSlider.js"></script>
</head>
<body>

    <div style="position: relative; padding: 200px;">
        <div>
            <input type="text" id="range" value="" name="range" />
        </div>
    </div>

    <script>
        $(function () {
            var $range = $("#range");

            $range.ionRangeSlider({
                hide_min_max: true,
                keyboard: true,
                min: 50,
                max: 500,
                from: 100,
                to: 300,
                type: 'double',
                step: 1,
                prefix: "$",
                grid: true
            });

            $range.on("change", function () {
                var $this = $(this),
                from = $this.data("from"),
                to = $this.data("to");

               /* И здесь нужно сформировать AJAX запрос на сервер. */

           });
        });

    </script>

</body>
</html>

Some Way 01.12.2017 16:14

Цитата:

Сообщение от рони
на чём сделана?

Использую для создания slickslider

Цитата:

Сообщение от void()
Вот пример. У вас скрипт отдает две переменные from и to (диапазон). Его надо отправлять на сервер через AJAX и получать товары, а затем вставлять в слайдер. Так? А если товары типа уже загружены, то перебирать их в цикле и проверять, что если их цена больше from и меньше to, тогда их выводить в слайдер.

Есть карусель, в ней-итэмы текстового блока в котором находится изображение и текст, нужно сделать так что бы при выборе от from к to на ползунке, в карусели отображались только те текстовые блоки с изображениями у которых цена(текст "EUR от min50 к max500") соответствует выбранному диапазону на ползунке.
Наверное это вы и имели в виду ?
Картинки хранятся в медиатеке сайта wordpress.
<div class="slick-slide slick-current slick-active" >
<span class="content-section">		  	
<img class="alignnone size-full wp-image-254" src="/wp-content/uploads/galery-9.png">
<p>185×210</p>
<h5>ORIGINAL LARGE Abstract Painting</h5>
<h6>EUR 400</h6>
<br>
</span>
</div>

void() 01.12.2017 17:06

OMG, здесь еще и bootstrap :)

Some Way,
Это не важно, что у вас карусель. Загвоздка в том, что нужно получить как-то карточки товара. Схема примерно такая:

1. Создаем файл php, что-то вроде shopCard.php. Закрываем его от индексации. В нем пишем:
<?php echo ... и отдаем готовый HTML клиенту здесь.


2. К тому коду, который я привел выше, добавляем на 42 строке аякс запрос к php. Что-то вроде этого:

function ajaxGet(){
var request = new XMLHttpRequest();
request.onreadystatechange = function(){
if(request.readyState == 4 && request.status == 200){
OVL.CARUSEL.innerHTML = request.response;
}
}
request.open('GET', 'shopCard.php');
request.send(from, to);
}


Передаем на сервер в параметрах from и to. А в php уже получаем from и to и отбираем картинки, тесты-описания, цену и т.д. и возвращаем готовый HTML. И вставляем его в карусель легким движением руки).

Это просто схема. Попробуйте для начала просто достучаться до сервера, передать ему параметры и получить хоть какой-то ответ. Затем ответ вставьте в карусель. После этого уже можно лучше проработать php. Откуда брать тексты и цены? Где-то в базе лежит, но где? И какова структура у картинок?

Или это я чет не понимаю?)

P.S. Потом еще нужно будет продумать, как не слать много запросов на сервер, нужно сделать задержку (таймаут) после события изменения бегунка. Иначе будет не очень круто, на каждое микродвижение бегунка будут идти запросы. Другой вариант - отсылать по нажатию на кнопку, после того как будет задан диапазон.

Some Way 01.12.2017 17:35

Цитата:

Сообщение от void()
OMG, здесь еще и bootstrap

Большое человеческое спасибо вам за ваш труд, пока слабо понимаю что к чему, но буду пробовать, по другому никак.
Мне казалось, что можно как-то намного проще прикрутить ползунок к слайдеру изображений и отображать контент в соответствии с диапазоном.

void() 01.12.2017 18:23

Вот самый простой пример, который я смог придумать. Но он не подходит для боевого проекта. Если только для себя или в учебных целях.

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Пример</title>
</head>
<body>

	<div class="owl-carousel"></div>
	<button onclick="sort();">Отсортировать</button>
	<script>

		/* Описываем здесь свои данные (например, ссылки на картинки по ключу цены) */
		var imges = {
			50: ['imges1', 'imges2', 'imges3','imges4'],
			100: ['imges5', 'imges6', 'imges7','imges8'],
			250: ['imges9', 'imges10', 'imges11','imges12']
		};

// Получаем owl-carousel в переменную
var carous = document.querySelector('.owl-carousel');

/* Это переменные, которые генерирует бегуток - значения ОТ и ДО */
var iFrom = 50;
var iTo = 250;

/* Перебераем данные и выводим в карусель только те, которые соответствуют требованиям from-to */
function sort(){
	for(var key in imges){
		if(key > iFrom && key < iTo){
			for(var k = 0; k < imges[key].length; k++){
				carous.innerHTML += '<img src="' + imges[key][k] + '">';
			}
		}
	}
}
</script>
</body>
</html>

Some Way 01.12.2017 18:52

Цитата:

Сообщение от void()
Вот самый простой пример, который я смог придумать. Но он не подходит для боевого проекта. Если только для себя или в учебных целях.

Спасибо вам огромное, буду пробовать, почему для проекта не сгодится ?

void() 01.12.2017 19:06

Some Way,
В основном потому, что данные (картинки и цены) прописаны в JS. Строки 13-18. А это значит, что когда в магазин нужно будет добавить новые товары или удалить какие-то из них, то придется изменять вручную и этот JS. То есть не получится так, что добавил товар через админку или изменил цену и все работает, придется еще тут правки вносить.

Some Way 02.12.2017 18:02

Цитата:

Сообщение от void()
То есть не получится так, что добавил товар через админку или изменил цену и все работает, придется еще тут правки вносить.

А если скрывать весь span c class="content-section" в котором есть class="mid" и уже потом привязать значения ползунка к классам.

Примерно с таким кодом моя карусель показывает слайды
<div class="slick-track">
	<div calss="slick-slide">
		<span class="content-section">
			<p><img src="izobrajenie"></p>
			<p>text small</p>
			<h5>LARGE text</h5>
			<h6><span class="mid">EUR 300</span></h6>
		</span>
	</div>
</div>

Но в таком случае придется редактировать не сам JS а слайд (добавлять тексту спан с классом цены например: low,mid,high), верно ?

void() 02.12.2017 22:10

Some Way,
Давайте разберем все по полочкам.

Есть плагин бегунок, плагин карусель и товары.

1. Плагин с бегунком - это черный ящик. Не важно как он работает, самое главное, что он генерирует 2 переменные from и to. Больше от него ничего не нужно.

2. Плагин карусели представляет собой черный ящик с контейнером. Для ovl-карусели это контейнер такого вида:

<div class="owl-carousel"></div>


В этот блок можно положить любые элементы и они автоматически становятся слайдами.

3. Теперь у меня к вам вопрос - где взять товары, которые надо вставить в карусель и отсортировать по критерию from-to?

========

Если вы их уже выводите в карусель, то можно хотя бы так:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>

	<span class="content-section" style="display:block">
		<p><img src="un.jpg"></p>
		<p>text small</p>
		<h5>LARGE text</h5>
		<h6><span class="mid">EUR 600</span></h6>
	</span>

	<span class="content-section" style="display:block">
		<p><img src="un.jpg"></p>
		<p>text small</p>
		<h5>LARGE text</h5>
		<h6><span class="mid">EUR 250</span></h6>
	</span>

	<span class="content-section" style="display:block">
		<p><img src="un.jpg"></p>
		<p>text small</p>
		<h5>LARGE text</h5>
		<h6><span class="mid">EUR 550</span></h6>
	</span>

	<span class="content-section" style="display:block">
		<p><img src="un.jpg"></p>
		<p>text small</p>
		<h5>LARGE text</h5>
		<h6><span class="mid">EUR 250</span></h6>
	</span>

	<script>
		var prise = document.querySelectorAll('.mid');
		var ifrom = 100;
		var ito = 300;
		for(var i = 0; i < prise.length; i++){
			var elemPrise = prise[i].innerHTML.replace('EUR ', '');

				if(elemPrise > ifrom && elemPrise < ito){
				prise[i].parentNode.parentNode.style.display='block';
				}else{
					prise[i].parentNode.parentNode.style.display='none';
				}
		}

	</script>

</body>
</html>

Some Way 02.12.2017 22:32

Цитата:

Сообщение от void()
Теперь у меня к вам вопрос - где взять товары, которые надо вставить в карусель и отсортировать по критерию from-to?

Я,создаю простенький лэндинг(на wordpress) c помощью visual composer.
Соответственно аддоном пихаю в ряд карусель а в карусель уже слайды в которых текстовые блоки с инфой.

Товарами являются простые изображения(из медиатеки сайта), под которыми дописывается нужный текст, на первой странице в конце поста я приложил ссылку с тем как это должно выглядеть.
Возможно есть намного проще решение моей проблемы при помощи этакого аддона, но я их уже перебрал очень много и подходящий не попадался.

Изображение "карточки товара"
http://joxi.ru/VrwbR6VFOLPyoA

void() 02.12.2017 23:44

Кажется понял. То есть вы сразу в карусель пихаете все товары, ок.

Вот рабочий вариант на первый случай.

Зависимости
В принципе все зависимости можно увидеть в разделе <head> - все подключенные файлы. Но на всякий случай.
Версия jQuery jquery-1-12-3
Бегунок - ion.rangeslider
Карусель - owlcarousel2

Пример:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Пример</title>

    <script src="js/jquery-1.12.3.min.js"></script>

    <link rel="stylesheet" href="css/normalize.css">
    <link rel="stylesheet" href="css/ion.rangeSlider.css">
    <link rel="stylesheet" href="css/ion.rangeSlider.skinHTML5.css">
    <script src="js/ion.rangeSlider.js"></script>

    <script src="js/owl.carousel.js"></script>
    <link rel="stylesheet" href="css/owl.carousel.min.css">

</head>
<body>

    <!-- Слайды с товарами -->
    <div class="owl-carousel owl-theme">
        <div class="item">
            <span class="content-section">
                <p><img src="izobrajenie"></p>
                <p>text small</p>
                <h5>LARGE text</h5>
                <h6><span class="mid">EUR 250</span></h6>
            </span>
        </div>

        <div class="item">
            <span class="content-section">
                <p><img src="izobrajenie"></p>
                <p>text small</p>
                <h5>LARGE text</h5>
                <h6><span class="mid">EUR 150</span></h6>
            </span>
        </div>

        <div class="item">
            <span class="content-section">
                <p><img src="izobrajenie"></p>
                <p>text small</p>
                <h5>LARGE text</h5>
                <h6><span class="mid">EUR 200</span></h6>
            </span>
        </div>

        <div class="item">
            <span class="content-section">
                <p><img src="izobrajenie"></p>
                <p>text small</p>
                <h5>LARGE text</h5>
                <h6><span class="mid">EUR 600</span></h6>
            </span>
        </div>
        <div class="item">
            <span class="content-section">
                <p><img src="izobrajenie"></p>
                <p>text small</p>
                <h5>LARGE text</h5>
                <h6><span class="mid">EUR 250</span></h6>
            </span>
        </div>

        <div class="item">
            <span class="content-section">
                <p><img src="izobrajenie"></p>
                <p>text small</p>
                <h5>LARGE text</h5>
                <h6><span class="mid">EUR 130</span></h6>
            </span>
        </div>

        <div class="item">
            <span class="content-section">
                <p><img src="izobrajenie"></p>
                <p>text small</p>
                <h5>LARGE text</h5>
                <h6><span class="mid">EUR 76</span></h6>
            </span>
        </div>

        <div class="item">
            <span class="content-section">
                <p><img src="izobrajenie"></p>
                <p>text small</p>
                <h5>LARGE text</h5>
                <h6><span class="mid">EUR 420</span></h6>
            </span>
        </div>
        
    </div>

    <!-- Бегунок с диапазонами цен -->
    <div style="position: relative; padding: 200px;">
        <div>
            <input type="text" id="range" value="" name="range" />
        </div>
    </div>

    <script>
        $(function () {
            var $range = $("#range");
            $range.ionRangeSlider({
                hide_min_max: true,
                keyboard: true,
                min: 50,
                max: 500,
                from: 100,
                to: 400,
                type: 'double',
                step: 1,
                prefix: "$",
                grid: true
            });
            $range.on("change", function () {
                var $this = $(this),
                from = $this.data("from"),
                to = $this.data("to");

                /* скрипт на первый случай. Его не возбороняется улучшать и совершенствовать :) */
                var prise = document.querySelectorAll('.mid');
                for(var i = 0; i < prise.length; i++){
                    var elemPrise = prise[i].innerHTML.replace('EUR ', '');
                    if(elemPrise > from && elemPrise < to){
                        prise[i].parentNode.parentNode.parentNode.parentNode.style.display='block';
                    }else{
                        prise[i].parentNode.parentNode.parentNode.parentNode.style.display='none';
                    }
                }
            });
        });


        $('.owl-carousel').owlCarousel({
            loop:true,
            margin:10,
            nav:true,
            responsive:{
                0:{
                    items:1
                },
                600:{
                    items:3
                },
                1000:{
                    items:5
                }
            }
        })

    </script>
</body>
</html>

Some Way 03.12.2017 15:00

Цитата:

Сообщение от void()
Кажется понял. То есть вы сразу в карусель пихаете все товары, ок.

Совершенно верно, и хочу добиться результата, что бы ползунок (его диапазон выбора) отображал только те слайды в которых есть h6 с текстом 'EUR от 50 до 500'.
С вашей неоценимой помощью, у меня появился прогресс, последний скрипт начал прятать все слайды :)
Думаю, каким-то образом нужно сортировать слайды только по наявности текста со значением 'EUR и "стоимость слайда"' и показывать те, которые подходят под from и to(их и отображать, без класса тегу h6).
Таким образом при добавление нового слайда, с новой ценой он должен отобразиться при диапазоне выбора в который попадает.

Даже не знаю, может еще так, если у слайда есть текст "EUR" со значением 50, и ползунок установлен на 50 и 100 будут показываться все слайды цена которых не превышает 100, если ползунок "to" стоит на номере 350 а "from" на 250, показываются все слайды с текстом цены "EUR от 250 до 350" ну и так аж до 500.

void() 03.12.2017 16:04

Some Way,

У меня этот скрипт работает корректно, все в динамике обновляется и сортируется. Может у вас разметка айтемов отличается или еще что-то...

Но бегунок срабатывает только после того, как им воспользуются. При загрузке же страницы, можно сортировать вручную, как-то так:

window.onload = function(){ // после загрузки страницы...

var prise = document.querySelectorAll('.mid'); // получаем все дивы, в которых записана цена

for(var i = 0; i < prise.length; i++){ // начинаем их по очереди перебирать...

	var elemPrise = prise[i].innerHTML.replace('EUR ', ''); // Сначала получаем цены без "EUR" - только цифра

	if(elemPrise > 50 && elemPrise < 500){ // Если цифра больше 50 и меньше 500 то -

		prise[i].parentNode.parentNode.parentNode.parentNode.style.display='block'; // показать родителя родителя родителя )
	}else{

		prise[i].parentNode.parentNode.parentNode.parentNode.style.display='none'; // иначе - скрыть
	}
}

}


Залил архив с примером на гугл.диск - так будет проще
https://drive.google.com/file/d/1qoQ...ew?usp=sharing

Some Way 03.12.2017 18:17

Цитата:

Сообщение от void()
Залил архив с примером на гугл.диск - так будет проще

Действительно, все работает !
Но, проблема в том, что карусель я добавляю аддоном в админке( c помощью visual composer), не пишу html, кроме как
<input type="text" id="range" value="" name="range">

Класс .mid, прописывал руками, что вообще не желательно( делал это для того, что бы получить хоть какой-то результат)!
Возможно ли без назначения класса тегу h6 отображать элементы только используя текст(цену) ?

Есть возможность добавлять класс каждому слайду через админку, но основная идея в том, что бы максимально упростить код для человека который слабо разбирается в админке, что бы он с помощью инструкции смог просто добавить новый слайд с ценой и внести его в перечень отображающихся.

З.Ы. Мне очень неудобно перед вами, за потраченое на мою проблему время, но за ваши комментарии в коде огромное спасибо, по скольку я только начал, это просто бесценные вещи(помогает разобраться в синтаксисе и в целом по написание кода, ведь я только открываю для себя такие вещи как "if","else","var")!!!

void() 03.12.2017 19:17

Some Way,
:D меня не напрягает. Все равно я все свободное время трачу на учебники, задачники и курсы по JS и решение самых разных задач по JS :)

Проблема в другом - я вас не понимаю. Не знаю, как обратиться к данным (товарам). Где они у вас лежат, какая у них структура и т.д. Может, кто-нибудь другой еще вам поможет)

Some Way 03.12.2017 19:37

Цитата:

Сообщение от void()
Проблема в другом - я вас не понимаю. Не знаю, как обратиться к данным (товарам). Где они у вас лежат, какая у них структура и т.д.

Все на самом деле проще некуда, наверное я объясняю не правильно...

  1. Есть page builder (visual composer) с помощью него я добавляю контент на страницу (таким методом добавил карусель, засунул туда слайды, они листаются).
  2. Товары, это и есть слайды карусели (добавил новый слайд с изображением и текстом) - получил новый товар.

void() 03.12.2017 19:52

Если слайды так выглядят:

<div class="item">
    <span class="content-section">
       <p><img src="izobrajenie"></p>
        <p>text small</p>
        <h5>LARGE text</h5>
        <h6><span>EUR 130</span></h6>
    </span>
  </div>


Тогда строку:

var prise = document.querySelectorAll('.mid');


Заменить на:

var prise = document.querySelectorAll('.content-section span');


И должно заработать.

Some Way 04.12.2017 15:21

Цитата:

Сообщение от void()
И должно заработать.

Если отдельно, как в вашем архивчике, все работает, но когда пытаюсь подключить к сайту, ничего, скрином прикрепляю вид html, что бы наглядно было видно мой лес дремучий, использовал уже непосредственно слайдер на базе owl-carousel, что бы нам было проще :)
http://joxi.ru/a2XKLJ4H1v8Nvm

Цитата:

Сообщение от void()
var prise = document.querySelectorAll('.content-section span');

Изменял значения на : h6, owl-item, добился только исчезания всех слайдов, но это уже хоть что-то, есть хоть реакция на действие, раньше вообще глухо было.
Перечитываю ваши сообщения, ищу что еще можно изменить.

void() 04.12.2017 15:45

Some Way,
Вот оказывается, что вы так долго скрывали)
Смотрите, вот для вашей структуры - должно работать. На строчке 51 цифры 50 и 500 нужно заменить на переменные from и to. Разберетесь?

Видите, тут есть 3 слайда, но выводятся всего 2, поскольку один из них не удовлетворяет условиям - его цена 650 EUR.

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	
	<div class="owl-stage-outer">

		<div class="owl-item">
			<div class="wpb_text_column">
				<div class="wpb_wrapper">
					<p>200x200</p>
					<h5>Title</h5>
					<h6>EUR 200</h6>
					<p>&nbsp;</p>
				</div>
			</div>
		</div>

		<div class="owl-item">
			<div class="wpb_text_column">
				<div class="wpb_wrapper">
					<p>200x200</p>
					<h5>Title</h5>
					<h6>EUR 240</h6>
					<p>&nbsp;</p>
				</div>
			</div>
		</div>

		<div class="owl-item">
			<div class="wpb_text_column">
				<div class="wpb_wrapper">
					<p>200x200</p>
					<h5>Title</h5>
					<h6>EUR 650</h6>
					<p>&nbsp;</p>
				</div>
			</div>
		</div>

	</div>

	<script>
		window.onload = function(){
			var prise = document.querySelectorAll('.wpb_wrapper h6');
			for(var i = 0; i < prise.length; i++){
				var elemPrise = prise[i].innerHTML.replace('EUR ', '');
				if(elemPrise > 50 && elemPrise < 500){
					prise[i].parentNode.parentNode.parentNode.style.display='block';
				}else{
					prise[i].parentNode.parentNode.parentNode.style.display='none';
				}
			}
		}
	</script>



</body>
</html>

Some Way 04.12.2017 19:35

Цитата:

Сообщение от void()
Смотрите, вот для вашей структуры - должно работать. На строчке 51 цифры 50 и 500 нужно заменить на переменные from и to. Разберетесь?

Видите, тут есть 3 слайда, но выводятся всего 2, поскольку один из них не удовлетворяет условиям - его цена 650 EUR.


C 51 строкой разобрался, существенные изменения произошли
<script>
		$(function () {
			var $range = $("#range");
			$range.ionRangeSlider({
				hide_min_max: true,
				keyboard: true,
				min: 50,
				max: 500,
				from: 250,
				to: 350,
				type: 'double',
				step: 50,
				grid: true
			});
			$range.on("change", function () {
				var $this = $(this),
				from = $this.data("from"),
				to = $this.data("to");

				/* скрипт на первый случай. Его не возбороняется улучшать и совершенствовать :) */
				var prise = document.querySelectorAll('.wpb_wrapper h6');
				for(var i = 0; i < prise.length; i++){
					var elemPrise = prise[i].innerHTML.replace('EUR ', '');
					if(elemPrise > from && elemPrise < to){
						prise[i].parentNode.parentNode.parentNode.style.display='block';
					}else{
						prise[i].parentNode.parentNode.parentNode.style.display='none';
					}
				}
			});
		});

</script>

Но, у меня в наличие слайды с ценой от 100 до 500, каждого слайда по 4е штуки и при изменение ползунка все слайды с ценой в 500 перестают отображаться, даже при выборе максимального значения.

void() 04.12.2017 19:42

Some Way,
Логично. На той же строке нужно заменить знаки "больше" и "меньше" ( > < ) на "больше или равно" и "меньше или равно" (>= и <=). Ну, в общем так:

if(elemPrise >= from && elemPrise <= to){

Some Way 04.12.2017 20:13

Цитата:

Сообщение от void()
Логично.

Да, вы правы, извините. Третие сутки без сна и познания слабоваты что бы сразу очевидные вещи замечать.
При изменение параметров самого ползунка начинается каша :(
Но я вам очень благодарен, плюсики в карму уже поставил.
Проблемы только с анимацией карусели, работает непонятно теперь, думаю, что нужно искать файл и исправлять саму анимацию карусельки...
Кстати, вы говорили что тратите много свободного времени на изучение javascript, посоветуете "руководство для чайников ?"

void() 05.12.2017 00:16

Some Way,
Хорошо план Б.
Код не претендует на красивое решение, но зато вроде работает отлично - никаких проблем ни с анимцией ни с чем-то еще. Его можно улучшить, если все ок.

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<link href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.theme.default.min.css" rel="stylesheet"/>
	<link href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.carousel.css" rel="stylesheet"/>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/owl.carousel.min.js"></script>
	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.2.0/css/ion.rangeSlider.css">
	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.2.0/css/ion.rangeSlider.skinHTML5.css">
	<script src="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.2.0/js/ion.rangeSlider.min.js"></script>
	<style>.owl-item{background-color: #c0bdbd;}</style>
</head>
<body>

	<div id="avatar-carousel" class="owl-carousel">

		<div class="owl-item">
			<div class="wpb_text_column">
				<div class="wpb_wrapper">
					<p>200x200</p>
					<h5>Title</h5>
					<h6>EUR 70</h6>
					<p>&nbsp;</p>
				</div>
			</div>
		</div>

		<div class="owl-item">
			<div class="wpb_text_column">
				<div class="wpb_wrapper">
					<p>200x200</p>
					<h5>Title</h5>
					<h6>EUR 90</h6>
					<p>&nbsp;</p>
				</div>
			</div>
		</div>

		<div class="owl-item">
			<div class="wpb_text_column">
				<div class="wpb_wrapper">
					<p>200x200</p>
					<h5>Title</h5>
					<h6>EUR 230</h6>
					<p>&nbsp;</p>
				</div>
			</div>
		</div>

		<div class="owl-item">
			<div class="wpb_text_column">
				<div class="wpb_wrapper">
					<p>200x200</p>
					<h5>Title</h5>
					<h6>EUR 210</h6>
					<p>&nbsp;</p>
				</div>
			</div>
		</div>

		<div class="owl-item">
			<div class="wpb_text_column">
				<div class="wpb_wrapper">
					<p>200x200</p>
					<h5>Title</h5>
					<h6>EUR 270</h6>
					<p>&nbsp;</p>
				</div>
			</div>
		</div>

	</div>

	<div style="position: relative; padding: 200px;">
		<div>
			<input type="text" id="range" value="" name="range" />
		</div>
	</div>


	<script>
		var arr = [];
		var iFrom = 50;
		var iTo = 500;

		/* формируется массив с товарами */
		window.onload = function(){
			var p = document.querySelectorAll('.wpb_wrapper p');
			var h5 = document.querySelectorAll('.wpb_wrapper h5');
			var h6 = document.querySelectorAll('.wpb_wrapper h6');

			for(var i = 0; i < p.length; i++){
				var temp = {};
				if(i%2 == 0){
					temp.p = p[i].innerHTML;
				}else{
					temp.p = p[i+1].innerHTML;
				}
				temp.h5 = h5[i].innerHTML;
				temp.h6 = h6[i].innerHTML.replace('EUR ', '');
				arr[arr.length] = temp;
			}
		}

		/* отбор товаров, соответствующих критериям */
		function sort(from, to) {
			var from = from;
			var to = to;
			var good = [];
			for(var i = 0; i < arr.length; i++){
				var x = arr[i]['h6'];
				if(x >= from && x <= to){
					good[good.length] = arr[i];
				}
			}
			add(good);
		}

		// добаавление товаров в карусель
		function add(good) {
			var good = good;

			for(var i = 0; i < good.length; i++){
				$('#avatar-carousel').trigger('add.owl.carousel', [
					'<div class="owl-item"><div class="wpb_text_column"><div class="wpb_wrapper">' +
					'<p>' + good[i]['p'] + '</p>' +
					'<h5>' + good[i]['h5'] + '</h5>' +
					'<h6> EUR ' +  good[i]['h6'] + '</h6>' +
					'<p>&nbsp;</p></div></div></div>'
					]).trigger('refresh.owl.carousel');
			}
		};

		// удаление товаров из карусели
		function del() {
			var el = document.querySelectorAll('.wpb_wrapper');
			for(var i = 0; i < el.length; i++){
				$('#avatar-carousel').trigger('remove.owl.carousel',i).trigger('refresh.owl.carousel');
			}
		}


		/* Инициализация карусели */
		$('#avatar-carousel').owlCarousel({
			loop:true,
			lazyLoad:true,
			margin:10,
			dots: false,
			nav:true,
			responsive:{
				0:{
					items:1
				},
				600:{
					items:3
				},
				1000:{
					items:5
				}
			}
		})


		var globalTimeout = null; 

		$(function () {
			var $range = $("#range");
			$range.ionRangeSlider({
				hide_min_max: true,
				keyboard: true,
				min: 50,
				max: 500,
				from: 50,
				to: 500,
				type: 'double',
				step: 1,
				prefix: "$",
				grid: true
			});
			$range.on("change", function () {
				var $this = $(this),
				from = $this.data("from"),
				to = $this.data("to");

				
				if (globalTimeout != null) {
					clearTimeout(globalTimeout);
				}
				globalTimeout = setTimeout(function() {
					globalTimeout = null;  
					del();
					sort(from, to);
				}, 2000);  

			});
		});
	</script>
</body>
</html>

void() 05.12.2017 00:21

Лучше этих ресурсов трудно найти:
Учебник javascript.ru
Задачник Трепачева

Some Way 05.12.2017 16:46

Прошу прощения, начал сбоить плагин Easy Modal
http://joxi.ru/EA4Xg3QFw8J0XA
При отключение библиотеки JQuery, плагин работает нормально, но ползунок не инициализируется
Сам скрипт подключаю перед </body> в таком виде
<script>
	$(function () {
		var $range = $("#range");
			$range.ionRangeSlider({
				hide_min_max: true,
				keyboard: true,
				min: 100,
				max: 500,
				from: 250,
				to: 350,
				type: 'double',
				step: 1,
				grid: true
		});
			$range.on("change", function () {
				var $this = $(this),
				from = $this.data("from"),
				to = $this.data("to");

				/* скрипт на первый случай. Его не возбороняется улучшать и совершенствовать :) */
				var prise = document.querySelectorAll('.wpb_wrapper h6');
				for(var i = 0; i < prise.length; i++){
					var elemPrise = prise[i].innerHTML.replace('EUR', '');
					if(elemPrise >= from && elemPrise <= to){
						prise[i].parentNode.parentNode.parentNode.style.display='block';
					}else{
						prise[i].parentNode.parentNode.parentNode.style.display='none';
					}
				}
			});
	});
</script>


Структура немножко вот так :)
<div class="owl-item active center">
 <div class="wpb_text_column wpb_content_element ">
  <div class="wpb_wrapper">

   <p><img src="/wp-content/uploads/galery-9.png"></p>
   <p>200×200</p>
   <h5>LARGE Title open</h5>
   <h6>EUR 10</h6>

  </div>
 </div>
</div>

void() 05.12.2017 18:19

Some Way,
не могу догадаться, почему сбоит Easy Modal.

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
	<link href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.theme.default.min.css" rel="stylesheet"/>
	<link href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.carousel.css" rel="stylesheet"/>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/owl.carousel.min.js"></script>
	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.2.0/css/ion.rangeSlider.css">
	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.2.0/css/ion.rangeSlider.skinHTML5.css">
	<script src="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.2.0/js/ion.rangeSlider.min.js"></script>
	<style>.owl-item{background-color: #c0bdbd;} img{width: 50px;}</style>
</head>
<body>

	<div id="avatar-carousel" class="owl-carousel">

		<div class="owl-item active center">
			<div class="wpb_text_column wpb_content_element ">
				<div class="wpb_wrapper">
					<p><img src="http://s1.iconbird.com/ico/2013/12/539/w256h2561387214964Photos.png"></p>
					<p>200×200</p>
					<h5>LARGE Title open</h5>
					<h6><span>EUR 100</span></h6>
				</div>
			</div>
		</div>

		<div class="owl-item active center">
			<div class="wpb_text_column wpb_content_element ">
				<div class="wpb_wrapper">
					<p><img src="http://s1.iconbird.com/ico/2013/12/539/w256h2561387214964Photos.png"></p>
					<p>200×200</p>
					<h5>LARGE Title open</h5>
					<h6><span>EUR 120</span></h6>
				</div>
			</div>
		</div>

		<div class="owl-item active center">
			<div class="wpb_text_column wpb_content_element ">
				<div class="wpb_wrapper">
					<p><img src="http://s1.iconbird.com/ico/2013/12/539/w256h2561387214964Photos.png"></p>
					<p>200×200</p>
					<h5>LARGE Title open</h5>
					<h6><span>EUR 180</span></h6>
				</div>
			</div>
		</div>

		<div class="owl-item active center">
			<div class="wpb_text_column wpb_content_element ">
				<div class="wpb_wrapper">
					<p><img src="http://s1.iconbird.com/ico/2013/12/539/w256h2561387214964Photos.png"></p>
					<p>200×200</p>
					<h5>LARGE Title open</h5>
					<h6><span>EUR 250</span></h6>
				</div>
			</div>
		</div>

		<div class="owl-item active center">
			<div class="wpb_text_column wpb_content_element ">
				<div class="wpb_wrapper">
					<p><img src="http://s1.iconbird.com/ico/2013/12/539/w256h2561387214964Photos.png"></p>
					<p>200×200</p>
					<h5>LARGE Title open</h5>
					<h6><span>EUR 350</span></h6>
				</div>
			</div>
		</div>

		<div class="owl-item active center">
			<div class="wpb_text_column wpb_content_element ">
				<div class="wpb_wrapper">
					<p><img src="http://s1.iconbird.com/ico/2013/12/539/w256h2561387214964Photos.png"></p>
					<p>200×200</p>
					<h5>LARGE Title open</h5>
					<h6><span>EUR 450</span></h6>
				</div>
			</div>
		</div>

	</div>

	<div style="position: relative; padding: 50px 300px;">
		<div>
			<input type="text" id="range" value="" name="range" />
		</div>
	</div>

	<script>
	// тут будут храниться распарсенные товары
		var arr = [];

		/* формируется массив с товарами */
		window.onload = function(){
			var p = $('.wpb_wrapper p');
			var h5 = $('.wpb_wrapper h5');
			var h6 = $('.wpb_wrapper h6 span');

			for(var i = 0; i < p.length; i++){
				var temp = {};
				if(i%2 == 0){
					temp.img = p[i].innerHTML;
					temp.p = p[i+1].innerHTML;
				}else{
					temp.img = p[i+1].innerHTML;
					temp.p = p[i].innerHTML;
				}
				temp.h5 = h5[i].innerHTML;
				temp.h6 = h6[i].innerHTML.replace('EUR ', '');
				arr[arr.length] = temp;
				console.log(arr);
			}
		}

		/* отбор товаров, соответствующих критериям */
		function sort(from, to) {
			var from = from;
			var to = to;
			var good = [];
			for(var i = 0; i < arr.length; i++){
				var x = arr[i]['h6'];
				if(x >= from && x <= to){
					good[good.length] = arr[i];
				}
			}
			add(good);
		}

		// добаавление товаров в карусель
		function add(good) {
			var good = good;

			for(var i = 0; i < good.length; i++){
				$('#avatar-carousel').trigger('add.owl.carousel', [
					'<div class="owl-item active center"><div class="wpb_text_column wpb_content_element "><div class="wpb_wrapper">' +
					'<p>' + good[i]['img'] + '</p>' +
					'<p>' + good[i]['p'] +'</p>' +
					'<h5>' + good[i]['h5'] + '</h5>' +
					'<h6><span>EUR ' +  good[i]['h6'] + '</span></h6>' +
					'</div></div></div>'
					]).trigger('refresh.owl.carousel');
			}
		};

		// удаление товаров из карусели
		function del() {
			var el = document.querySelectorAll('.wpb_wrapper');
			for(var i = 0; i < el.length; i++){
				$('#avatar-carousel').trigger('remove.owl.carousel',i).trigger('refresh.owl.carousel');
			}
		}

		/* Инициализация карусели */
		$('#avatar-carousel').owlCarousel({
			loop:true,
			lazyLoad:true,
			margin:10,
			dots: false,
			responsive:{
				0:{
					items:1
				},
				600:{
					items:3
				},
				1000:{
					items:5
				}
			}
		})

 // переменная нужна для таймера
		var globalTimeout = null;

// инициализация бегунка
		$(function () {
			var $range = $("#range");
			$range.ionRangeSlider({
				hide_min_max: true,
				keyboard: true,
				min: 50,
				max: 500,
				from: 50,
				to: 500,
				type: 'double',
				step: 1,
				prefix: "$",
				grid: true
			});
			$range.on("change", function () {
				var $this = $(this),
				from = $this.data("from"),
				to = $this.data("to");

				// задержка после задания диапазона 1,5 секунды
				if (globalTimeout != null) {
					clearTimeout(globalTimeout);
				}
				globalTimeout = setTimeout(function() {
					globalTimeout = null;  
					del();
					sort(from, to);
				}, 1500);  

			});
		});
	</script>
</body>
</html>

Some Way 05.12.2017 19:23

Цитата:

Сообщение от void()
не могу догадаться, почему сбоит Easy Modal.

Скорее всего сам плагин подключает jQuery и + ко всему я руками подключаю туже библиотеку, для работы ползунка, на этом этапе и происходит конфликт, убираю вручную прописанное подключение jQuery и плагин работает, но перестает работать ползунок и наоборот(
http://joxi.ru/82QObxZij0QQvr

Стало намного лучше, это заметно, но появился новый бичь :(
http://joxi.ru/DmBzwMlfwnVV1m
http://joxi.ru/YmE9b6Ku01dZdm

void() 05.12.2017 20:43

Some Way,
Была проблема в том, что owl-карусель клонирует товары, чтоб сделать цикл из них. И эти клоны надо изначально отсеивать.

Архив на google.doc


Часовой пояс GMT +3, время: 06:20.