15.05.2015, 20:30
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Кстати, как осто3.14здел этот NaN, просто капец. Когда на php я пишу if($v = (int)$v) то просто спокойно иду спать, а если на жисе написать if(v=parseInt(v)) то присняся кошмары. Зацените мля:
v={o:5};
parseInt(('n' in v));
/*
NaN
*/
Почему мля нельзя выдать 0 на фолс и 1 на тру?
Это я вспомнил когда увидел получение индекса из элемента в куске выше.
ЗЫ Ну то есть когда числа пришедшие с клиента типируем мы же так и пишем (int)$_GET['num'], да? Прикольно было бы получить тру и одновременно вместо числа - целое слово из трех букаф, блеать.
Последний раз редактировалось kostyanet, 15.05.2015 в 20:34.
|
|
15.05.2015, 20:39
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
А, блин, почему вспомнил, фильтры так устроены - включенные имеют минус id. То есть в одном параметре передается что включено и что не включено. Элементарная вещь, а на жисе геморрой. Написал-стер написал-стер, жопа какая-то, потом думаю да идите вы нахер со своими числами и написал унцию кода вычисления абсолютной величины:
abs=function(el){
var v = atv(el);
if(v)
return v.replace('-','');
},
Вот так нах, без Math'а
|
|
15.05.2015, 23:31
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
Туда сюда обратно
это я учился
<style>
input {
float: left;
width:120px;
}
#result {
width: 240px;
height: 90px;
background-color: red;
color: #fff;
font-size: 80px;
text-align: center;
}
#buttons {
width:240px;
}
</style>
<div id="result"></div>
<div id="buttons">
<input type="button" value="Previous" id="prev" />
<input type="button" value="Next" id="next" />
<input type="button" value="Play" id="play" />
<input type="button" value="Pause" id="pause" />
</div>
<script>
function nav(max) {
this.max = max;
this.current = this.current || -1;
this.next = function () {
this.current = this.current < this.max - 1 ? this.current + 1 : 0;
return this.current;
};
this.prev = function () {
this.current = this.current > 0 ? this.current - 1 : this.max - 1;
return this.current;
};
};
var animTimer, slider = new nav(8);
function sliderPlay() {
animTimer = setInterval(function () {
result.innerHTML = slider.next();
}, 1000);
};
next.onclick = function () {
result.innerHTML = slider.next();
};
prev.onclick = function () {
result.innerHTML = slider.prev();
};
play.onclick = function () {
if (animTimer) return;
sliderPlay();
};
pause.onclick = function () {
clearInterval(animTimer);
animTimer = 0;
};
window.onload = function () {
sliderPlay();
};
</script>
|
|
16.05.2015, 06:31
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Так у вас после 7 - идет 0 в режиме play
|
|
16.05.2015, 06:34
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Вообще можно без ++инкрементов и проверок if else прибавлять и вычитать в заданном диапазоне, но для данной задачи ничего оно не дает
var max = 10, curr =0;
В кнопке далее
curr = Math.max(curr+1,max);
назад
curr = Math.max(curr-1,0);
Сформулирую задачу предельно конкретно. По одному событию колебаться от 0 до Х и обратно.
Последний раз редактировалось kostyanet, 16.05.2015 в 06:37.
|
|
16.05.2015, 12:21
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Сообщение от kostyanet
|
По одному событию колебаться от 0 до Х и обратно
|
а чем например 3 пост неустраивает x() выдаёт как раз от 0 и обратно
|
|
16.05.2015, 13:55
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
Сообщение от kostyanet
|
Сформулирую задачу предельно конкретно
|
var obj = {
min: 0,
max: 0,
__reverce: 1,
__position: 0,
get cur() {
this.__position += this.__reverce
if (this.__position == this.max || this.__position == this.min) this.__reverce *= -1;
return this.__position;
},
set cur(arg) {
this.__position = arg;
}
};
obj.max = 10, obj.cur = 8;
console.log(obj.cur);
console.log(obj.cur);
console.log(obj.cur);
|
|
17.05.2015, 16:57
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от рони
|
а чем например 3 пост неустраивает x() выдаёт как раз от 0 и обратно
|
Да, просмотрел, перед ним был про массивы, я подумал следующий "по проще" просто попроще. Щас попробую понять как прикрутить. Это вообще второе больное место после регов - циклы - у меня. Еще с бейсика каждый раз задумывался что поставить в for > = или Length-1.
|
|
17.05.2015, 17:23
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Точно, я так и думал, что нужно просто менять знак у инкремента, но не догонял что нужны обе проверки одновременно, а знак просто переключается по тру в обоих. Ну то есть когда написал их обе, то получилось что и там и там i=-i Причем начал с примера Рони с третьего поста, а товарищ Poznakomlus то самое и предложил. В общем спасибо господа, получается все очень просто (на что я и надеялся размещая тему)
var curr=0, max=5,i=-1;
function next(){
if(curr==max || curr==0)
i=-i;
curr+=i;
console.log( curr);
}
for(var j=0;j<20;j++)
next();
И выдает 0 1 2 3 4 5 4 3 2 1 0 ...
|
|
18.05.2015, 16:35
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Готовый кусок действующего вещества
/* calc curr and move block */
move=function(j){
i=j||i;
curr+=i;
if(curr==max || curr==0)
i=-i;
render();
m.style.top=(curr*-step)+'px';
},
/* next - previous click */
move_n=function(e){
move(1);
},
move_p=function(e){
move(-1);
},
/* animation */
stop=function(e){
if(to){
W.clearTimeout(to);
to=false;
}
},
go=function(e){
to=W.setTimeout(move,delay);
},
go_n=function(e){
if(to!==false)
go(e);
},
/* direct click */
go_to=function(e){
if(e.target.nodeName='I'){
curr=parseInt(e.target.getAttribute('data-index'))-i;
move();
if(curr==max)
i=-1;
else if(curr==0)
i=1;
}
};
if(total>1){
btn_n.addEventListener('click',move_n);
btn_p.addEventListener('click',move_p);
btn_b.addEventListener('click',go_to);
p.addEventListener('mouseenter',stop);
p.addEventListener('mouseleave',go);
m.addEventListener('transitionend',go_n);
W.addEventListener('focus',go);
W.addEventListener('blur',stop);
}
Щелчок с пуговиц - ну это знаете такие кнопки произвольного доступа к блокам - меня достал. Как только щелкаешь по крайним, индикатор i инвертируется и анимация тупо шарашит в заданном направлении, то есть показывает то, чего уже нет. Пришлось ввести дополнительную проверку, не считая предыскажения, чтоб посылать все на один и тот же move.
Второй вопрос. Похоже что когда окно свернуто, браузер, по крайней мере ФФ, лепит там таймаут на таймаут почем зря, в результате чего когда окно распахиваешь, происходит легкая паника среди блоков и движение приобретает калечный характер. Я добавил парочку событий на фокус-размытие окна, но эти штуки заведомо не везде работают и вообще работают неуверенно.
Как сделать анимацию чтоб он четко отрабатывала, не допуская ингресса таймаутов? Я видел где-то пример, там надо дату вводить, потом считать, поскольку тема есть, попробую на халяву получить ответ, спасибо.
|
|
|
|