Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Зависимость шага 2го ползунка от позиции первого (https://javascript.ru/forum/jquery/62735-zavisimost-shaga-2go-polzunka-ot-pozicii-pervogo.html)

fos 26.04.2016 13:39

Зависимость шага 2го ползунка от позиции первого
 
Заранее извиняюсь за криворукость - совершенно не знаю яву.. но старательно учусь :)

В идеале необходимо сделать так:

2 ползунка
slider -главный, slider2 - "в подчинении"

1 имеет шкалы для перемещения 30,40,50,70,80,90,100,120,150 <- задачу, по изменению линейного шага я преодолел...
2 меняет свои шкалы в зависимости от позиции 1го ползуна.. т.е.:
при текущем значении 1 = 30, шкалы у 2го = 30,40, при 1 = 40 - у второго = 30,40,60 и т.д. для разных позиций разные комбинации.

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

Пока вышла вот такая муть...
https://gist.github.com/anonymous/0e...74379b062f0648

Помогите советом - буду признателен!

laimas 26.04.2016 15:45

А зачем первый задает диапазон, с какой целью?

рони 26.04.2016 15:47

slider зависимый ползунок
 
fos,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  body {
  font-family: sans-serif;
  font-size: 12px;
}

#amount, #amount2 {
  font-size: 22px;
  font-weight: bold;
  border:none;
  color: #ff5555;
  background: none;

}
#slider, #slider2{
   width: 300px;
}

 </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js">
</script>
  <script>
$(function() {
    var steps = [30, 40, 50, 60, 70, 80, 90, 100, 120, 150];

    function comb(a) {
        return steps.filter(function(b, i) {
            return i < a + 2 && i > a - 2
        })
    }
    var steps2 = comb(0);
    $("#slider2").slider({
        value: 0,
        min: 0,
        max: steps2.length - 1,
        step: 1,
        slide: function(event, ui) {
            $("#amount2").val(steps2[ui.value])
        },
        change: function(event, ui) {
            $("#amount2").val(steps2[ui.value])
        }
    });
    $("#slider").slider({
        value: 0,
        min: 0,
        max: steps.length - 1,
        step: 1,
        slide: function(event, ui) {
            $("#amount").val(steps[ui.value]);
            steps2 = comb(ui.value);
            $("#slider2").slider("option",
                "max", steps2.length - 1);
            $("#slider2").slider("option", "value", steps2.indexOf(steps[ui.value]))
        },
        change: function(event, ui) {
            $("#amount").val(steps[ui.value]);
            steps2 = comb(ui.value);
            $("#slider2").slider("option", "max", steps2.length - 1);
            $("#slider2").slider("option", "value", steps2.indexOf(steps[ui.value]))
        }
    });
    $("#slider").slider("option", "value", 0)
});
  </script>
</head>

<body>
    <p>
  <input type="text" id="amount" readonly>
</p>

<div id="slider"></div>

<p>
  <input type="text" id="amount2" readonly>
</p>

<div id="slider2"></div>

</body>
</html>

fos 26.04.2016 15:58

Цитата:

Сообщение от laimas (Сообщение 415046)
А зачем первый задает диапазон, с какой целью?

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

fos 26.04.2016 16:00

Цитата:

Сообщение от рони
slider зависимый ползунок
fos,

Спасибо, ГУРУ! :) Еще один этап преодолен... буду дальше углубляться в допил задумки :)

fos 26.04.2016 16:10

Цитата:

Сообщение от рони
slider зависимый ползунок
fos,

балин.. я не точно указал желаемый результат в итоге не то получилось... для определенной позиции 1го необходимо задать конкретные значения шкал для 2го и они не связаны логически.. т.е. для 30 = 30,40, для 40 = 30,40,60, для 50 = 50,70, для 60 = 40, 60, 90 и т.д... в результате каждой кобминации необходимо присвоить свое цифровое значение, которое будет выводиться в качестве ценника.. т.е. 30 + 30 = 950, 30+40 = 1095, 50+70 = 2230 и т.д...
Видимо я слишком дофига хочу :( Я уже подумываю над тем, чтобы не загонятся и сделать тупо кликабельное перечисление всех размером без каких либо ползунков.. но оно даже с моей фантазией не поддается красивой визуализации, возможной с ползунками...

laimas 26.04.2016 16:11

Цитата:

Сообщение от fos
C целью того, чтобы доступные комбинации сами себя в итоге не поубивали до 2-3 значений в обоих направлениях.

Что-то не осилил. :)

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

Да в общем то и плагины диапазонов есть, где ну никак не напутать.

рони 26.04.2016 16:24

Цитата:

Сообщение от fos
т.е. для 30 = 30,40, для 40 = 30,40,60, для 50 = 50,70, для 60 = 40, 60, 90

нет проблем , в коде мало что изменится. пишите обьект для всего диапазона.
Цитата:

Сообщение от fos
в результате каждой кобминации необходимо присвоить свое цифровое значение, которое будет выводиться в качестве ценника.. т.е. 30 + 30 = 950, 30+40 = 1095, 50+70 = 2230 и т.д...

не осилил. попытайтесь дополнить информацию.

fos 26.04.2016 16:31

Цитата:

Сообщение от laimas (Сообщение 415054)
Что-то не осилил. :)

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

Да в общем то и плагины диапазонов есть, где ну никак не напутать.

Тут я не осилил :)))

Чтобы более понятно было: нужно сделать калькулятор расчета стоимости портрета. Всего около 15 различных размеров, каждый из них стоит определенную деньгу, которую не получится в формулу уместить по параметру площади и т.д., т.е. втупую нужно каждому размеру задавать отдельный ценник, а выводить 15 размеров полотенцем на экран - юзер глаза себе выколет и убежит :) в выпадающий список прятать - тоже коряво.. ползунки идеально, но дефолтом доступен только шаг и макс,мин =\

Плагинов несколько качал, прогуглил порядка 20 страниц скриптов со связанными ползунками, нелинейным шагом ползунка и т.д. и в итоге получилось то чудовисче, которое получилось... :(

fos 26.04.2016 16:53

Цитата:

Сообщение от рони (Сообщение 415055)
нет проблем , в коде мало что изменится. пишите обьект для всего диапазона.

Блин, вот плох, когда и яву не знаешь и с ораторскими навыками хреново :))))
Чтобы прям вот конкретно понять, что я хочу попробую на X, Y, G, Z объяснить... X - текущая шкала 1, Y - шкалы ползунка 2, G = текущее значение шкалы 2, Z = ценник, присваиваемый комбе позиций X и G.
Дабы не оставалось комбинаций с 1 значением в шкале убрал величину 150, где только 1 размер 100х150 былбы... - и хнер с ним :)

X = 30 -> Y = 30, 40
X = 40 -> Y = 30, 40, 60
X = 50 -> Y = 50, 70
X = 60 -> Y = 40, 60, 90
X = 70 -> Y = 50, 70, 100
X = 80 -> Y = 80, 120
X = 90 -> Y = 60, 90
X = 100 -> Y = 70, 100
X = 120 -> Y = 80, 120

X=30 & G=30 -> Z = 905,
X=30 & G=40 и X=40 & G=30 -> Z = 1095,
X=40 & G=40 -> Z = 1305,
X=40 & G=60 и X=60 & G=40 -> Z = 1730,
X=50 & G=50 -> Z = 1755,
X=50 & G=70 и X=70 & G=50 -> Z = 2230,
X=60 & G=60 -> Z = 2255,
X=60 & G=90 и X=90 & G=60 -> Z = 3045,
X=70 & G=70 -> Z = 3000,
X=70 & G=100 и X=100 & G=70 -> Z = 3670,
X=80 & G=80 -> Z = 3500,
X=80 & G=120 и X=120 & G=80 -> Z = 4655,
X=80 & G=80 -> Z = 3500,
X=90 & G=90 -> Z = 4200,
X=100 & G=100 -> Z = 4755,
X=120 & G=120 -> Z = 6305,

Цитата:

Сообщение от рони (Сообщение 415055)
не осилил. попытайтесь дополнить информацию.

вроде дополнил, но сомневаюсь что смог описать корректно...

рони 26.04.2016 17:35

fos,
не понял ничего.

fos 26.04.2016 18:02

Цитата:

Сообщение от рони (Сообщение 415065)
fos,
не понял ничего.

собственно про это я и говорил :( я искренне пытался объяснить, но даже хз как выразить это еще :)

попробую дообъяснить:

X = 30 -> Y = 30, 40 - означает, что при ползунке1 в позиции "30", в ползунке 2 доступны шкалы 30 и 40...
И так расписал все нужные комбинации....

X=30 & G=40 и X=40 & G=30 -> Z = 1095, - означает, что при позиции ползунка 1 = "30" и позиции ползуна 2 = "40" некая переменная (которая выводится на экран в виде "Стоимость: ___ " приобретает значение = 1095, равно как и комбинация 40 и 30...
И так тоже расписал все присвоения для всех комбинаций..

Если это вообще реально сделать - мнебы хотябы наметки узреть для 2х комбинаций, остальные естественно я бы сам допилил :)

Чувствую, что о5 невнятно объяснил...

рони 26.04.2016 18:13

fos,
а в таком виде можно?
var price = {
    30: {
        30: 1095,
        40: 5000
    },
    40: {
        1: 400,
        5: 7000
    }
};

fos 26.04.2016 21:28

var cena = {
    30: {
        30: 905,
        40: 1095
    },
    40: {
        30: 1095,
        40: 1305,
        60: 1730
    }
   50: {
        50: 1755,
        70: 2230
   }
   60: {
        40: 1730,
        60: 2255,
        90: 3045
    }
   70: {
        50: 2230,
        70: 3000,
        100: 3670
    }
   80: {
        80: 3500,
        120: 4655
    }  
   90: {
        60: 3045,
        90: 4200
    }  
   100: {
        70: 3670,
        100: 4755
    }  
   120: {
        80: 4655,
        120: 6305
    }  
};


Надеюсь так понятнее получилось? В любом случае спасибо, что объяснили каким языком объяснять, что вообще хочу сделать :)))

При этом собственно еще бы не только ценник присваивался, но и деления в ползуне2 менялись...

рони 26.04.2016 21:37

fos,
запятых у вас маловато :)
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  body {
  font-family: sans-serif;
  font-size: 12px;
}

#amount, #amount2, #amount3 {
  font-size: 22px;
  font-weight: bold;
  border:none;
  color: #ff5555;
  background: none;

}
#slider, #slider2{
   width: 300px;
}

 </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js">
</script>
  <script>
$(function() {
var price = {
    30: {
        30: 905,
        40: 1095
    },
    40: {
        30: 1095,
        40: 1305,
        60: 1730
    },
   50: {
        50: 1755,
        70: 2230
   },
   60: {
        40: 1730,
        60: 2255,
        90: 3045
    },
   70: {
        50: 2230,
        70: 3000,
        100: 3670
    },
   80: {
        80: 3500,
        120: 4655
    },
   90: {
        60: 3045,
        90: 4200
    },
   100: {
        70: 3670,
        100: 4755
    },
   120: {
        80: 4655,
        120: 6305
    }
};

    function comb(a) {
        return Object.keys(a)
    }

    var steps = comb(price);
    var num = steps[0];
    var steps2 = comb(price[num]);

    $("#slider2").slider({
        value: 0,
        min: 0,
        max: steps2.length - 1,
        step: 1,
        slide: function(event, ui) {
            var Y = steps2[ui.value];
            $("#amount2").val(Y);
            $("#amount3").val(price[num][Y]);
        },
        change: function(event, ui) {
            var Y = steps2[ui.value];
            $("#amount2").val(Y);
            $("#amount3").val(price[num][Y]);
        }
    });
    $("#slider").slider({
        value: 0,
        min: 0,
        max: steps.length - 1,
        step: 1,
        slide: function(event, ui) {
            num = steps[ui.value];
            $("#amount").val(num);
            steps2 = comb(price[num]);
            $("#slider2").slider("option","max", steps2.length - 1);
            $("#slider2").slider("option", "value", 0)
        },
        change: function(event, ui) {
            num = steps[ui.value];
            $("#amount").val(num);
            steps2 = comb(price[num]);
            $("#slider2").slider("option","max", steps2.length - 1);
            $("#slider2").slider("option", "value", 0)
        }
    });
    $("#slider").slider("option", "value", 0)
});
  </script>
</head>

<body>
    <p>
  <input type="text" id="amount" readonly>
</p>

<div id="slider"></div>

<p>
  <input type="text" id="amount2" readonly>
</p>

<div id="slider2"></div>
<p>
  <input type="text" id="amount3" readonly>
</p>
</body>
</html>

fos 26.04.2016 22:28

Цитата:

Сообщение от рони (Сообщение 415087)
fos,
запятых у вас маловато :)
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  body {
  font-family: sans-serif;
  font-size: 12px;
}

#amount, #amount2, #amount3 {
  font-size: 22px;
  font-weight: bold;
  border:none;
  color: #ff5555;
  background: none;

}
#slider, #slider2{
   width: 300px;
}

 </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js">
</script>
  <script>
$(function() {
var price = {
    30: {
        30: 905,
        40: 1095
    },
    40: {
        30: 1095,
        40: 1305,
        60: 1730
    },
   50: {
        50: 1755,
        70: 2230
   },
   60: {
        40: 1730,
        60: 2255,
        90: 3045
    },
   70: {
        50: 2230,
        70: 3000,
        100: 3670
    },
   80: {
        80: 3500,
        120: 4655
    },
   90: {
        60: 3045,
        90: 4200
    },
   100: {
        70: 3670,
        100: 4755
    },
   120: {
        80: 4655,
        120: 6305
    }
};

    function comb(a) {
        return Object.keys(a)
    }

    var steps = comb(price);
    var num = steps[0];
    var steps2 = comb(price[num]);

    $("#slider2").slider({
        value: 0,
        min: 0,
        max: steps2.length - 1,
        step: 1,
        slide: function(event, ui) {
            var Y = steps2[ui.value];
            $("#amount2").val(Y);
            $("#amount3").val(price[num][Y]);
        },
        change: function(event, ui) {
            var Y = steps2[ui.value];
            $("#amount2").val(Y);
            $("#amount3").val(price[num][Y]);
        }
    });
    $("#slider").slider({
        value: 0,
        min: 0,
        max: steps.length - 1,
        step: 1,
        slide: function(event, ui) {
            num = steps[ui.value];
            $("#amount").val(num);
            steps2 = comb(price[num]);
            $("#slider2").slider("option","max", steps2.length - 1);
            $("#slider2").slider("option", "value", 0)
        },
        change: function(event, ui) {
            num = steps[ui.value];
            $("#amount").val(num);
            steps2 = comb(price[num]);
            $("#slider2").slider("option","max", steps2.length - 1);
            $("#slider2").slider("option", "value", 0)
        }
    });
    $("#slider").slider("option", "value", 0)
});
  </script>
</head>

<body>
    <p>
  <input type="text" id="amount" readonly>
</p>

<div id="slider"></div>

<p>
  <input type="text" id="amount2" readonly>
</p>

<div id="slider2"></div>
<p>
  <input type="text" id="amount3" readonly>
</p>
</body>
</html>

пипец) Я не знаю, как Вы это сделали, но оно работает! :)

Еще один вопрос назрел (сорри за наглость...) А ползунок 2 каким-то параметром можно заставить отображаться вертикально, а не горизонтально?

рони 26.04.2016 22:34

Цитата:

Сообщение от fos
А ползунок 2 каким-то параметром можно заставить отображаться вертикально,

http://api.jqueryui.com/slider/#option-orientation

fos 26.04.2016 22:46

Цитата:

Сообщение от рони (Сообщение 415092)

Мужик, ты реально крутой! :) Спасибо тебе большое!

Если нужно помочь с подарком по какому-либо поводу - пиши, помогу!!!

fos 26.04.2016 23:10

Цитата:

Сообщение от рони (Сообщение 415092)

Еще 1 дурацкий вопрос... :) А отображать на позунке деления можно? не обязательно циферные значения, хотябы тупо черточки

рони 26.04.2016 23:17

fos,
за чёрточками лучше сюда ... http://ionden.com/a/plugins/ion.rangeSlider/

fos 26.04.2016 23:25

Цитата:

Сообщение от рони (Сообщение 415096)
fos,
за чёрточками лучше сюда ... http://ionden.com/a/plugins/ion.rangeSlider/

фигасе.. эт я так понимаю надстройка к слайдеру (адд-он)?
Т.е. можно подключить сию хреновину и заменив
$("#slider").slider({

на
$("#slider").ionRangeSlider({

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

рони 26.04.2016 23:34

fos,
не понял ... по моему так код нужно новый писать.

fos 26.04.2016 23:37

Цитата:

Сообщение от рони (Сообщение 415098)
fos,
не понял ... по моему так код нужно новый писать.

:(((

т.е. обернуть этот код в красивую оболочку ionrange-слайдера не получится и придется все вновь вообще делать, используя другие функции и переменные? :(

рони 26.04.2016 23:40

fos,
да

рони 26.04.2016 23:46

fos,
для информации ещё со шкалой слайдер
http://egorkhmelev.github.io/jslider/ тоже свои параметры

fos 26.04.2016 23:46

Цитата:

Сообщение от рони (Сообщение 415100)
fos,
да

=\ попробую ручками тогда визуализовать то, что уже точно работает :) Спасибо, Рони - Вы настоящий профессор :)

рони 27.04.2016 02:02

slider зависимый ползунок + создание шкалы
 
Цитата:

Сообщение от fos
А отображать на позунке деления можно? не обязательно циферные значения, хотябы тупо черточки

мысли вслух ...
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  body {
  font-family: sans-serif;
  font-size: 12px;
}

#amount, #amount2, #amount3 {
  font-size: 22px;
  font-weight: bold;
  border:none;
  color: #ff5555;
  background: none;

}
#slider{    background-image:-webkit-gradient(linear,left,right,color-stop(0,#FFD700),color-stop(1,#FF4500));
    background-image:-o-linear-gradient(left,#FFD700,#FF4500);
    background-image:-moz-linear-gradient(left,#FFD700,#FF4500);
    background-image:-webkit-linear-gradient(left,#FFD700,#FF4500);
    background-image:linear-gradient(to right,#FFD700,#FF4500);
  margin-bottom: 40px;
   height: 6px;
   width: 300px;
}
 #slider2{
     background-image:-webkit-gradient(linear,left,right,color-stop(0,#FFD700),color-stop(1,#FF4500));
    background-image:-o-linear-gradient(left,#FFD700,#FF4500);
    background-image:-moz-linear-gradient(left,#FFD700,#FF4500);
    background-image:-webkit-linear-gradient(left,#FFD700,#FF4500);
    background-image:linear-gradient(to right,#FFD700,#FF4500);
    height: 300px;
    width: 6px;
}


 </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js">
</script>
  <script>
$(function() {
var price = {
    30: {
        30: 905,
        40: 1095
    },
    40: {
        30: 1095,
        40: 1305,
        60: 1730
    },
   50: {
        50: 1755,
        70: 2230
   },
   60: {
        40: 1730,
        60: 2255,
        90: 3045
    },
   70: {
        50: 2230,
        70: 3000,
        100: 3670
    },
   80: {
        80: 3500,
        120: 4655
    },
   90: {
        60: 3045,
        90: 4200
    },
   100: {
        70: 3670,
        100: 4755
    },
   120: {
        80: 4655,
        120: 6305
    }
};

    function comb(a) {
        return Object.keys(a)
    }

    var steps = comb(price);
    var num = steps[0];
    var steps2 = comb(price[num]);

    $("#slider2").slider({  orientation: "vertical",
        value: 0,
        min: 0,
        max: steps2.length - 1,
        step: 1,
        slide: function(event, ui) {
            var Y = steps2[ui.value];
            $("#amount2").val(Y);
            $("#amount3").val(price[num][Y]);
        },
        change: function(event, ui) {
            var Y = steps2[ui.value];
            $("#amount2").val(Y);
            $("#amount3").val(price[num][Y]);
        }
    });
    $("#slider").slider({
        value: 0,
        min: 0,
        max: steps.length - 1,
        step: 1,
        slide: function(event, ui) {
            num = steps[ui.value];
            $("#amount").val(num);
            steps2 = comb(price[num]);
            $("#slider2").slider("option","max", steps2.length - 1);
            $("#slider2").slider("option", "value", 0);
            scale(steps2, "#slider2")
        },
        change: function(event, ui) {
            num = steps[ui.value];
            $("#amount").val(num);
            steps2 = comb(price[num]);
            $("#slider2").slider("option","max", steps2.length - 1);
            $("#slider2").slider("option", "value", 0);
            scale(steps2, "#slider2")
        }
    });
    $("#slider").slider("option", "value", 0) ;
    function scale(arr, elem, width)
    {
    $(".cm", elem).remove();
    var w = 100/(arr.length-1)||100;
    !width && (arr = arr.slice().reverse());
    $.each(arr, function(i, num){
    var css = width ? {left : w * i+"%", width : w} : {top : w * i+"%", height : w};
    $("<div>",{"class" : "cm", "rel" : num, "css" : css}).appendTo(elem);
          });
    }
    scale(steps, "#slider", true)



});
  </script>
<style type="text/css">
#slider .cm {
 margin: 10px auto;
 position: absolute;
 border-left: 1px solid #555;
 height: 14px;
}
#slider .cm:after {
 position: absolute;
 bottom: -15px;
 font: 11px/1 sans-serif;
}
#slider2 .cm {
 margin:  auto 10px;
 position: absolute;
 border-top: 1px solid #555;
 width: 14px;
}
#slider2 .cm:after {
 position: absolute;
 right: -15px;
 font: 11px/1 sans-serif;
}


.cm:after {
 content:  attr(rel);
}
.ui-slider-handle{border-radius:50%; font-size: 12px;}
.ui-slider-horizontal .ui-slider-handle {
    top: -0.5em;
}
.ui-slider-vertical  .ui-slider-handle {
    left: -0.5em;
}
:focus{
    outline:0;
    border:0;
  }

</style>
</head>

<body>
    <p>
  <input type="text" id="amount" readonly>
</p>

<div id="slider"></div>

<p>
  <input type="text" id="amount2" readonly>
</p>

<div id="slider2"></div>
<p>
  <input type="text" id="amount3" readonly>
</p>
</body>
</html>

fos 27.04.2016 09:45

Цитата:

Сообщение от рони (Сообщение 415118)
мысли вслух ...

:blink: я в шоке... Спасибо!

fos 27.04.2016 14:39

Все круто работает, профессор крутой! :)

Теперь добрался до следующей стадии, когда мои клешни за час 11 раз сломали работоспособность кода...

залил на гитхаб текущую стадию опытного образца - там div с id="olol" как его заставить менять свой width\height согласно значениям в инпутах #amount (ширина) и #amount2 (высота) помноженное на 3?

т.е. если ползунок 1 в шкале 50, а ползунок 2 в шкале 70, то ширина #olol = 150px , а высота 210px

Я вот сейчас вчитался, что написал и понял, что снова объяснил туго...
Нашел тут тему, где говорят использовать "style.width|height" и по гетэлементайди привинчивать, но алгаритмики в моем мозгу пока не хватает, чтобы понять куда именно, чтобы код не поломать :\

рони 27.04.2016 15:44

Цитата:

Сообщение от fos
там div с id="olol"

где?

fos 27.04.2016 15:51

Ссылка на jbin
Фигово сохранилось предыдущее..

рони 27.04.2016 15:59

Цитата:

Сообщение от fos
профессор крутой!

я не умею :) пользоватся github и jsbin
ниже строки 12 и 18
$("#slider2").slider({  orientation: "vertical",
        value: 0,
        min: 0,
        max: steps2.length - 1,
        step: 1,
        range: "max",
        animate: "slow",
        slide: function(event, ui) {
            var Y = steps2[ui.value];
            $("#amount2").val(Y);
            $("#amount3").val(price[num][Y]);
            $("#olol").css({width : num * 3, height : Y*3})
        },
        change: function(event, ui) {
            var Y = steps2[ui.value];
            $("#amount2").val(Y);
            $("#amount3").val(price[num][Y]);
            $("#olol").css({width : num * 3, height : Y*3})

        }
    });

fos 27.04.2016 16:10

Цитата:

Сообщение от рони (Сообщение 415150)
я не умею :) пользоватся github и jsbin
ниже строки 12 и 18
$("#slider2").slider({  orientation: "vertical",
        value: 0,
        min: 0,
        max: steps2.length - 1,
        step: 1,
        range: "max",
        animate: "slow",
        slide: function(event, ui) {
            var Y = steps2[ui.value];
            $("#amount2").val(Y);
            $("#amount3").val(price[num][Y]);
            $("#olol").css({width : num * 3, height : Y*3})
        },
        change: function(event, ui) {
            var Y = steps2[ui.value];
            $("#amount2").val(Y);
            $("#amount3").val(price[num][Y]);
            $("#olol").css({width : num * 3, height : Y*3})

        }
    });

Балин) Слов нет - одни эмоции. Я там столько строк по мануалам с разных сайтов понавтыкал... а тут одной строчкой все! я не одолею эту науку видимо :) Спасибо!!!

fos 28.04.2016 14:48

По сути осталась последняя стадия (ну или предпоследняя)

код расчета стоимости при смене ползунка доделал с переменной 'obra'
var price = {
    30: {
        30: 905 + obra,
        40: 1095 + obra
    },
    40: {
        30: 1095 + obra,
        40: 1305 + obra,
        60: 1730 + obra
    },
и т.д.,
и добавил в хтмл селектор:
<select id="obra">
<option value="1250">Портрет "под масло"</option>
<option value="1250">В стиле GTA</option>
<option value="500">В стиле "Грандж"</option>
<option value="950">Поп-арт портрет</option>
</select>

Как сделать правильно функцию, чтобы при смене селектора в #amount3 выводило ценник с учетом ценника обработки? :)

нагуглил очередную длиннофункцию
obra = document.getElementById('obra').options[document.getElementById('obra').selectedIndex].value;;

и чую это бред получица..

рони 28.04.2016 15:21

fos,
obra из price убрать, заменить инициализацию slider2 и добавить change для селекта.

$("#slider2").slider({  orientation: "vertical",
        value: 0,
        min: 0,
        max: steps2.length - 1,
        step: 1,
        range: "max",
        animate: "slow",
        slide: function(event, ui) {
            var Y = steps2[ui.value];
            $("#amount2").val(Y);
            var obra = +$("#obra").val();
            $("#amount3").val(price[num][Y]+obra);
            $("#olol").css({width : num * 3, height : Y*3})
        },
        change: function(event, ui) {
            var Y = steps2[ui.value];
            $("#amount2").val(Y);
            var obra = +$("#obra").val();
            $("#amount3").val(price[num][Y]+obra);
            $("#olol").css({width : num * 3, height : Y*3})

        }
    });
    $("#obra").on("change", function() {
    $("#slider2").slider("option", "value", 0);
})

и у вас без reverse неправильно формируются чёрточки для вертикального ползунка пост 27 строка 141

fos 28.04.2016 15:40

Цитата:

Сообщение от рони (Сообщение 415209)
fos,
obra из price убрать, заменить инициализацию slider2 и добавить change для селекта.

$("#slider2").slider({  orientation: "vertical",
        value: 0,
        min: 0,
        max: steps2.length - 1,
        step: 1,
        range: "max",
        animate: "slow",
        slide: function(event, ui) {
            var Y = steps2[ui.value];
            $("#amount2").val(Y);
            var obra = +$("#obra").val();
            $("#amount3").val(price[num][Y]+obra);
            $("#olol").css({width : num * 3, height : Y*3})
        },
        change: function(event, ui) {
            var Y = steps2[ui.value];
            $("#amount2").val(Y);
            var obra = +$("#obra").val();
            $("#amount3").val(price[num][Y]+obra);
            $("#olol").css({width : num * 3, height : Y*3})

        }
    });
    $("#obra").on("change", function() {
    $("#slider2").slider("option", "value", 0);
})

и у вас без reverse неправильно формируются чёрточки для вертикального ползунка пост 27 строка 141

reverse я вернул, я сначала убирал эту строку - jsbin на это отрицание ругалось как на еррор, я убрал, чтобы ошибок в коде не было - запустил без строки и не понял сначала в чем косяк, а потом реверс шкалы2 узрел :)

По поводу obra - гигантское спасибо :) и если лс открыто - прошу ответить на сообщение, которое сейчас отправлю :)

fos 29.04.2016 14:00

Вернемся к нашим баранам :)

имеется тотже селектор:
<select id="obra">
<option value="1250">Портрет "под масло"</option>
<option value="1250">В стиле GTA</option>
<option value="500">В стиле "Грандж"</option>
<option value="950">Поп-арт портрет</option>
</select>


И появился буттоны с id=obrpm, id=obrgta, id=obrgrng, id=obrpopart

Как сделать так, чтобы по клику на буттн id=obrpm - в селекторе выбирался пункт
<option value="1250">Портрет "под масло"</option>

при клике на id=obrgta выбирался пункт
<option value="1250">В стиле GTA</option>

и т.д.? :)

рони 29.04.2016 14:43

fos,
заменить
$("#obra").on("change", function() {
    $("#slider2").slider("option", "value", 0);
    $(".but")[this.selectedIndex].checked = true
})


добавить
$(".but").on("click", function() {
    var i = $(".but").index(this);
    $("#obra")[0].selectedIndex = i;
    $("#obra").trigger("change")
})

<label>Портрет "под масло"<input name="obr" type="radio"  class="but" checked="checked"></label>
<label>В стиле GTA<input name="obr" type="radio"  class="but"></label>
<label>В стиле "Грандж"<input name="obr" type="radio"  class="but"></label>
<label>Поп-арт портрет<input name="obr" type="radio"  class="but"></label>

по желанию
label{
  display: block;
}

fos 29.04.2016 14:55

Цитата:

Сообщение от рони (Сообщение 415294)
fos,
заменить
$("#obra").on("change", function() {
    $("#slider2").slider("option", "value", 0);
    $(".but")[this.selectedIndex].checked = true
})


добавить
$(".but").on("click", function() {
    var i = $(".but").index(this);
    $("#obra")[0].selectedIndex = i;
    $("#obra").trigger("change")
})

<label>Портрет "под масло"<input name="obr" type="radio"  class="but" checked="checked"></label>
<label>В стиле GTA<input name="obr" type="radio"  class="but"></label>
<label>В стиле "Грандж"<input name="obr" type="radio"  class="but"></label>
<label>Поп-арт портрет<input name="obr" type="radio"  class="but"></label>

по желанию
label{
  display: block;
}

Круто :) как всегда все коротко и ясно! Респект!

Alena-stav 09.02.2017 17:18

Привет, Рони! Не могу понять, почему значение 2 ползунка сбрасываются на ноль при каждом движении 1 ползунка?


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