Лава Лампа навигационная jQuery Firefox
Я испытываю странную проблему со своей навигацией по лампе лавы. Он адаптирован после урока Джеффри Вей по лампам. Код для лавовой лампы находится внизу. Проблемы появляются в основном в Firefox (я использую FF6), но иногда также в Chrome и Safari (но не в IE9): оранжевая линия над пунктом меню иногда слишком длинная и слишком большая справа при загрузке страницы. Когда я наводю курсор мыши на элемент, он сосредотачивается на нем и остается там, как и должно быть с самого начала. Есть идеи, почему это происходит? Что-то странное с position(). Left и externalWidth()? Обратная связь очень ценится!
(function($) {
$.fn.spasticNav = function(options) {
options = $.extend({
speed: 500,
reset: 1500,
color: '#F29400',
easing: 'easeOutExpo'
}, options);
return this.each(function() {
var nav = $(this),
currentPageItem = $('#active', nav),
stroke,
reset;
$('<li id="stroke"></li>').css({
width: currentPageItem.outerWidth(),
height: 4,
margin: 0,
left: currentPageItem.position().left,
top: currentPageItem.position().top,
backgroundColor: options.color
}).appendTo(this);
stroke = $('#stroke', nav);
$('a:not(#stroke)', nav).hover(function() {
// mouse over
clearTimeout(reset);
stroke.animate(
{
left : $(this).position().left,
width : $(this).width()
},
{
duration : options.speed,
easing : options.easing,
queue : false
}
);
}, function() {
// mouse out
reset = setTimeout(function() {
stroke.animate({
width : currentPageItem.outerWidth(),
left : currentPageItem.position().left
}, options.speed)
}, options.reset);
});
});
};
})(jQuery);
2 ответа
Я была такая же проблема. Попробуйте использовать трюк jquery:
$(document).ready(function(){ bla bla bla });
или если вы предпочитаете:
$(window).load(function(){ bla bla bla });
Добавьте это перед функцией, в которой вы вызываете основной Java-скрипт меню Java, например:
$(window).load(function(){$('#topmenu_ul').spasticNav();});
Я была такая же проблема.
Проблема связана с точным моментом, когда браузер загружает шрифт:
IE загрузит файл.eot немедленно, когда встретит объявление @font-face.
Gecko (то есть Firefox), Webkit и Opera все ждут, пока не встретят HTML, соответствующий правилу>CSS, с набором шрифтов, включающим шрифт @font-face.
Я предполагаю, что у вас есть объявление font-face в теле оператора CSS, применяя его ко всей странице, и у вас есть оператор lavaLamp в событии jQuery(document).ready() следующим образом:
jQuery(document).ready(function() {
jQuery('.ha-main-menu ul').lavaLamp({startItem: 3});
});
поэтому, когда плагин lavaLamp создан, тело css по-прежнему не применяется, и вычисления о позиционировании по размеру неверны, они ссылаются на старый шрифт до применения font-face.
Как вы можете видеть в этом вопросе Как узнать, когда был применен font-face, одним из решений является вызов lavaLamp в событии onreadystatechange, ожидая, пока document.readystate === 'complete', следующим образом:
document.onreadystatechange = function () {
if (document.readyState == "complete") {
jQuery('.ha-main-menu ul').lavaLamp({startItem: 3});
}
}
Итак, lavaLamp запускается после загрузки font-face, поэтому методы size-position, используемые внутри плагина lavaLamp, будут правильными.