2015-07-09 8 views
8

Ich bin auf Mouseenter/Mouselave mit jQuery durchführen und es scheint zu funktionieren, aber nicht, wenn ich das Div. Dies funktioniert nur, wenn ich das eigentliche Fenster verlasse.Entfernen der Klasse mit der Maus Beenden

Dies ist meine jQuery

$(document).ready(function() { 
    $(".pods .col").on("mouseenter", function() { 
    $(this).find(".pod-overlay").addClass("show") 
    }); 
    $(".pods .col").on("mouseleave", function() { 
    $(this).find(".pod-overlay").removeClass("show") 
    }); 
}); 

Das ist mein HTML ist

<div id="splash" class="section section-splash bg"> 
    <div class="pods"> 
    <div class="col col-4"> 
     <div id="pod-splash-food" class="pod pod-food"> 
     <div class="pod-overlay"></div> 
     </div> 
    </div> 
    </div> 
</div> 

ich eine js Geige hier getan haben. Ich lerne jQuery, also wird Rat geschätzt.

http://jsfiddle.net/34h48148/

Antwort

3

Ihre Funktion funktioniert einwandfrei! Das Problem ist die Überlagerung. Du platzierst das Absolute und lässt es den ganzen Körper bedecken. Also, ändern Sie Ihr CSS ein wenig, platzieren Sie .pods und .col relativ.

.pods,.col { overflow: auto; position: relative; } 

Updated Fiddle

Das einzige, was ich auf Ihre Funktion ändern würde, ist verbindlich beide Ereignisse am selben Anrufer:

$(document).ready(function() { 
    $(".pods .col").on("mouseenter", function() { 
     $(this).find(".pod-overlay").addClass("show") 
    }).on("mouseleave", function() { 
     $(this).find(".pod-overlay").removeClass("show") 
    }); 
}); 
+0

Haha - Kirsty hat heute fast alle Antworten akzeptiert – mplungjan

3

Sie auch hover Veranstaltung wie diese verwenden:

$(document).ready(function() { 
    $(".pods .col").hover(function() { 
    $(this).find(".pod-overlay").addClass("show") 
    }, function() { 
    $(this).find(".pod-overlay").removeClass("show") 
    }); 
}); 

Und das ist die hover event doc


Allerdings ist das Problem nicht die Funktion, aber die CSS zugeordnet die pod-overlay Klasse.
diese beiden Attribute in Ihrem CSS hinzufügen:

.pod-overlay { 
    width:260px; 
    height:260px; 
    ... 
} 
+0

@mplungjan Dies wird nun arbeiten. Das eigentliche Problem liegt in der "Breite" und "Höhe" des Overlays und nicht in der Funktion (seine Funktion funktionierte). Btw, deine Funktion hat auch nicht funktioniert: 3 – tektiv

+0

Ich habe .on ("Hover") benutzt! – mplungjan

1

Sie reine css

.pods .col:hover .pod-overlay{ 
    visibility: visible; 
} 

.pods .col .pod-overlay{ 
    visibility: hidden; 
} 
+0

Hey Hacketo, http://www.asda.com/summer/index.html Ich habe versucht, dies wiederherzustellen, daher die jquery :) –

+0

@KirstyMarks das kann mit reinem CSS getan werden, aber es scheint, dass sie Javascript zu tun verwenden es – Hacketo

+0

fairer Kommentar, danke Hacketo :) –

0

Die eigentliche Mausereignis Sie ist Onmouseout

$(".pods .col").on("mouseout", function() { 
    $(this).find(".pod-overlay").removeClass("show") 
}); 
3
verwenden könnte

Ihre Methode aufrufen sollte sein ist in Ordnung, aber Sie es funktioniert nicht auf mouseleave ist, weil die Überlagerung auf .col und er ist nce mouseleave wird nie ausgelöst. Sie können pointer-events auch abgesehen von dem, was die anderen Antworten vorschlagen. So etwas wie dies

.pod-overlay { 
    pointer-events: none; 
    .... 
} 

Hier ist die aktualisierte Demo http://jsfiddle.net/dhirajbodicherla/34h48148/9/

PS: Ich habe die Grenze der Overlay nur die Overlay-Grenzen zu zeigen.

+3

Dies ist die beste Antwort. – lmgonzalves

1

Actualy, der Code funktioniert, ist das Problem, dass Sie Stellen Sie die gerade auf die ".pods" -Klasse, die die ganze Seite abdecken ... So wird die gerade wird nur ausgelöst, wenn Sie die Seite

1

lernen jquery, so wird Beratung geschätzt.

jQuery nicht erforderlich, um die Anforderung zu erfüllen. Versuchen verwendet css Pseudoklasse :hover

.pod { 
 
    width: 250px; 
 
    height: 250px; 
 
    background-color: blue; 
 
    float: left; 
 
} 
 
.pod-overlay { 
 
    display: none; 
 
    z-index: 2; 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
    bottom: 0; 
 
    right: 0; 
 
    background-color: #fff; 
 
    background-color: rgba(255, 255, 255, .9) 
 
} 
 

 
.pods .col:hover .pod-overlay { 
 
    display:block; 
 
}
<div id="splash" class="section section-splash bg"> 
 
    <div class="pods"> 
 
     <div class="col col-4"> 
 
      <div id="pod-splash-food" class="pod pod-food"> 
 
       <div class="pod-overlay"></div> 
 
      </div> 
 
     </div> 
 
    </div> 
 
</div>

jsfiddle http://jsfiddle.net/34h48148/11/

Verwandte Themen