Вход

Просмотр полной версии : input type="range" слушатель события.


Black_Star
16.01.2017, 00:55
Добрый день уважаемые. Вот возникла необходимость при изменении значения ползунка производить некий пересчет значений в остальном коде. Подскажите как реализовать. Приведу пример
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Exam</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
</head>
<body>
<input class="corners" type="range" min="1" max="60" step="1" value="48">
<span>show</span>
<script>
window.onload = function () {
var corners = $('.corners'),
num = $('span');
var a = corners.val();
$(function(){
num.text(a);
$('.corners').change(function(){
a = corners.val();
console.log(a + " =a");
num.text(a);

return a;
})
})

var showResalt = Number (a);
console.log( showResalt + 'my_range');
var nov = showResalt + 2;
console.log(nov + " = nov");

}

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

необходимо получать значение "a" из функции и затем при его изменении получать новое значение переменной nov. Подскажите, как повесить правильный слушатель события? Я думал через setInterval но что то мне не очень нравится :-?
Добавлю аналог https://jsfiddle.net/BlackStar1991/dby199qk/8/

рони
16.01.2017, 01:53
return a;
заменить на
nov = showResalt + 2;

Black_Star
16.01.2017, 10:23
Чёт не работает. Как то не правильно я понимаю область видимости

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Rainebow Balls</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
</head>
<body>
<canvas id='canvas' width="800" height="800"></canvas>
<input class="corners" type="range" min="1" max="60" step="1" value="48">
<span>show</span>

<script>
var corners = $('.corners'),
num = $('span');
var a = corners.val();
$(function(){
num.text(a);
$('.corners').change(function(){
a = corners.val();
console.log(a + " =a");
num.text(a);

nov = showResalt + 2;
})
})

var showResalt = Number (a);
console.log( showResalt + 'my_range');

console.log(nov + " = nov");
</script>
</body>
</html>

ksa
16.01.2017, 10:43
Чёт не работает.
Так ошибка у тебя...
Uncaught ReferenceError: nov is not defined
console.log(nov + "  = nov");

ksa
16.01.2017, 10:45
Так работает...

<!DOCTYPE html>
<html lang="en">
<head>
<title>Rainebow Balls</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
</head>
<body>
<canvas id='canvas' width="800" height="800"></canvas>
<input class="corners" type="range" min="1" max="60" step="1" value="48">
<span>show</span>
<script>
var corners = $('.corners');
var num = $('span');
var a = corners.val();
$(function(){
num.text(a);
$('.corners').change(function(){
a = corners.val();
console.log(a + " =a");
num.text(a);
nov = showResalt + 2;
})
})
var showResalt = Number (a);
console.log( showResalt + 'my_range');
//console.log(nov + " = nov");
</script>
</body>
</html>

Dilettante_Pro
16.01.2017, 10:50
Black_Star,
var nov - туда же, где var a

Black_Star
16.01.2017, 11:34
Так работает...
Чёт я не могу понять что именно у Вас работает? В консоле я не вижу что б значение 'my_range' как-то менялось после изменения ползунка да и значение console.log(nov + " = nov"); я не очень понял зачем закомители.
var nov - туда же, где var a
https://jsfiddle.net/BlackStar1991/dby199qk/14/

не вижу как это может помочь :-?

ksa
16.01.2017, 11:37
Чёт я не могу понять что именно у Вас работает?
Так я х/з чего планировал ты... :D
Но твой пример в моем варианте не дает ошибок в консоли... При изменении ползунка меняются циферки...

Dilettante_Pro
16.01.2017, 11:53
Black_Star,
не вижу как это может помочь
Не нужно присваивать что-то - только объявить. Не будет ошибки, о которой писал ksa.
А изменения после перемещения ползунка у вас будут печататься только для a - этот console.log(a + " =a"); находится в обработчике, а остальные console.log срабатывают только один раз, при первоначальном выполнении скрипта

Black_Star
16.01.2017, 11:55
Но твой пример в моем варианте не дает ошибок в консоли... При изменении ползунка меняются циферки..
:lol: Они изначально там менялись) Вопрос был не о том.
Мне необходимо что б была возможность работать с динамически меняющееся значение переменной "a" которое я получаю из функции.
(привязать значение этой переменной к другой переменой)

Black_Star
16.01.2017, 12:14
Что бы полностью пояснить всякое недопонимание, в том что я хочу, я решил сделать простой пример.
https://jsfiddle.net/BlackStar1991/dby199qk/16/
При изменение ползунка должно ити изменение количества квадратиков.
(собственно получение значения перемененной из функции)

Dilettante_Pro
16.01.2017, 12:22
Black_Star,
Мне необходимо что б была возможность работать с динамически меняющееся значение переменной "a"
Таки она меняется. Можно пользоваться.
<!DOCTYPE html>
<html lang="en">
<head>
<title>Rainebow Balls</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
</head>
<body>
<div id="res" ></div>
<canvas id='canvas' width="800" height="200"></canvas>
<input class="corners" type="range" min="1" max="60" step="1" value="48">
<span>show</span>
<script>
var corners = $('.corners');
var num = $('span');
var a = corners.val();
$(function(){
num.text(a);
$('.corners').change(function(){
a = corners.val();
res.innerText = ("a = " + a);
num.text(a);
nov = showResalt + 2;
})
})
var showResalt = Number (a);
console.log( showResalt + 'my_range');
//console.log(nov + " = nov");
</script>
</body>
</html>

Black_Star
16.01.2017, 12:35
Спасибо, интересный вышел результат, но он не подходит по моим нуждам. В вашем примере, функция и параметр изменения находятся в одной области видимости. За пределами данной функции "a" вы уже не сможете изменить. Мне же необходим динамически изменяемый параметр "а" за пределами, в другой функции. https://jsfiddle.net/BlackStar1991/dby199qk/16/

Dilettante_Pro
16.01.2017, 12:43
Black_Star,
Запуск функции клонирования нужно размещать в обработчике.

Dilettante_Pro
16.01.2017, 13:02
<!DOCTYPE html>
<html lang="en">
<head>
<title>Rainebow Balls</title>
<style>
.addBlock{
height: 100px;
width: 100%;
border: 1px solid #000;
}

.minBlock{
float: left;
width: 20px;
height: 20px;
background-color: red;
border: 1px solid #000;
display:none;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
</head>
<body>
<input class="corners" type="range" min="1" max="60" step="1" value="48">
<span>show</span>
<div class="minBlock"></div>
<div class="addBlock">
</div>
<script>
var corners = $('.corners');
var a = corners.val(),
num = $('span');
num.text(a);
var minblock = $(".minBlock");
duplicate(a);

$(function(){
$('.corners').on('input', function(){
a = corners.val();
num.text(a);
duplicate(a);
})
})
function duplicate(count) {
$(".addBlock").html("");
for(var i = 0; i < count; i++) {
minblock.clone().appendTo(".addBlock").show();
}
}
</script>
</body>
</html>

ksa
16.01.2017, 13:48
привязать значение этой переменной к другой переменой
Вот тут не понял... :blink:
У нас есть два варианта "связи" значения с именем переменной...
1. Присвоение
2. Ссылка

Dilettante_Pro
16.01.2017, 14:02
Black_Star,
Рекомендую также глянуть концовочку этой темы
http://javascript.ru/forum/dom-window/23342-zakrashivanie-yacheek-v-tablice-v-zavisimosti-ot-dannykh-v-yachejjk-4.html

Black_Star
16.01.2017, 19:02
Всем спасибо за помощь. :thanks:
Ещё вопрос. Как сделать слушатель события для этого ползунка?
Что то на подобие вот этого
https://www.sitepoint.com/javascript-custom-events/
Что б значения в теге span() менялись не ПОСЛЕ того как я отпущу ползунок, а по мере прокрутки?

Dilettante_Pro
16.01.2017, 19:13
Black_Star,
Что б значения в теге span() менялись не ПОСЛЕ того как я отпущу ползунок, а по мере прокрутки?

Изменил пример пост 15

Black_Star
16.01.2017, 22:12
всем ещё раз спасибо. Вот что получилось :p
http://codepen.io/BlackStar1991/pen/JERqjP