After a few hours of fiddling and a little help from some friends I was able to come up with a better solution than before. The approach involves using a transparent element before the hovered element which expands from width:0px; height:0px; to width:10000px; height:10000px; and fires the same hover event as the gallery to display the next element. Using this approach, next is displayed no matter where the mouse is on the page, but only after the animation completes.
Updated Demo Here
body { overflow:hidden; }
#hoverHelper {
width:0px;
height:0px;
z-index:1;
position:absolute;
margin-top:-1000px;
margin-left:-1000px;
animation: hhAnimation .001s 3s forwards;
}
#actualHover {
width:50px;
height:50px;
background:teal;
animation: yourAnimation 3s linear forwards;
}
#next {
z-index:2;
position:relative;
display: none;
}
#actualHover:hover ~ #next, #hoverHelper:hover ~ #next, #next:hover {
display:inline-block;
}
@keyframes yourAnimation {
0% { background:teal; }
100% { background: red; }
}
@keyframes hhAnimation {
0% { width:0px;
height:0px;
}
100% { width:10000px;
height:10000px;
}
}
And the HTML (just make sure #next is after the others)
<div id='actualHover'></div>
<div id='hoverHelper'></div>
<a id='next'>Next</a>
I also added a little javascript to allow it to repeat and show you how it could be accessed
The solution should be fully cross-browser. The only negative thing about it is the overflow:hidden on the body which could be optimized further by either using javascript to determine the current window height/width and setting it to that (including on resize) or something similar
hoverpseudo-event is deprecated and removed in jQuery 1.9 and up: jquery.com/upgrade-guide/1.9/#hover-pseudo-event