"РозÑмна" пÑдказка
ÐапиÑÑÑÑ ÑÑнкÑÑÑ, Ñка показÑваÑиме ÑпливаÑÑÑ Ð¿ÑÐ´ÐºÐ°Ð·ÐºÑ Ð½Ð°Ð´ елеменÑом лиÑе ÑодÑ, коли коÑиÑÑÑÐ²Ð°Ñ Ð²ÐµÐ´Ðµ вказÑвник миÑÑ Ð±ÐµÐ·Ð¿Ð¾ÑеÑеднÑо до нÑого, але не кÑÑÐ·Ñ Ð½Ñого.
ÐнÑими Ñловами, ÑкÑо коÑиÑÑÑÐ²Ð°Ñ Ð½Ð°Ð²Ð¾Ð´Ð¸ÑÑ Ð²ÐºÐ°Ð·Ñвник миÑÑ Ð½Ð° ÐµÐ»ÐµÐ¼ÐµÐ½Ñ Ñ Ð·ÑпинÑÑÑÑÑÑ Ð½Ð° нÑомÑ, показÑÑÑÑÑÑ Ð¿Ñдказка. Ð ÑкÑо пÑоÑÑо пÑовели миÑеÑ, Ñо показÑваÑи пÑÐ´ÐºÐ°Ð·ÐºÑ Ð²Ð·Ð°Ð³Ð°Ð»Ñ Ð½Ðµ поÑÑÑбно, ÐºÐ¾Ð¼Ñ Ð¼Ð¾Ð¶Ðµ ÑподобаÑиÑÑ Ð´Ð¾Ð´Ð°Ñкове мигоÑÑннÑ?
Ð¢ÐµÑ Ð½ÑÑно ми можемо вимÑÑÑÑи ÑвидкÑÑÑÑ Ð· ÑÐºÐ¾Ñ ÑÑÑ Ð°ÑÑÑÑÑ Ð²ÐºÐ°Ð·Ñвник над елеменÑом, Ñ ÑкÑо вона (ÑвидкÑÑÑÑ) повÑлÑна, ми пÑипÑÑкаÑмо, Ñо вказÑвник пÑÐ¾Ñ Ð¾Ð´Ð¸ÑÑ âнад елеменÑомâ Ñ Ð¿Ð¾ÐºÐ°Ð·ÑÑмо ÑпливаÑÑÑ Ð¿ÑдказкÑ, ÑкÑо вона Ñвидка, ми ÑгноÑÑÑмо Ñей пÑÐ¾Ñ Ñд вказÑвника.
У ÑÑÐ¾Ð¼Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð²Ð¸ маÑÑе опиÑаÑи ÐºÐ»Ð°Ñ Ñ ÑÑвоÑиÑи ÑнÑвеÑÑалÑний обâÑÐºÑ new HoverIntent(options)
Ðого options:
elemâ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ Ð´Ð»Ñ Ð²ÑдÑÑеженнÑ.overâ ÑÑнкÑÑÑ, Ñка викликаÑÑÑÑÑ, ÑкÑо миÑа пÑдÑйÑла до елеменÑа: ÑобÑо вона повÑлÑно ÑÑÑ Ð°ÑÑÑÑÑ Ð°Ð±Ð¾ зÑпинÑÑÑÑÑÑ Ð½Ð°Ð´ ним.outâ ÑÑнкÑÑÑ Ð´Ð»Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ, коли вказÑвник залиÑÐ°Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ (ÑкÑо бÑло викликаноover).
ÐÑиклад викоÑиÑÑÐ°Ð½Ð½Ñ Ñакого обâÑкÑа Ð´Ð»Ñ Ð¿Ñдказки:
// зÑазок пÑдказки
let tooltip = document.createElement('div');
tooltip.className = "tooltip";
tooltip.innerHTML = "Tooltip";
// об'ÑÐºÑ Ð±Ñде ÑÑежиÑи за миÑÐµÑ Ñа викликаÑиме over/out
new HoverIntent({
elem,
over() {
tooltip.style.left = elem.getBoundingClientRect().left + 'px';
tooltip.style.top = elem.getBoundingClientRect().bottom + 5 + 'px';
document.body.append(tooltip);
},
out() {
tooltip.remove();
}
});
Як Ñе Ð¼Ð°Ñ Ð¿ÑаÑÑваÑи:
ЯкÑо наводиÑи миÑÑ Ð½Ð° ÐµÐ»ÐµÐ¼ÐµÐ½Ñ âclockâ Ñвидко, Ñо нÑÑого не вÑдбÑваÑÑÑÑÑ, а ÑкÑо ви ÑобиÑе Ñе повÑлÑно або зÑпинÑÑÑеÑÑ Ð½Ð° нÑомÑ, Ñо зâÑвиÑÑÑÑ ÑпливаÑÑа пÑдказка.
ÐвеÑнÑÑÑ ÑвагÑ: ÑпливаÑÑа пÑдказка не âблимаÑâ, коли вказÑвник пеÑемÑÑÑÑÑÑÑÑ Ð¼Ñж вкладенними елеменÑами вÑеÑÐµÐ´Ð¸Ð½Ñ âclockâ.
ÐлгоÑиÑм виглÑÐ´Ð°Ñ Ð¿ÑоÑÑо:
- ÐодайÑе обÑобники
onmouseover/outна елеменÑ. ТÑÑ Ñакож можна викоÑиÑÑовÑваÑиonmouseenter/leave, але вони Ð¼ÐµÐ½Ñ ÑнÑвеÑÑалÑнÑ, Ñ Ð½Ðµ пÑаÑÑваÑимÑÑÑ, ÑкÑо ми викоÑиÑÑаÑмо делегÑÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð´Ñй. - Ðоли вказÑвник миÑÑ ÑвÑйÑов на елеменÑ, поÑнÑÑÑ Ð²Ð¸Ð¼ÑÑÑваÑи ÑвидкÑÑÑÑ Ð½Ð°
mousemove. - ЯкÑо ÑвидкÑÑÑÑ Ð½Ð¸Ð·Ñка, Ñо запÑÑкаÑмо
over. - Ðоли вказÑвник виÑ
одиÑÑ Ð·Ð° Ð¼ÐµÐ¶Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñа, Ñ
overзакÑнÑила ÑÐ²Ð¾Ñ ÑобоÑÑ, запÑÑкаÑмоout.
Ðле Ñк вимÑÑÑÑи ÑвидкÑÑÑÑ?
ÐеÑÑа ÑÐ´ÐµÑ Ð¼Ð¾Ð¶Ðµ бÑÑи ÑакоÑ: запÑÑкаÑи ÑÑнкÑÑÑ ÐºÐ¾Ð¶Ð½Ñ 100ms Ñ Ð²Ð¸Ð¼ÑÑÑваÑи вÑдÑÑÐ°Ð½Ñ Ð¼Ñж попеÑеднÑÐ¾Ñ Ñа Ð½Ð¾Ð²Ð¾Ñ ÐºÐ¾Ð¾ÑдинаÑами. ЯкÑо вÑдÑÑÐ°Ð½Ñ Ð¼Ð°Ð»ÐµÐ½Ñка, Ñо ÑвидкÑÑÑÑ Ð½ÐµÐ²ÐµÐ»Ð¸ÐºÐ°.
Ðа жалÑ, Ñ JavaScript Ð½ÐµÐ¼Ð°Ñ ÑпоÑÐ¾Ð±Ñ Ð¾ÑÑимаÑи поÑоÑÐ½Ñ ÐºÐ¾Ð¾ÑдинаÑи вказÑвника миÑÑ. ÐÐµÐ¼Ð°Ñ ÑакиÑ
ÑÑнкÑÑй, Ñк getCurrentMouseCoordinates().
Ðдиний ÑпоÑÑб оÑÑимаÑи кооÑдинаÑи â в обÑÐ¾Ð±Ð½Ð¸ÐºÑ Ð¿Ð¾Ð´Ñй миÑÑ, напÑиклад mousemove, Ñ Ð±ÑаÑи кооÑдинаÑи з обâÑкÑа подÑÑ.
ÐÑже, давайÑе додамо обÑобник на mousemove, де вÑдÑÑежемо Ñ Ð·Ð°Ð¿Ð°Ð¼âÑÑаÑмо поÑоÑÐ½Ñ ÐºÐ¾Ð¾ÑдинаÑи. Ð Ð´Ð°Ð»Ñ Ð±Ñдемо поÑÑвнÑваÑи ÑÑ
Ñаз на 100ms.
P.S. ÐвеÑнÑÑÑ ÑвагÑ: ÑеÑÑи ÑÑÑÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑÑ dispatchEvent, Ñоб пеÑевÑÑиÑи, Ñи пÑдказка пÑаÑÑÑ Ð¿ÑавилÑно.
ÐÑдкÑиÑи ÑÑÑÐµÐ½Ð½Ñ Ñз ÑеÑÑами в пÑÑоÑниÑÑ.