Reputation: 167
I need a little help consolidating my code. This is the working code but I can't seem to get it when I try and simplify.
I wrote it with jquery and I've new to javascript as a whole. It's basically a loop but I'm not sure how to loop it through.
<script type="text/javascript">
// house_one
$('.house_one')
.mouseenter(function() {
$('.box_one').addClass('hover');
})
.mouseleave(function() {
$('.box_one').removeClass('hover');
});
$('.box_one')
.mouseenter(function() {
$('.house_one').addClass('house_hover');
})
.mouseleave(function() {
$('.house_one').removeClass('house_hover');
});
//house_two
$('.house_two')
.mouseenter(function() {
$('.box_two').addClass('hover');
})
.mouseleave(function() {
$('.box_two').removeClass('hover');
});
$('.box_two')
.mouseenter(function() {
$('.house_two').addClass('house_hover');
})
.mouseleave(function() {
$('.house_two').removeClass('house_hover');
});
// house_three
$('.house_three')
.mouseenter(function() {
$('.box_three').addClass('hover');
})
.mouseleave(function() {
$('.box_three').removeClass('hover');
});
$('.box_three')
.mouseenter(function() {
$('.house_three').addClass('house_hover');
})
.mouseleave(function() {
$('.house_three').removeClass('house_hover');
});
// house_four
$('.house_four')
.mouseenter(function() {
$('.box_four').addClass('hover');
})
.mouseleave(function() {
$('.box_four').removeClass('hover');
});
$('.box_four')
.mouseenter(function() {
$('.house_four').addClass('house_hover');
})
.mouseleave(function() {
$('.house_four').removeClass('house_hover');
});
// house_five
$('.house_five')
.mouseenter(function() {
$('.box_five').addClass('hover');
})
.mouseleave(function() {
$('.box_five').removeClass('hover');
});
$('.box_five')
.mouseenter(function() {
$('.house_five').addClass('house_hover');
})
.mouseleave(function() {
$('.house_five').removeClass('house_hover');
});
// house_six
$('.house_six')
.mouseenter(function() {
$('.box_six').addClass('hover');
})
.mouseleave(function() {
$('.box_six').removeClass('hover');
});
$('.box_six')
.mouseenter(function() {
$('.house_six').addClass('house_hover');
})
.mouseleave(function() {
$('.house_six').removeClass('house_hover');
});
// house_seven
$('.house_seven')
.mouseenter(function() {
$('.box_seven').addClass('hover');
})
.mouseleave(function() {
$('.box_seven').removeClass('hover');
});
$('.box_seven')
.mouseenter(function() {
$('.house_seven').addClass('house_hover');
})
.mouseleave(function() {
$('.house_seven').removeClass('house_hover');
});
// house_eight
$('.house_eight')
.mouseenter(function() {
$('.box_eight').addClass('hover');
})
.mouseleave(function() {
$('.box_eight').removeClass('hover');
});
$('.box_eight')
.mouseenter(function() {
$('.house_eight').addClass('house_hover');
})
.mouseleave(function() {
$('.house_eight').removeClass('house_hover');
});
</script>
Upvotes: 1
Views: 102
Reputation: 30015
function setupHovers(house, box){
house = $(house);
box = $(box);
house.hover(function(){ box.toggleClass('hover'); });
box.hover(function(){ house.toggleClass('house_hover'); });
}
boxHouseArray = ['one','two','three','four','five','six' ...]; //
for(boxHouse in boxHouseArray){
setupHovers('.house_'+boxHouse, '#box_'+boxHouse);
}
or even better change your markup slightly:
<a href="/interiors/house_1" class="house_list">House 04</a>
and
<div class="box"></div>
now you can go like this:
var houses = $('.house_list'), boxes = $('.box');
houses.hover(function(){
boxes.eq( houses.index(this) ).toggleClass('hover');
});
boxes.hover(function(){
houses.eq( boxes.index(this) ).toggleClass('house_hover');
});
The idea here is no extra id's or markup, we simply use the order of the elements in the markup as our configuration. Lets say we mouse over the first box: index(this)
will tell us if its the first box on the page and trigger the hover class on the first house via eq
Upvotes: 0
Reputation: 94101
Just use two classes box
and house
and all of that can be reduced to this:
$('.house').on('mouseenter mouseleave', function(){
$(this).closest('.box').toggleClass('hover')
})
$('.box').on('mouseenter mouseleave', function(){
$(this).closest('.house').toggleClass('house_hover')
})
Edit:
If you're markup doesn't work with closest()
because the elements don't share the same container then use ids in addition to the general classes.
$('.house').on('mouseenter mouseleave', function(){
// Assuming id = house_one (or two, three etc...)
var id = this.id.split('_')[1]
$('#box_'+ id).toggleClass('hover')
})
Upvotes: 3