Zepto.js — легковесная библиотека, предназначенная для работы с DOM, очень похожая по синтаксису на jQuery, но с меньшим объёмом кода. Одним из её ключевых преимуществ является гибкость и возможность расширения функционала за счёт добавления собственных методов к объекту Zepto.
Все экземпляры Zepto являются объектами, наследующими методы через
прототип $.fn. Это позволяет добавлять новые функции,
которые будут доступны любому объекту Zepto:
$.fn.highlight = function(color) {
this.css('background-color', color);
return this; // поддержка цепочек методов
};
После этого можно использовать новый метод для любого элемента:
$('p').highlight('yellow');
Особенности:
this внутри метода ссылается на текущую коллекцию
элементов Zepto.this позволяет использовать цепочки вызовов
($('p').highlight('yellow').fadeIn();).Zepto также поддерживает создание статических
методов, которые привязываются к объекту $
напрямую, а не к отдельным элементам:
$.sum = function(a, b) {
return a + b;
};
console.log($.sum(5, 10)); // 15
Статические методы удобно использовать для утилитарных функций, не связанных с DOM.
extend для расширенийZepto предоставляет метод $.extend, позволяющий
объединять объекты или добавлять новые методы. С его помощью можно
расширять как статические методы, так и методы экземпляров:
$.fn.extend({
fadeOutAndRemove: function(duration) {
return this.fadeOut(duration, function() {
$(this).remove();
});
},
fadeInAndShow: function(duration) {
return this.fadeIn(duration);
}
});
Для статических методов:
$.extend({
randomInt: function(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
});
$.extend полезен для добавления сразу нескольких
методов, упрощая структуру кода и обеспечивая консистентность.
this, чтобы сохранить возможность
использования цепочек.each
или встроенные итерации:$.fn.changeText = function(newText) {
this.each(function(el) {
el.textContent = newText;
});
return this;
};
$.fn.addClassDelayed = function(className, delay) {
this.each(function(el) {
setTimeout(() => $(el).addClass(className), delay);
});
return this;
};
$.fn.scrollToElement = function(duration) {
if (this.length === 0) return this;
const el = this[0];
$('html, body').animate({ scrollTop: $(el).offset().top }, duration);
return this;
};
$.fn.setAttributes = function(attrs) {
this.each(function(el) {
for (let key in attrs) {
el.setAttribute(key, attrs[key]);
}
});
return this;
};
Методы Zepto могут не только модифицировать DOM, но и управлять событиями. Например, создание метода для однократного клика:
$.fn.onceCl ick = function(callback) {
this.each(function(el) {
$(el).one('click', callback);
});
return this;
};
Использование one гарантирует, что обработчик сработает
только один раз на каждом элементе коллекции.
Правильная структура добавления методов к Zepto включает:
$.fn для методов экземпляров.$.extend или прямого присвоения для
статических методов.this для сохранения цепочек вызовов.each или
встроенные итерации.Эти подходы позволяют создавать сложные, многофункциональные расширения, сохраняя лёгкость и производительность Zepto, обеспечивая при этом удобство и повторное использование кода.