Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 23.04.2009, 15:08
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от AzriMan
это из серии "Ниже IE6 жизни нет"?
Ну и отлично

Сообщение от AzriMan
Только вот обнаружил, что при перетаскивании моего дива по окну броузера иногда в броузере происходит выделение текста
if (e.preventDefault) {
	e.preventDefault();
	e.stopPropagation();
} else {
	e.returnValue = false;
	e.cancelBubble = true;
}

Последний раз редактировалось Riim, 23.04.2009 в 15:11.
Ответить с цитированием
  #22 (permalink)  
Старый 27.04.2009, 00:28
Интересующийся
Отправить личное сообщение для cker Посмотреть профиль Найти все сообщения от cker
 
Регистрация: 20.04.2009
Сообщений: 22

if (e.preventDefault) {
	e.preventDefault();
	e.stopPropagation();
} else {
	e.returnValue = false;
	e.cancelBubble = true;
}


А куда это?
Ответить с цитированием
  #23 (permalink)  
Старый 27.04.2009, 00:48
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

В начало обработчика.
Ответить с цитированием
  #24 (permalink)  
Старый 27.04.2009, 16:36
Интересующийся
Отправить личное сообщение для cker Посмотреть профиль Найти все сообщения от cker
 
Регистрация: 20.04.2009
Сообщений: 22

не получается
Ответить с цитированием
  #25 (permalink)  
Старый 27.04.2009, 18:35
Интересующийся
Отправить личное сообщение для Артем Шалхаков Посмотреть профиль Найти все сообщения от Артем Шалхаков
 
Регистрация: 07.04.2009
Сообщений: 24

Чтобы замутить drag'n'drop, самый простой способ это реализовать конечный автомат о трех состояниях:
- начальное (ничего не перетаскивается)
- перетаскиваем (поступило событие mousedown, теперь перехватываем все события mousemove)
- "бросаем" (поступило событие mouseup)

Реализацию этой идеи можешь посмотреть на сайте Flapjax. Другие библиотеки тоже предоставляют такую функциональность, но там все плохо с точки зрения комбинирования этого кода с твоим (compositionality).

Полупрозрачный div это div с CSS-свойством opacity < 1.0 (для IE хаки нужны).

ADD: блин, ответил на вопросы с первой страницы %)

Последний раз редактировалось Артем Шалхаков, 27.04.2009 в 18:39. Причина: жуткое юзабилити форума
Ответить с цитированием
  #26 (permalink)  
Старый 27.04.2009, 18:44
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Артем Шалхаков
Чтобы замутить drag'n'drop, самый простой способ это реализовать конечный автомат о трех состояниях
Делать автомат с двумя состояниями и с элементарными переходами между ними лишнее, не находите?
Ответить с цитированием
  #27 (permalink)  
Старый 27.04.2009, 19:11
Интересующийся
Отправить личное сообщение для Артем Шалхаков Посмотреть профиль Найти все сообщения от Артем Шалхаков
 
Регистрация: 07.04.2009
Сообщений: 24

Сообщение от Kolyaj Посмотреть сообщение
Делать автомат с двумя состояниями и с элементарными переходами между ними лишнее, не находите?
Нет, не нахожу, потому что реализация должна следовать за спецификацией, а не наоборот. Кстати, результирующий код не обязательно будет именно реализовывать конечный автомат, там может быть что-то другое, но именно что эквивалентное.
Ответить с цитированием
  #28 (permalink)  
Старый 27.04.2009, 19:22
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Для чего реализовывать автомат, если обработка mousemove зависит только от того, нажата в данный момент кнопка мыши или нет, и больше ни от чего?
Ответить с цитированием
  #29 (permalink)  
Старый 27.04.2009, 20:29
Аватар для Илья Кантор
Администратор
Отправить личное сообщение для Илья Кантор Посмотреть профиль Найти все сообщения от Илья Кантор
 
Регистрация: 25.05.2007
Сообщений: 1,221

Прошу - сегодня выложил http://javascript.ru/ui/draganddrop

Ответы на все ваши вопросы в ней есть.
Ответить с цитированием
  #30 (permalink)  
Старый 28.04.2009, 08:00
Интересующийся
Отправить личное сообщение для Артем Шалхаков Посмотреть профиль Найти все сообщения от Артем Шалхаков
 
Регистрация: 07.04.2009
Сообщений: 24

Сообщение от Kolyaj Посмотреть сообщение
Для чего реализовывать автомат, если обработка mousemove зависит только от того, нажата в данный момент кнопка мыши или нет, и больше ни от чего?
Так это... конечный автомат и будет зависеть только от этих событий (скопипасчено с flapjax-lang.org/demos/drag.html и заботливо откомментировано):

// dragE(element) -> EventStream { left: int, top: int }
function dragE(target) {
  // начинаем в состоянии покоя

  // moveEe :: EventStream (EventStream { left: int, top: int })
  var moveEe = extractEventE(target,'mousedown').mapE(function(md) {
    // переходим из начального состояния в состояние переноса
    var startX = md.layerX;
    var startY = md.layerY;
    // в состоянии переноса отлавливаем все события mousemove
    // и сохраняем в особый объект
    return extractEventE(document,'mousemove').mapE(function(mm) {
      mm.preventDefault(); // отменяем выделение текста

      return { element: target, // ради удобства
               left: mm.clientX - startX,  
               top: mm.clientY - startY };
    });
  });
  // терминирующее состояние
  // dropEe :: EventStream (EventStream 'a)
  var dropEe = extractEventE(document,'mouseup').mapE(function() {
    return zeroE();
  });
  // switchE "смешивает" перемещение и окончание, то есть,
  // когда поступает mouseup, то mousemove нас уже не интересуют,
  // и мы на этом заканчиваем
  return switchE(mergeE(moveEe,dropEe));
}


(беспроблемно расширяется до http://flapjax-lang.org/try/index.ht...=listdrag.html)

Этот подход таки лучше указанного в статье, потому что callback'ов нету, а есть потоки событий, с которыми можно обращаться также, как и с переменными (передавать в функции, возвращать из функций, "изменять", etc.).

Еще раз повторю: сначала спецификация, затем код. Иначе не будет четкого понимания, что и зачем делаем, лапша получится.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Требуется программист JavaScript soldier Работа 4 29.11.2013 13:12
Требуется javascript программист удаленно AllaBoris Работа 0 29.01.2009 19:25
Требуется поправить меню на javascript Гость Работа 1 31.07.2008 11:22
Требуется программист на JavaScript Vadym Работа 0 17.07.2008 20:40
Цитирование текста в комментариях. Требуется помощь. shinjuku Общие вопросы Javascript 3 07.07.2008 14:19