Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 15.05.2015, 20:30
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 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.
Ответить с цитированием
  #12 (permalink)  
Старый 15.05.2015, 20:39
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

А, блин, почему вспомнил, фильтры так устроены - включенные имеют минус id. То есть в одном параметре передается что включено и что не включено. Элементарная вещь, а на жисе геморрой. Написал-стер написал-стер, жопа какая-то, потом думаю да идите вы нахер со своими числами и написал унцию кода вычисления абсолютной величины:

abs=function(el){
		var v = atv(el);
		if(v)
			return v.replace('-','');
	},


Вот так нах, без Math'а
Ответить с цитированием
  #13 (permalink)  
Старый 15.05.2015, 23:31
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 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>
Ответить с цитированием
  #14 (permalink)  
Старый 16.05.2015, 06:31
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Так у вас после 7 - идет 0 в режиме play
Ответить с цитированием
  #15 (permalink)  
Старый 16.05.2015, 06:34
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 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 (permalink)  
Старый 16.05.2015, 12:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от kostyanet
По одному событию колебаться от 0 до Х и обратно
а чем например 3 пост неустраивает x() выдаёт как раз от 0 и обратно
Ответить с цитированием
  #17 (permalink)  
Старый 16.05.2015, 13:55
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 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);
Ответить с цитированием
  #18 (permalink)  
Старый 17.05.2015, 16:57
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от рони
а чем например 3 пост неустраивает x() выдаёт как раз от 0 и обратно
Да, просмотрел, перед ним был про массивы, я подумал следующий "по проще" просто попроще. Щас попробую понять как прикрутить. Это вообще второе больное место после регов - циклы - у меня. Еще с бейсика каждый раз задумывался что поставить в for > = или Length-1.
Ответить с цитированием
  #19 (permalink)  
Старый 17.05.2015, 17:23
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 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 ...
Ответить с цитированием
  #20 (permalink)  
Старый 18.05.2015, 16:35
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 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.

Второй вопрос. Похоже что когда окно свернуто, браузер, по крайней мере ФФ, лепит там таймаут на таймаут почем зря, в результате чего когда окно распахиваешь, происходит легкая паника среди блоков и движение приобретает калечный характер. Я добавил парочку событий на фокус-размытие окна, но эти штуки заведомо не везде работают и вообще работают неуверенно.

Как сделать анимацию чтоб он четко отрабатывала, не допуская ингресса таймаутов? Я видел где-то пример, там надо дату вводить, потом считать, поскольку тема есть, попробую на халяву получить ответ, спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос по toDataURL() GodZiLA Общие вопросы Javascript 0 03.06.2014 17:21
Всплытие событий или что то не так... Кирюха =) jQuery 6 30.03.2013 12:56
Вопрос по each() и перебору строк таблицы battrack jQuery 1 09.02.2012 14:30
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 15.07.2011 00:13
Теоретический вопрос. gods33 (X)HTML/CSS 10 16.12.2010 23:49