我试图在不使用jQuery UI的情况下在悬停时制作元素抖动并且遇到以下代码,但是我似乎无法弄清楚如何在悬停时触发,此代码具有随机效果并且每次都让我困惑我试着把它扩散开来。我试图让他们一次动画一个
$(function() {
var interval = 10;
var duration= 1000;
var shake= 3;
var vibrateIndex = 0;
var selector = $('aside.featured a'); /* Your own container ID*/
$(selector).click( /* The button ID */
function(){
vibrateIndex = setInterval(vibrate, interval);
setTimeout(stopVibration, duration);
});
var vibrate = function(){
$(selector).stop(true,false)
.css({position: 'relative',
left: Math.round(Math.random() * shake) - ((shake + 1) / 2) +'px',
top: Math.round(Math.random() * shake) - ((shake + 1) / 2) +'px'
});
}
var stopVibration = function() {
clearInterval(vibrateIndex);
$(selector).stop(true,false)
.css({position: 'static', left: '0px', top: '0px'});
};
});
答案 0 :(得分:8)
尝试这种方式: -
$(function() {
var interval = 10;
var duration= 1000;
var shake= 3;
var vibrateIndex = 0;
var selector = $('.box'); /* Your own container ID*/
$(selector).hover( /* The button ID */
function(){
vibrateIndex = setInterval(vibrate, interval);
},
function(){
clearInterval(vibrateIndex);
$(selector).stop(true,false)
.css({position: 'static', left: '0px', top: '0px'});
}
);
var vibrate = function(){
$(selector).stop(true,false)
.css({position: 'relative',
left: Math.round(Math.random() * shake) - ((shake + 1) / 2) +'px',
top: Math.round(Math.random() * shake) - ((shake + 1) / 2) +'px'
});
}
});
请参阅 DEMO
答案 1 :(得分:1)
使用CSS
.item:hover {
animation: shake 0.82s cubic-bezier(.36,.07,.19,.97) both;
transform: translate3d(0, 0, 0);
backface-visibility: hidden;
perspective: 1000px;
}
@keyframes shake {
10%, 90% {
transform: translate3d(-1px, 0, 0);
}
20%, 80% {
transform: translate3d(2px, 0, 0);
}
30%, 50%, 70% {
transform: translate3d(-4px, 0, 0);
}
40%, 60% {
transform: translate3d(4px, 0, 0);
}
}