Mam pojemnik z kafelkami (trawa, woda itp.), Aw niektórych z nich mam przedmioty (obramowania, drzewa i przedmioty ogólne). Ze względu na naturę sprite'ów wszystkie przedmioty mają rozmiar 64x64, a płytki są tylko 32x32.Nie wyzwalaj zdarzenia najechania na dzieci
Mój problem polega na tym, że chcę wywołać zdarzenie na kafelkach, ale czasami są one zacienione przez inne elementy kafli.
Zdjęcie poniżej pokazuje problem. Gruba zielona powierzchnia to kafelek, który staje się unerwiony, gdy chcę unieść kafelek drzewa.
the problem http://upload.cip.nu/pfile.php?file_id=2327
CSS:
#map_canvas .tile{
height: 32px;
position: absolute;
width: 32px;
}
#map_canvas .tile .item{
background-position: bottom right;
background-repeat: no-repeat;
bottom: 0;
display: inline-block;
height: 64px;
margin: 0;
padding: 0;
position: absolute;
right: 0;
}
HTML, uproszczone:
<div class="tile" style="background-image: url(grass.png);"></div>
<div class="tile" style="background-image: url(grass.png);"></div>
<div class="tile" style="background-image: url(grass.png);">
<div class="item" style="background-image(top-left-border.png);"></div>
</div>
Oto demo na żywo http://sleavely.com/tiles/
ja nawet nie wiem, jak wyrażenie pytanie, ale tutaj idzie:
Czy można wywołać zdarzenie tylko w elemencie nadrzędnym (.tile), aby przepełnione dzieci (.item) nie zaciemniały tego, który kafelek naprawdę unoszą?
EDIT: Dzięki @Brilliand I wdrożone następujące
function figureOutTile(e){
var $source = jQuery(e.srcElement);
if($source.hasClass("item")){
var $parent = $source.parent();
var posx = $parent.attr("col");
var posy = $parent.attr("row");
if(e.offsetY <= 32){
if(e.offsetX <= 32){
return jQuery(".tile[col="+ (posx-1) +"][row="+ (posy-1) +"]");
}else{
return jQuery(".tile[col="+ posx +"][row="+ (posy-1) +"]");
}
}else{
if(e.offsetX <= 32){
return jQuery(".tile[col="+ (posx-1) +"][row="+ posy +"]");
}else{
return $parent;
}
}
}else{
return $source;
}
}
jQuery("#map_viewport").on({
mouseenter: function(e) {
var $target = figureOutTile(e);
$target.addClass('hovered');
},
mouseleave: function() {
jQuery(".tile.hovered").removeClass('hovered');
}
}, '.tile');
Czy możemy zobaczyć Twój javascript? Nic w kodzie, który wysłałeś do tej pory, nie dotyczy zawisu. – Fresheyeball
Wow, to bardzo szczegółowe pytanie. Ale myślę, że sprowadza się to do bulgotania zdarzeń. – Jivings
@Fresheyeball: W tej chwili jest to po prostu 'jQuery (" # map_viewport "). On (" hover "," .tile ", funkcja (e) {' której używam do przełączania klasy na kafelku. że zdarzenie uruchamia się na niewłaściwym kafelku – Sleavely