JsAction - это не просто атрибут, это целая библиотека google-d ^ для обработки / отправки событий.
google / jsaction > README.md
JsAction - это крошечная библиотека делегирования событий, которая позволяет отделить узлы DOM, на которых происходит действие, от кода JavaScript, который обрабатывает действие.
Традиционным способом добавления обработчика событий является получение ссылки на узел и добавление обработчика событий к нему. JsAction позволяет нам сопоставлять события и имена обработчиков для этих событий с помощью пользовательского атрибута HTML, называемого jsaction.
Отдельно, JavaScript код регистрирует обработчики событий с заданными именами, которые не нужно раскрывать глобально. Когда происходит событие, имя действия сопоставляется с соответствующим обработчиком, который выполняется.
Наконец, JsAction отсоединяет обработку событий от реальных реализаций. Таким образом, можно позднее загрузить реализации, в то время как приложение всегда может реагировать на действия пользователя, отмеченные с помощью JsAction. Это может помочь значительно сократить время загрузки страницы, в частности, для приложений, отображаемых на стороне сервера.
Базовая c настройка jsaction похожа на
HTML
<script src="https://www.gstatic.com/jsaction/contract.js"></script>
<script src="https://www.gstatic.com/jsaction/dispatcher.js" ></script>
<div id="foo"
jsaction="leftNav.clickAction;dblclick:leftNav.doubleClickAction">
some content here </div>
JavaScript
const eventContract = new jsaction.EventContract();
// Events will be handled for all elements under this container.
eventContract.addContainer(document.getElementById('container'));
// Register the event types we care about.
eventContract.addEvent('click');
const dispatcher = new jsaction.Dispatcher();
eventContract.dispatchTo(dispatcher.dispatch.bind(dispatcher));
// Register individual handlers
const click = function(flow) {
// do stuff
alert('click event dispatched!');
};
dispatcher.registerHandlers(
'leftNav', // the namespace
null, // handler object
{ // action map
'clickAction': click
});
Давайте рассмотрим несколько примеров jsaction:
// A BASIC SETUP --- JSACTION
const eventContract = new jsaction.EventContract();
// Events will be handled for all elements under this container.
eventContract.addContainer(document.getElementById('container'));
// Register the event types we care about.
eventContract.addEvent('click');
const dispatcher = new jsaction.Dispatcher();
eventContract.dispatchTo(dispatcher.dispatch.bind(dispatcher));
// Register individual handlers
const click = function(flow) {
// do stuff
alert('click event dispatched!');
};
dispatcher.registerHandlers(
'leftNav', // the namespace
null, // handler object
{ // action map
'clickAction': click
});
<script src="https://www.gstatic.com/jsaction/contract.js"></script>
<script src="https://www.gstatic.com/jsaction/dispatcher.js" ></script>
<div id="container">
<div id="foo" jsaction="click:leftNav.clickAction">
some content here
</div>
</div>
- Пример двойного щелчка событие,
// Set up
const eventContract = new jsaction.EventContract();
// Events will be handled for all elements under this container.
eventContract.addContainer(document.getElementById('container'));
// Register the event types we care about.
eventContract.addEvent('dblclick');
const dispatcher = new jsaction.Dispatcher();
eventContract.dispatchTo(dispatcher.dispatch.bind(dispatcher));
// Register individual handlers
const dbClick = function(flow) {
// do stuff
alert('double-click event dispatched!');
};
dispatcher.registerHandlers(
'leftNav', // the namespace
null, // handler object
{ // action map
'doubleClickAction': dbClick
});
<script src="https://www.gstatic.com/jsaction/contract.js"></script>
<script src="https://www.gstatic.com/jsaction/dispatcher.js" ></script>
<div id="container">
<div id="foo" jsaction="dblclick:leftNav.doubleClickAction">
some content here
</div>
</div>
- Наконец, давайте посмотрим, как мы можем прикрепить несколько событий ,
// Set up
const eventContract = new jsaction.EventContract();
// Events will be handled for all elements under this container.
eventContract.addContainer(document.getElementById('container'));
// Register the event types we care about.
eventContract.addEvent('click');
eventContract.addEvent('mouseover');
eventContract.addEvent('mouseout');
const dispatcher = new jsaction.Dispatcher();
eventContract.dispatchTo(dispatcher.dispatch.bind(dispatcher));
// Register individual handlers
const click = function(flow) {
// do stuff
console.log('click called!');
};
const mouseOver = function(flow) {
// do stuff
console.log('mouseover called!');
};
const mouseOut = function(flow) {
// do stuff
console.log('mouseout called!');
};
dispatcher.registerHandlers(
'leftNav', // the namespace
null, // handler object
{ // action map
'clickAction': click,
'mouseOverAction': mouseOver,
'mouseOutAction': mouseOut
});
<script src="https://www.gstatic.com/jsaction/contract.js"></script>
<script src="https://www.gstatic.com/jsaction/dispatcher.js" ></script>
<div id="container">
<div id="foo" jsaction="click:leftNav.clickAction;mouseover:leftNav.mouseOverAction;mouseout:leftNav.mouseOutAction">
some content here
</div>
</div>
Вот полный список событий в jsaction, в которых большинство из них являются css событиями
^: сокращение от "google-developers";)