Pull to refresh

Comments 14

Давным давно на просторах stackoverflow:

function mouseClickDebounce( o, ev, handler ) {
	if ( o.getAttribute( "data-_clk_" ) ) {
		clearTimeout( Number( o.getAttribute( "data-_clk_" ) ) );
		o.removeAttribute( "data-_clk_" );
		ev.type = "_dblclick";
		handler.call( o, ev );
	}
	else {
		o.setAttribute(
			"data-_clk_",
			String( setTimeout(
				function() {
					o.removeAttribute( "data-_clk_" );
					ev.type = "_click";
					handler.call( o, ev );
				},
				200
			) )
		);
	}
}


o — объект для кторого проводится действие
ev — объект (например event у jQuery, или любой другой — в нем будет меняться свойство type)
ev.type = "_click" — одно нажатие
ev.type = "_dblclick" — двойное нажатие

работать так:

$( element ).on(
	"click",
	function( ev ) {
		mouseClickDebounce( this, ev, function( ev ) { alert( ev.type ); } );
	}
);


У Вас излишне сложно, хотя более правильно. Но это далеко не всегда нужно.
Это я конечно видел.
Но реализация в виде плагина с некоторыми дополнительными нюансами ( обработка передвижения курсора, и бесшовная обработка событий ) — показалась более оправданной.
У Вас излишне сложно, хотя более правильно. Но это далеко не всегда нужно.

Единственный раз столкнулся с реальной необходимостью двойного клика при работе с canvas. Ключевым моментом было отслеживать не только время между кликами, но и смещение курсора: активно работая с инструментом click per second может просто зашкаливать.

Что касается dblclick, то всегда стараюсь уходить от использования его при проектировании интерфейсов, т.к. он, как минимум, не очевиден.
У меня за все время работы это событие применялось только два раза, и оба — в очень навороченных гридах. Вполне хватало только времени.

А так да, полностью согласен, что использовать надо лишь тогда, когда ооочень необходимо, ввиду неочевидности и сложности действия. Юзабилисты всегда говорят на такой ивент аяяй :)
Понятное дело что подобный функционал должен применяться только тогда когда он нужен.

В нашем случае он используется так как общий интерфейс приложения ассоциируется с окнами в ОС, и есть определённые «фишки» при использовании клика и дабл.клика — быстрое переключение режимов отображения ( превью, активен, полный размер ) и подобное.
Не совсем понял где на вашем скриншоте нужно кликать дважды. На уменьшенных превьюшках, верно? А что будет, если я просто кликну на превью, без двойного клика?
Здесь не отображен режим на два клика.
Я просто хотел показать пример интерфейса в котором такой функционал чаще востребован чем нет.

Но режим «полный размер» вот:
Самое интересное, что то, куда надо дважды кликнуть для получения режима «полный размер», так и осталось загадкой. :) Просто чисто из любопытства было интересно попытаться понять проблему и решить задачу иным путем. Можно было бы, например, не убирать dblclick, но при этом по одинарному щелчку (по превью) показывать какую-то иконку поверх окна, приглашающую в «полный размер».
Прошу прощения что не ответил.
Кликнуть можно по превью и по области вокруг активного контента ( карпет ) как один раз, так и два:
  • один раз отображает чуть больше информации и даёт воспроизвести контент ( то-есть быстрый доступ, просмотреть что там к чему и т.д. )
  • два раза — то-же самое + связанный контент и полную информацию

Ну и прочее подобное.
Понял, спасибо. Просто было интересно.
По поводу вашего предложения относительно иконки — в нашем конкретно случае можно использовать подобное в качестве подсказки до клика — во время периода «обучения» пользователя. Но это уже нюансы, которыми должны заниматься дизайнеры.
Так что спасибо за идею.
ИМХО, это проблемы проектирования UI. И в последнюю очередь проблема click\dblclick.

p.s. плюс ко всему dblclick нажатия может регулироваться на уровне ОС.
Кстати, у современных браузеров есть (event).detail, который больше 1, если это даблклик, триплклик или квадруплклик.
Спасибо, полезным будет Ваш материал.
Пока еще конечно сталкиваться не приходилось в работе, но думаю еще придется)
Sign up to leave a comment.

Articles

Change theme settings