У меня есть две функции jquery, которые делают что-то похожее (одно для мыши, другое на клике), и они, кажется, мешают друг другу. Первый изменяет фон, используя класс jquery ui switchclass при зависании. Это также приведет к подменю. Когда вы нажимаете на ссылку в подменю, она запускает функцию щелчка, которая удаляет предыдущее меню. и использует switchclass для изменения этого фона. Проблема заключается в том, как только вы двигаете мышью, она запускает мышь и меняет фон обратно на фоновый рисунок по умолчанию.
Это наводка.
$('.hoverbg').mouseover(
function(){
var newimg = $(this).attr('data-bgsrc');
$('#bg img[src="'+newimg+'"]').switchClass("inactive", "active", 0, "easeInOutQuad");
$('#bg img[src!="'+newimg+'"]').switchClass("active", "inactive", 0, "easeInOutQuad");
});
$('.nav').mouseout
(function(){
if ($('#sitewrapper').hasClass("c"))
{
event.stopImmediatePropagation()
}
else
{
$('#bg img[src="images/bg.jpg"]').switchClass("inactive", "active", 0, "easeInOutQuad");
$('#bg img[src!="images/bg.jpg"]').switchClass("active", "inactive", 0, "easeInOutQuad");
}
});
Вот событие click. он скрывает класс nav, который является частью мыши. технически я догадываюсь, что заставил вас выучить это меню, но у меня есть он добавляет класс в div sitewrapper и останавливается, если класс присутствует.
$('a#navclick').click(function(){
var iclick = $(this).attr('data-iclick');
var clickimg = $(this).attr('click-data-bgsrc');
if ($('#topId').hasClass('.topOn'))
{
$('#bg img[src="'+clickimg+'"]').switchClass("inactive", "active", 0, "easeInOutQuad");
$('#bg img[src!="'+clickimg+'"]').switchClass("active", "inactive", 0, "easeInOutQuad");
}
else
{
$('#sitewrapper').addClass("c");
$('img.logo').hide("drop", {direction: "down"}, 1000);
$('.nav').hide("drop", {direction: "down"}, 1000);
$('#bg img[src="'+clickimg+'"]').switchClass("inactive", "active", 0, "easeInOutQuad");
$('#bg img[src!="'+clickimg+'"]').switchClass("active", "inactive", 0, "easeInOutQuad");
$('#topId').addClass('topOn');
$('#topId').show("slide", {direction:"up"}, 1000);
}
});
Я понял. Функция щелчка была в порядке, так выглядит;
$('a#navclick').click(function(){
var iclick = $(this).attr('data-iclick');
var clickimg = $(this).attr('click-data-bgsrc');
if ($('#topId').hasClass('topOn'))
{
$('#bg img[src="'+clickimg+'"]').switchClass("inactive", "active", 0, "easeInOutQuad");
$('#bg img[src!="'+clickimg+'"]').switchClass("active", "inactive", 0, "easeInOutQuad");
}
else
{
$('#topId').addClass('topOn');
$('img.logo').hide("drop", {direction: "down"}, 1000);
$('.nav').hide("drop", {direction: "down"}, 1000);
$('#bg img[src!="'+clickimg+'"]').switchClass("active", "inactive", 0, "easeInOutQuad");
$('#bg img[src="'+clickimg+'"]').switchClass("inactive", "active", 0, "easeInOutQuad");
$('#topId').show("slide", {direction:"up"}, 1000);
}
});
Функция hover требовала оператора if, чтобы остановить его после нажатия щелчка. Таким образом, я получил событие click, добавляя класс в div, который становится видимым с именем topOn. затем добавил оператор if, который проверяет, имеет ли этот div класс topOn. Это похоже на это;
$('.hoverbg').mouseenter(
function(){
var newimg = $(this).attr('data-bgsrc');
$('#bg img[src="'+newimg+'"]').switchClass("inactive", "active", 0, "easeInOutQuad");
$('#bg img[src!="'+newimg+'"]').switchClass("active", "inactive", 0, "easeInOutQuad");
});
$('.hoverbg').mouseleave
(function(){
if(jQuery('#topId').hasClass('topOn'))
{
jQuery('.hoverbg').stop();
}
else
{
$('#bg img[src="images/bg.jpg"]').switchClass("inactive", "active", 0, "easeInOutQuad");
$('#bg img[src!="images/bg.jpg"]').switchClass("active", "inactive", 0, "easeInOutQuad");
}
});