zepto.js: плагины Viewport и Lazyload?

Раньше я работал с jQuery и использовал

Теперь я использую zepto.js вместо jQuery и, конечно, теперь подключаемые модули из-за следующих ошибок.

Uncaught ReferenceError: jQuery не определен

Если я обновлю оба плагина с })(jQuery); до })(Zepto);, появятся следующие ошибки…

Uncaught TypeError: не удается прочитать свойство ':' неопределенного

Любые идеи по этому поводу? Можно ли заставить эти плагины работать с Zepto? Разве Zepto не почти такой же, как Jquery, только без старой совместимости браузера и дополнительных сенсорных событий?

Заранее спасибо.

Мэтт


person matt    schedule 03.07.2012    source источник
comment
Или кто-нибудь знает ленивый javascript без зависимостей для изображений? Я просто хотел бы использовать хороший и работающий скрипт отложенной загрузки для своего веб-сайта и использовать zepto, а не jquery.   -  person matt    schedule 03.07.2012
comment
Так как я тоже работаю с Zepto, посмотрю. Селекторы видового экрана в любом случае пользуются некоторой любовью, и удобные методы будут удалены из отложенной загрузки, так как у меня есть ощущение, что большинство людей их не использует (и они в любом случае доступны в плагине Viewport).   -  person Mika Tuupola    schedule 31.07.2012


Ответы (2)


Строка, которая вызывает ошибку, выглядит так:

.extend($.expr[':'], {

jQuery использует собственный оценщик селекторов в стиле CSS, который называется Sizzle. В дополнение к тому, что вы можете использовать $('#id .cls1 .cls2, #otherid') и стандартные псевдоселекторы CSS, он поддерживает расширение с помощью настраиваемых селекторов, таких как встроенный селектор :visible или селектор :above-the-fold, предоставляемый этим плагином.

Поскольку современные мобильные браузеры поддерживают встроенную функцию document.querySelectorAll для выбора CSS, такая библиотека, как Sizzle, не требуется, что позволяет сэкономить значительное количество JavaScript. (Вот почему мы любим Zepto.) Побочным эффектом является то, что эти пользовательские селекторы не поддерживаются, а $.expr не существует. Любая строка, которая зависит от них, включая эту строку в плагине, потерпит неудачу.

Хорошей новостью является то, что это удобные селекторы, и вы можете просто вырезать их из своего скрипта. Если вы не хотите таким образом находить элементы выше и ниже сгиба, вы можете просто вырезать их из кода. Вам также нужно будет обратиться к строке, где библиотека вызывает $this.is(":visible"), но кроме этого я не вижу ничего слишком специфичного для jQuery.

person Brian Nickel♦    schedule 05.07.2012

Вам также нужно иметь дело с $window.scrollLeft(), которая не реализована в Zepto (вы можете использовать window.pageXOffset).

Я реализовал полную совместимость с Zepto в своей ветке: https://github.com/adamvert/jquery_lazyload

person adamvert    schedule 26.08.2013