Шаблон пÑоекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Â«Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸ÐµÂ» (behavior) позволÑÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑ Ñ Ð¸ÑÑÑе обÑабоÑÑики на ÑлеменÑе деклаÑаÑивно, ÑÑÑановкой ÑпеÑиалÑнÑÑ HTML-аÑÑибÑÑов и клаÑÑов.
ÐпиÑание
ÐÑиÑм пÑоекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Â«Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸ÐµÂ» ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· двÑÑ ÑаÑÑей:
- ÐлеменÑÑ ÑÑавиÑÑÑ Ð°ÑÑибÑÑ, опиÑÑваÑÑий его поведение.
- ÐÑи помоÑи делегиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÑавиÑÑÑ Ð¾Ð±ÑабоÑÑик на докÑменÑ, коÑоÑÑй Ð»Ð¾Ð²Ð¸Ñ Ð²Ñе клики и, еÑли ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¸Ð¼ÐµÐµÑ Ð½ÑжнÑй аÑÑибÑÑ, пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ Ð½Ñжное дейÑÑвие.
ÐÑимеÑ
ÐапÑимеÑ, добавим «поведение», коÑоÑое вÑем ÑлеменÑам, Ñ ÐºÐ¾ÑоÑÑÑ
ÑÑÐ¾Ð¸Ñ Ð°ÑÑибÑÑ data-counter, бÑÐ´ÐµÑ Ð¿Ñи клике ÑвелиÑиваÑÑ Ð·Ð½Ð°Ñение на 1:
СÑÑÑÑик:
<button data-counter>1</button>
ÐÑÑ ÑÑÑÑÑик:
<button data-counter>2</button>
<script>
document.onclick = function(event) {
if (!event.target.hasAttribute('data-counter')) return;
var counter = event.target;
counter.innerHTML++;
};
</script>
ÐÑли запÑÑÑиÑÑ HTML-код вÑÑе, Ñо пÑи клике на каждÑÑ ÐºÐ½Ð¾Ð¿ÐºÑ â ÐµÑ Ð·Ð½Ð°Ñение бÑÐ´ÐµÑ ÑвелиÑиваÑÑÑÑ.
ÐонеÑно, нам Ð²Ð°Ð¶Ð½Ñ Ð½Ðµ ÑÑÑÑÑики, а обÑий Ð¿Ð¾Ð´Ñ Ð¾Ð´, коÑоÑÑй они демонÑÑÑиÑÑÑÑ.
ÐлеменÑов data-counter Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑколÑко Ñгодно. ÐовÑе могÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑÑÑ Ð² HTML в лÑбой моменÑ. ÐÑи помоÑи делегиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ñ, ÑакÑиÑеÑки, добавили новÑй «пÑевдо-ÑÑандаÑÑнÑй» аÑÑибÑÑ Ð² HTML, коÑоÑÑй добавлÑÐµÑ ÑлеменÑÑ Ð½Ð¾Ð²ÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ («поведение»).
ÐÑÑ Ð¿ÑимеÑ
Ðобавим еÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ.
Сделаем Ñак, ÑÑо пÑи клике на ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ñ Ð°ÑÑибÑÑом data-toggle-id бÑÐ´ÐµÑ ÑкÑÑваÑÑÑÑ/показÑваÑÑÑÑ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм id:
<button data-toggle-id="subscribe-mail">
ÐоказаÑÑ ÑоÑÐ¼Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки
</button>
<form id="subscribe-mail" hidden>
ÐаÑа поÑÑа: <input type="email">
</form>
<script>
document.onclick = function(event) {
var target = event.target;
var id = target.getAttribute('data-toggle-id');
if (!id) return;
var elem = document.getElementById(id);
elem.hidden = !elem.hidden;
};
</script>
ÐÑÑ Ñаз замеÑим, ÑÑо Ð¼Ñ Ñделали. ТепеÑÑ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑкÑÑÑие-ÑаÑкÑÑÑие лÑÐ±Ð¾Ð¼Ñ ÑлеменÑÑ â даже не надо знаÑÑ JavaScript, можно пÑоÑÑо напиÑаÑÑ Ð°ÑÑибÑÑ data-toggle-id.
ÐÑо бÑÐ²Ð°ÐµÑ Ð¾ÑÐµÐ½Ñ Ñдобно â не нÑжно пиÑаÑÑ JavaScript-код Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлеменÑа, коÑоÑÑй должен ÑлÑжиÑÑ Ñакой кнопкой. ÐÑоÑÑо иÑполÑзÑем поведение.
ÐбÑаÑиÑе внимание: обÑабоÑÑик поÑÑавлен на document, клик на лÑбом ÑлеменÑе ÑÑÑаниÑÑ Ð¿ÑойдÑÑ ÑеÑез него, Ñак ÑÑо поведение опÑеделено глобалÑно.
ÐÐ»Ñ ÑвоиÑ
Ñелей Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ Ð² HTML лÑбÑе аÑÑибÑÑÑ, но ÑÑандаÑÑ ÑекомендÑÐµÑ Ð´Ð»Ñ ÑвоиÑ
Ñелей назÑваÑÑ Ð°ÑÑибÑÑÑ data-*.
РобÑабоÑÑике document.onclick Ð¼Ñ Ð¼Ð¾Ð³Ð»Ð¸ Ð±Ñ Ð¿ÑовеÑÑÑÑ Ð½Ðµ аÑÑибÑÑ, а клаÑÑ Ð¸Ð»Ð¸ ÑÑо-Ñо еÑÑ, но Ñ Ð°ÑÑибÑÑом â пÑоÑе и понÑÑнее вÑего.
Также Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑабоÑÑиков на document ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ addEventListener, ÑÑÐ¾Ð±Ñ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло добавиÑÑ Ð±Ð¾Ð»ÐµÐµ одного обÑабоÑÑика Ð´Ð»Ñ Ñипа ÑобÑÑиÑ.
ÐÑого
Шаблон «поведение» Ñдобен Ñем, ÑÑо ÑÐºÐ¾Ð»Ñ Ñгодно Ñложное JavaScript-поведение можно «навеÑиÑÑ» на ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¾Ð´Ð½Ð¸Ð¼ лиÑÑ Ð°ÑÑибÑÑом. Рможно â неÑколÑкими аÑÑибÑÑами на ÑвÑзаннÑÑ ÑлеменÑÐ°Ñ .
ÐдеÑÑ Ð¼Ñ ÑаÑÑмоÑÑели базовÑй пÑимеÑ, коÑоÑÑй можно как Ñгодно модиÑиÑиÑоваÑÑ Ð¸ маÑÑÑабиÑоваÑÑ. Ðажно не пеÑеÑÑеÑдÑÑвоваÑÑ.
ÐÑиÑм ÑазÑабоÑки «поведение» ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ Ð´Ð»Ñ ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑей ÑазмеÑки, как алÑÑеÑнаÑÐ¸Ð²Ñ Ð¼Ð¸Ð½Ð¸-ÑÑагменÑам JavaScript.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)