无法将CSS震动效果应用于页面主体

5

我有一个名为 image 的类,使用jQuery函数添加到 body 中:

$('body').addClass('image').addClass('shake');

当我尝试使用类名为shake的 CSS 类来添加抖动效果时,它并没有实现抖动效果。
$('body').addClass('image').addClass('shake');

我该如何更正代码以使添加到页面主体的图像具有抖动效果?这是jQuery还是其他什么问题?

$(document).ready(function() {
  $('body').addClass('image').addClass('shake');
});
@import url(https://fonts.googleapis.com/css?family=Gentium+Basic);
@import url(https://fonts.googleapis.com/css?family=Dancing+Script);
.image {
  background-image: url(https://picsum.photos/200/300?image=0);
}

.shake {
  display: inline-block;
  -webkit-transform-origin: center center;
  -ms-transform-origin: center center;
  -webkit-transform-origin: center center;
}

.shake:hover {
  -webkit-animation-name: shake-base;
  -ms-animation-name: shake-base;
  -webkit-animation-name: shake-base;
  -webkit-animation-duration: 100ms;
  -ms-animation-duration: 100ms;
  -webkit-animation-duration: 100ms;
  -webkit-animation-iteration-count: infinite;
  -ms-animation-iteration-count: infinite;
  -webkit-animation-iteration-count: infinite;
  -webkit-animation-timing-function: ease-in-out;
  -ms-animation-timing-function: ease-in-out;
  -webkit-animation-timing-function: ease-in-out;
  -webkit-animation-delay: 0s;
  -ms-animation-delay: 0s;
  -webkit-animation-delay: 0s;
}

@-webkit-keyframes shake-base {
  0% {
    -webkit-transform: translate(0px, 0px) rotate(0deg);
  }
  2% {
    -webkit-transform: translate(1.5px, -2.5px) rotate(-0.5deg);
  }
  4% {
    -webkit-transform: translate(-2.5px, -2.5px) rotate(-0.5deg);
  }
  6% {
    -webkit-transform: translate(-0.5px, -2.5px) rotate(-0.5deg);
  }
  8% {
    -webkit-transform: translate(-0.5px, -1.5px) rotate(-1.5deg);
  }
  10% {
    -webkit-transform: translate(1.5px, -1.5px) rotate(-0.5deg);
  }
  12% {
    -webkit-transform: translate(0.5px, -0.5px) rotate(-1.5deg);
  }
  14% {
    -webkit-transform: translate(1.5px, 1.5px) rotate(-0.5deg);
  }
  16% {
    -webkit-transform: translate(0.5px, -2.5px) rotate(-0.5deg);
  }
  18% {
    -webkit-transform: translate(-0.5px, -1.5px) rotate(0.5deg);
  }
  20% {
    -webkit-transform: translate(1.5px, -0.5px) rotate(0.5deg);
  }
  22% {
    -webkit-transform: translate(-1.5px, 0.5px) rotate(0.5deg);
  }
  24% {
    -webkit-transform: translate(-2.5px, 1.5px) rotate(-1.5deg);
  }
  26% {
    -webkit-transform: translate(1.5px, -0.5px) rotate(-1.5deg);
  }
  28% {
    -webkit-transform: translate(0.5px, -0.5px) rotate(-1.5deg);
  }
  30% {
    -webkit-transform: translate(-0.5px, -0.5px) rotate(-1.5deg);
  }
  32% {
    -webkit-transform: translate(-2.5px, 1.5px) rotate(0.5deg);
  }
  34% {
    -webkit-transform: translate(0.5px, -0.5px) rotate(0.5deg);
  }
  36% {
    -webkit-transform: translate(0.5px, -0.5px) rotate(-0.5deg);
  }
  38% {
    -webkit-transform: translate(1.5px, -0.5px) rotate(-0.5deg);
  }
  40% {
    -webkit-transform: translate(-2.5px, 0.5px) rotate(-0.5deg);
  }
  42% {
    -webkit-transform: translate(-2.5px, 1.5px) rotate(-1.5deg);
  }
  44% {
    -webkit-transform: translate(0.5px, 0.5px) rotate(-0.5deg);
  }
  46% {
    -webkit-transform: translate(-2.5px, -1.5px) rotate(-0.5deg);
  }
  48% {
    -webkit-transform: translate(1.5px, 1.5px) rotate(0.5deg);
  }
  50% {
    -webkit-transform: translate(1.5px, 1.5px) rotate(-1.5deg);
  }
  52% {
    -webkit-transform: translate(1.5px, -1.5px) rotate(-0.5deg);
  }
  54% {
    -webkit-transform: translate(1.5px, -2.5px) rotate(0.5deg);
  }
  56% {
    -webkit-transform: translate(1.5px, -0.5px) rotate(-0.5deg);
  }
  58% {
    -webkit-transform: translate(1.5px, -0.5px) rotate(0.5deg);
  }
  60% {
    -webkit-transform: translate(-0.5px, -1.5px) rotate(-0.5deg);
  }
  62% {
    -webkit-transform: translate(0.5px, 0.5px) rotate(-1.5deg);
  }
  64% {
    -webkit-transform: translate(-2.5px, 0.5px) rotate(-0.5deg);
  }
  66% {
    -webkit-transform: translate(0.5px, 1.5px) rotate(0.5deg);
  }
  68% {
    -webkit-transform: translate(-0.5px, -2.5px) rotate(-1.5deg);
  }
  70% {
    -webkit-transform: translate(0.5px, -2.5px) rotate(-1.5deg);
  }
  72% {
    -webkit-transform: translate(0.5px, -1.5px) rotate(0.5deg);
  }
  74% {
    -webkit-transform: translate(-2.5px, 1.5px) rotate(-0.5deg);
  }
  76% {
    -webkit-transform: translate(-1.5px, 0.5px) rotate(-0.5deg);
  }
  78% {
    -webkit-transform: translate(-2.5px, -2.5px) rotate(-1.5deg);
  }
  80% {
    -webkit-transform: translate(-0.5px, 0.5px) rotate(0.5deg);
  }
  82% {
    -webkit-transform: translate(-2.5px, -0.5px) rotate(0.5deg);
  }
  84% {
    -webkit-transform: translate(-1.5px, 1.5px) rotate(-0.5deg);
  }
  86% {
    -webkit-transform: translate(-2.5px, 1.5px) rotate(-0.5deg);
  }
  88% {
    -webkit-transform: translate(-1.5px, -2.5px) rotate(-0.5deg);
  }
  90% {
    -webkit-transform: translate(-0.5px, -0.5px) rotate(-1.5deg);
  }
  92% {
    -webkit-transform: translate(1.5px, -1.5px) rotate(-1.5deg);
  }
  94% {
    -webkit-transform: translate(-0.5px, -1.5px) rotate(-1.5deg);
  }
  96% {
    -webkit-transform: translate(-2.5px, 0.5px) rotate(-0.5deg);
  }
  98% {
    -webkit-transform: translate(1.5px, -2.5px) rotate(-1.5deg);
  }
}

@-ms-keyframes shake-base {
  0% {
    -ms-transform: translate(0px, 0px) rotate(0deg);
  }
  2% {
    -ms-transform: translate(1.5px, 1.5px) rotate(0.5deg);
  }
  4% {
    -ms-transform: translate(0.5px, -2.5px) rotate(-0.5deg);
  }
  6% {
    -ms-transform: translate(-2.5px, 1.5px) rotate(-1.5deg);
  }
  8% {
    -ms-transform: translate(-2.5px, -0.5px) rotate(-1.5deg);
  }
  10% {
    -ms-transform: translate(-1.5px, -0.5px) rotate(-1.5deg);
  }
  12% {
    -ms-transform: translate(-0.5px, -2.5px) rotate(-1.5deg);
  }
  14% {
    -ms-transform: translate(-2.5px, -2.5px) rotate(0.5deg);
  }
  16% {
    -ms-transform: translate(-1.5px, -1.5px) rotate(-0.5deg);
  }
  18% {
    -ms-transform: translate(-0.5px, 0.5px) rotate(-0.5deg);
  }
  20% {
    -ms-transform: translate(-1.5px, 0.5px) rotate(-0.5deg);
  }
  22% {
    -ms-transform: translate(1.5px, -1.5px) rotate(-1.5deg);
  }
  24% {
    -ms-transform: translate(-2.5px, -0.5px) rotate(-0.5deg);
  }
  26% {
    -ms-transform: translate(-0.5px, -2.5px) rotate(-0.5deg);
  }
  28% {
    -ms-transform: translate(0.5px, -1.5px) rotate(-0.5deg);
  }
  30% {
    -ms-transform: translate(-0.5px, 0.5px) rotate(-0.5deg);
  }
  32% {
    -ms-transform: translate(-1.5px, 1.5px) rotate(-0.5deg);
  }
  34% {
    -ms-transform: translate(-0.5px, -1.5px) rotate(-1.5deg);
  }
  36% {
    -ms-transform: translate(1.5px, -0.5px) rotate(-0.5deg);
  }
  38% {
    -ms-transform: translate(-2.5px, 0.5px) rotate(-0.5deg);
  }
  40% {
    -ms-transform: translate(1.5px, -1.5px) rotate(0.5deg);
  }
  42% {
    -ms-transform: translate(-0.5px, 1.5px) rotate(-0.5deg);
  }
  44% {
    -ms-transform: translate(-0.5px, 0.5px) rotate(-0.5deg);
  }
  46% {
    -ms-transform: translate(1.5px, 0.5px) rotate(-1.5deg);
  }
  48% {
    -ms-transform: translate(1.5px, 0.5px) rotate(0.5deg);
  }
  50% {
    -ms-transform: translate(-0.5px, -0.5px) rotate(-0.5deg);
  }
  52% {
    -ms-transform: translate(-2.5px, 1.5px) rotate(0.5deg);
  }
  54% {
    -ms-transform: translate(-0.5px, -2.5px) rotate(0.5deg);
  }
  56% {
    -ms-transform: translate(-0.5px, 1.5px) rotate(0.5deg);
  }
  58% {
    -ms-transform: translate(-1.5px, 0.5px) rotate(-0.5deg);
  }
  60% {
    -ms-transform: translate(-0.5px, -1.5px) rotate(0.5deg);
  }
  62% {
    -ms-transform: translate(1.5px, -1.5px) rotate(0.5deg);
  }
  64% {
    -ms-transform: translate(0.5px, 0.5px) rotate(-1.5deg);
  }
  66% {
    -ms-transform: translate(-0.5px, 1.5px) rotate(-1.5deg);
  }
  68% {
    -ms-transform: translate(-1.5px, -2.5px) rotate(-0.5deg);
  }
  70% {
    -ms-transform: translate(-1.5px, -2.5px) rotate(-1.5deg);
  }
  72% {
    -ms-transform: translate(-2.5px, -0.5px) rotate(-1.5deg);
  }
  74% {
    -ms-transform: translate(0.5px, 1.5px) rotate(0.5deg);
  }
  76% {
    -ms-transform: translate(-2.5px, -2.5px) rotate(-1.5deg);
  }
  78% {
    -ms-transform: translate(-1.5px, -1.5px) rotate(-0.5deg);
  }
  80% {
    -ms-transform: translate(-1.5px, -0.5px) rotate(-1.5deg);
  }
  82% {
    -ms-transform: translate(0.5px, 1.5px) rotate(-1.5deg);
  }
  84% {
    -ms-transform: translate(-2.5px, 0.5px) rotate(-1.5deg);
  }
  86% {
    -ms-transform: translate(1.5px, -1.5px) rotate(0.5deg);
  }
  88% {
    -ms-transform: translate(0.5px, -2.5px) rotate(0.5deg);
  }
  90% {
    -ms-transform: translate(-1.5px, -1.5px) rotate(-1.5deg);
  }
  92% {
    -ms-transform: translate(-1.5px, -1.5px) rotate(-1.5deg);
  }
  94% {
    -ms-transform: translate(-0.5px, 1.5px) rotate(-0.5deg);
  }
  96% {
    -ms-transform: translate(-1.5px, 0.5px) rotate(-0.5deg);
  }
  98% {
    -ms-transform: translate(-0.5px, -1.5px) rotate(-1.5deg);
  }
}

@keyframes shake-base {
  0% {
    transform: translate(0px, 0px) rotate(0deg);
  }
  2% {
    transform: translate(-2.5px, -2.5px) rotate(-1.5deg);
  }
  4% {
    transform: translate(1.5px, 0.5px) rotate(0.5deg);
  }
  6% {
    transform: translate(1.5px, -0.5px) rotate(0.5deg);
  }
  8% {
    transform: translate(-0.5px, 1.5px) rotate(-1.5deg);
  }
  10% {
    transform: translate(0.5px, 0.5px) rotate(0.5deg);
  }
  12% {
    transform: translate(1.5px, -2.5px) rotate(-0.5deg);
  }
  14% {
    transform: translate(1.5px, -0.5px) rotate(0.5deg);
  }
  16% {
    transform: translate(-1.5px, -2.5px) rotate(0.5deg);
  }
  18% {
    transform: translate(0.5px, -2.5px) rotate(-0.5deg);
  }
  20% {
    transform: translate(-2.5px, -2.5px) rotate(0.5deg);
  }
  22% {
    transform: translate(-0.5px, -1.5px) rotate(0.5deg);
  }
  24% {
    transform: translate(-1.5px, -2.5px) rotate(-1.5deg);
  }
  26% {
    transform: translate(-1.5px, 1.5px) rotate(-0.5deg);
  }
  28% {
    transform: translate(0.5px, 1.5px) rotate(-1.5deg);
  }
  30% {
    transform: translate(-0.5px, 1.5px) rotate(0.5deg);
  }
  32% {
    transform: translate(-1.5px, 0.5px) rotate(0.5deg);
  }
  34% {
    transform: translate(-2.5px, 1.5px) rotate(0.5deg);
  }
  36% {
    transform: translate(-0.5px, -2.5px) rotate(-0.5deg);
  }
  38% {
    transform: translate(0.5px, 1.5px) rotate(-0.5deg);
  }
  40% {
    transform: translate(1.5px, -1.5px) rotate(-0.5deg);
  }
  42% {
    transform: translate(-0.5px, 0.5px) rotate(-0.5deg);
  }
  44% {
    transform: translate(1.5px, 1.5px) rotate(0.5deg);
  }
  46% {
    transform: translate(0.5px, -1.5px) rotate(0.5deg);
  }
  48% {
    transform: translate(-1.5px, 0.5px) rotate(-1.5deg);
  }
  50% {
    transform: translate(-0.5px, -1.5px) rotate(-0.5deg);
  }
  52% {
    transform: translate(-0.5px, 1.5px) rotate(-0.5deg);
  }
  54% {
    transform: translate(-1.5px, 1.5px) rotate(0.5deg);
  }
  56% {
    transform: translate(-1.5px, -0.5px) rotate(-0.5deg);
  }
  58% {
    transform: translate(1.5px, 0.5px) rotate(-0.5deg);
  }
  60% {
    transform: translate(1.5px, 0.5px) rotate(-0.5deg);
  }
  62% {
    transform: translate(-1.5px, -1.5px) rotate(0.5deg);
  }
  64% {
    transform: translate(1.5px, 0.5px) rotate(-1.5deg);
  }
  66% {
    transform: translate(1.5px, -0.5px) rotate(0.5deg);
  }
  68% {
    transform: translate(0.5px, -2.5px) rotate(-1.5deg);
  }
  70% {
    transform: translate(0.5px, -2.5px) rotate(-1.5deg);
  }
  72% {
    transform: translate(1.5px, -1.5px) rotate(0.5deg);
  }
  74% {
    transform: translate(1.5px, -0.5px) rotate(0.5deg);
  }
  76% {
    transform: translate(1.5px, -1.5px) rotate(-0.5deg);
  }
  78% {
    transform: translate(1.5px, -1.5px) rotate(-1.5deg);
  }
  80% {
    transform: translate(-2.5px, -1.5px) rotate(-1.5deg);
  }
  82% {
    transform: translate(1.5px, -2.5px) rotate(-0.5deg);
  }
  84% {
    transform: translate(1.5px, -2.5px) rotate(-0.5deg);
  }
  86% {
    transform: translate(1.5px, 0.5px) rotate(0.5deg);
  }
  88% {
    transform: translate(-2.5px, 0.5px) rotate(-1.5deg);
  }
  90% {
    transform: translate(0.5px, 1.5px) rotate(0.5deg);
  }
  92% {
    transform: translate(-1.5px, 1.5px) rotate(0.5deg);
  }
  94% {
    transform: translate(-0.5px, 0.5px) rotate(-1.5deg);
  }
  96% {
    transform: translate(1.5px, -2.5px) rotate(0.5deg);
  }
  98% {
    transform: translate(-2.5px, -0.5px) rotate(-1.5deg);
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


1
还要注意的是,所有这些供应商前缀都是过度设计;你不需要大部分前缀。 - Rory McCrossan
2
不要在 body 元素上这样做(我曾经让类似的东西工作过一次,但我认为是在 html 元素上)。 只需使用包装器 div 即可。 并且在加载时添加类,而不是在文档准备好时。 - ptts
1
我本来准备为你写一个笔记,但是该死的关键帧声明把我的剪贴板搞崩了。 - ptts
1
@RoryMcCrossan 我们可以将它们应用于 body,body 只是不可见的。 - Temani Afif
@TemaniAfif 我改正了。 - Rory McCrossan
3个回答

7

系统正常工作,但是你所看到的背景被移动到画布中,并不再属于body元素。由于没有内容,您的body元素高度为0。您所看到的不是元素(它是不可见的),而是窗口画布(浏览器窗口)从body中夺取的背景。

更改的背景(以便画布采用该背景),并给一些高度以查看效果:

$(document).ready(function() {
  $('body').addClass('image').addClass('shake');
});
@import url(https://fonts.googleapis.com/css?family=Gentium+Basic);
@import url(https://fonts.googleapis.com/css?family=Dancing+Script);
.image {
  background-image: url(https://picsum.photos/200/300?image=0);
  height:200px;
}

html {
  background:red;
}

.shake {
  transform-origin: center center;;
}

.shake:hover {
  animation: shake-base 100ms infinite ease-in-out;
}

@keyframes shake-base {
  0% {
    transform: translate(0px, 0px) rotate(0deg);
  }
  2% {
    transform: translate(-2.5px, -2.5px) rotate(-1.5deg);
  }
  4% {
    transform: translate(1.5px, 0.5px) rotate(0.5deg);
  }
  6% {
    transform: translate(1.5px, -0.5px) rotate(0.5deg);
  }
  8% {
    transform: translate(-0.5px, 1.5px) rotate(-1.5deg);
  }
  10% {
    transform: translate(0.5px, 0.5px) rotate(0.5deg);
  }
  12% {
    transform: translate(1.5px, -2.5px) rotate(-0.5deg);
  }
  14% {
    transform: translate(1.5px, -0.5px) rotate(0.5deg);
  }
  16% {
    transform: translate(-1.5px, -2.5px) rotate(0.5deg);
  }
  18% {
    transform: translate(0.5px, -2.5px) rotate(-0.5deg);
  }
  20% {
    transform: translate(-2.5px, -2.5px) rotate(0.5deg);
  }
  22% {
    transform: translate(-0.5px, -1.5px) rotate(0.5deg);
  }
  24% {
    transform: translate(-1.5px, -2.5px) rotate(-1.5deg);
  }
  26% {
    transform: translate(-1.5px, 1.5px) rotate(-0.5deg);
  }
  28% {
    transform: translate(0.5px, 1.5px) rotate(-1.5deg);
  }
  30% {
    transform: translate(-0.5px, 1.5px) rotate(0.5deg);
  }
  32% {
    transform: translate(-1.5px, 0.5px) rotate(0.5deg);
  }
  34% {
    transform: translate(-2.5px, 1.5px) rotate(0.5deg);
  }
  36% {
    transform: translate(-0.5px, -2.5px) rotate(-0.5deg);
  }
  38% {
    transform: translate(0.5px, 1.5px) rotate(-0.5deg);
  }
  40% {
    transform: translate(1.5px, -1.5px) rotate(-0.5deg);
  }
  42% {
    transform: translate(-0.5px, 0.5px) rotate(-0.5deg);
  }
  44% {
    transform: translate(1.5px, 1.5px) rotate(0.5deg);
  }
  46% {
    transform: translate(0.5px, -1.5px) rotate(0.5deg);
  }
  48% {
    transform: translate(-1.5px, 0.5px) rotate(-1.5deg);
  }
  50% {
    transform: translate(-0.5px, -1.5px) rotate(-0.5deg);
  }
  52% {
    transform: translate(-0.5px, 1.5px) rotate(-0.5deg);
  }
  54% {
    transform: translate(-1.5px, 1.5px) rotate(0.5deg);
  }
  56% {
    transform: translate(-1.5px, -0.5px) rotate(-0.5deg);
  }
  58% {
    transform: translate(1.5px, 0.5px) rotate(-0.5deg);
  }
  60% {
    transform: translate(1.5px, 0.5px) rotate(-0.5deg);
  }
  62% {
    transform: translate(-1.5px, -1.5px) rotate(0.5deg);
  }
  64% {
    transform: translate(1.5px, 0.5px) rotate(-1.5deg);
  }
  66% {
    transform: translate(1.5px, -0.5px) rotate(0.5deg);
  }
  68% {
    transform: translate(0.5px, -2.5px) rotate(-1.5deg);
  }
  70% {
    transform: translate(0.5px, -2.5px) rotate(-1.5deg);
  }
  72% {
    transform: translate(1.5px, -1.5px) rotate(0.5deg);
  }
  74% {
    transform: translate(1.5px, -0.5px) rotate(0.5deg);
  }
  76% {
    transform: translate(1.5px, -1.5px) rotate(-0.5deg);
  }
  78% {
    transform: translate(1.5px, -1.5px) rotate(-1.5deg);
  }
  80% {
    transform: translate(-2.5px, -1.5px) rotate(-1.5deg);
  }
  82% {
    transform: translate(1.5px, -2.5px) rotate(-0.5deg);
  }
  84% {
    transform: translate(1.5px, -2.5px) rotate(-0.5deg);
  }
  86% {
    transform: translate(1.5px, 0.5px) rotate(0.5deg);
  }
  88% {
    transform: translate(-2.5px, 0.5px) rotate(-1.5deg);
  }
  90% {
    transform: translate(0.5px, 1.5px) rotate(0.5deg);
  }
  92% {
    transform: translate(-1.5px, 1.5px) rotate(0.5deg);
  }
  94% {
    transform: translate(-0.5px, 0.5px) rotate(-1.5deg);
  }
  96% {
    transform: translate(1.5px, -2.5px) rotate(0.5deg);
  }
  98% {
    transform: translate(-2.5px, -0.5px) rotate(-1.5deg);
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


2
@RoryMcCrossan canvas 技术上 是正确的术语,但是确实有点令人困惑(我添加了“浏览器窗口”以便更好地理解)。 - Temani Afif

2

好的,这里是你需要的,我已经创建了一个笔,没有使用CSS前缀。

我已经将类image添加到div中,

<div class="image"></div>

为 div 添加了一些 CSS

 .image {
     width: 100vw;
     height: 100vh;
     background-repeat: no-repeat;
     background-size: 100% 100%;
     background-image: url(https://picsum.photos/200/300?image=0);
 }

并通过jQuery将类添加到图像:

 $(document).ready(function() {
     $('.image').addClass('shake');
 });

完整代码:

$(document).ready(function() {
  $('.image').addClass('shake');
});
.image {
  width: 100vw;
  height: 100vh;
  background-repeat: no-repeat;
  background-size: 100% 100%;
  background-image: url(https://picsum.photos/200/300?image=0);
}

.shake {
  display: inline-block;
  -webkit-transform-origin: center center;
  -ms-transform-origin: center center;
  -webkit-transform-origin: center top;
}

.shake:hover {
  -webkit-animation-name: shake-base;
  -ms-animation-name: shake-base;
  -webkit-animation-name: shake-base;
  -webkit-animation-duration: 100ms;
  -ms-animation-duration: 100ms;
  -webkit-animation-duration: 100ms;
  -webkit-animation-iteration-count: infinite;
  -ms-animation-iteration-count: infinite;
  -webkit-animation-iteration-count: infinite;
  -webkit-animation-timing-function: ease-in-out;
  -ms-animation-timing-function: ease-in-out;
  -webkit-animation-timing-function: ease-in-out;
  -webkit-animation-delay: 0s;
  -ms-animation-delay: 0s;
  -webkit-animation-delay: 0s;
}

@keyframes shake-base {
  0% {
    transform: translate(0px, 0px) rotate(0deg);
  }
  2% {
    transform: translate(-2.5px, -2.5px) rotate(-1.5deg);
  }
  4% {
    transform: translate(1.5px, 0.5px) rotate(0.5deg);
  }
  6% {
    transform: translate(1.5px, -0.5px) rotate(0.5deg);
  }
  8% {
    transform: translate(-0.5px, 1.5px) rotate(-1.5deg);
  }
  10% {
    transform: translate(0.5px, 0.5px) rotate(0.5deg);
  }
  12% {
    transform: translate(1.5px, -2.5px) rotate(-0.5deg);
  }
  14% {
    transform: translate(1.5px, -0.5px) rotate(0.5deg);
  }
  16% {
    transform: translate(-1.5px, -2.5px) rotate(0.5deg);
  }
  18% {
    transform: translate(0.5px, -2.5px) rotate(-0.5deg);
  }
  20% {
    transform: translate(-2.5px, -2.5px) rotate(0.5deg);
  }
  22% {
    transform: translate(-0.5px, -1.5px) rotate(0.5deg);
  }
  24% {
    transform: translate(-1.5px, -2.5px) rotate(-1.5deg);
  }
  26% {
    transform: translate(-1.5px, 1.5px) rotate(-0.5deg);
  }
  28% {
    transform: translate(0.5px, 1.5px) rotate(-1.5deg);
  }
  30% {
    transform: translate(-0.5px, 1.5px) rotate(0.5deg);
  }
  32% {
    transform: translate(-1.5px, 0.5px) rotate(0.5deg);
  }
  34% {
    transform: translate(-2.5px, 1.5px) rotate(0.5deg);
  }
  36% {
    transform: translate(-0.5px, -2.5px) rotate(-0.5deg);
  }
  38% {
    transform: translate(0.5px, 1.5px) rotate(-0.5deg);
  }
  40% {
    transform: translate(1.5px, -1.5px) rotate(-0.5deg);
  }
  42% {
    transform: translate(-0.5px, 0.5px) rotate(-0.5deg);
  }
  44% {
    transform: translate(1.5px, 1.5px) rotate(0.5deg);
  }
  46% {
    transform: translate(0.5px, -1.5px) rotate(0.5deg);
  }
  48% {
    transform: translate(-1.5px, 0.5px) rotate(-1.5deg);
  }
  50% {
    transform: translate(-0.5px, -1.5px) rotate(-0.5deg);
  }
  52% {
    transform: translate(-0.5px, 1.5px) rotate(-0.5deg);
  }
  54% {
    transform: translate(-1.5px, 1.5px) rotate(0.5deg);
  }
  56% {
    transform: translate(-1.5px, -0.5px) rotate(-0.5deg);
  }
  58% {
    transform: translate(1.5px, 0.5px) rotate(-0.5deg);
  }
  60% {
    transform: translate(1.5px, 0.5px) rotate(-0.5deg);
  }
  62% {
    transform: translate(-1.5px, -1.5px) rotate(0.5deg);
  }
  64% {
    transform: translate(1.5px, 0.5px) rotate(-1.5deg);
  }
  66% {
    transform: translate(1.5px, -0.5px) rotate(0.5deg);
  }
  68% {
    transform: translate(0.5px, -2.5px) rotate(-1.5deg);
  }
  70% {
    transform: translate(0.5px, -2.5px) rotate(-1.5deg);
  }
  72% {
    transform: translate(1.5px, -1.5px) rotate(0.5deg);
  }
  74% {
    transform: translate(1.5px, -0.5px) rotate(0.5deg);
  }
  76% {
    transform: translate(1.5px, -1.5px) rotate(-0.5deg);
  }
  78% {
    transform: translate(1.5px, -1.5px) rotate(-1.5deg);
  }
  80% {
    transform: translate(-2.5px, -1.5px) rotate(-1.5deg);
  }
  82% {
    transform: translate(1.5px, -2.5px) rotate(-0.5deg);
  }
  84% {
    transform: translate(1.5px, -2.5px) rotate(-0.5deg);
  }
  86% {
    transform: translate(1.5px, 0.5px) rotate(0.5deg);
  }
  88% {
    transform: translate(-2.5px, 0.5px) rotate(-1.5deg);
  }
  90% {
    transform: translate(0.5px, 1.5px) rotate(0.5deg);
  }
  92% {
    transform: translate(-1.5px, 1.5px) rotate(0.5deg);
  }
  94% {
    transform: translate(-0.5px, 0.5px) rotate(-1.5deg);
  }
  96% {
    transform: translate(1.5px, -2.5px) rotate(0.5deg);
  }
  98% {
    transform: translate(-2.5px, -0.5px) rotate(-1.5deg);
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="image"></div>


2

将您的内容放在包装器中(例如示例中的.body-content),并将抖动类应用于此元素。您还应该将html和body的高度设置为full height。

请注意,将抖动类应用于整个body可能会产生不希望的效果,因为其内容会溢出并导致浏览器滚动条的显示。

$(document).ready(function(){
  $('body .body-content').addClass('image').addClass('shake');
});
@import url(https://fonts.googleapis.com/css?family=Gentium+Basic);
@import url(https://fonts.googleapis.com/css?family=Dancing+Script);

.image {
  background-image:url(https://picsum.photos/200/300?image=0);
}

html{
  height: 100%;
}

body {
  min-height: 100%;
  padding:0;
  margin:0;
  display: flex;
  align-items: stretch;
}

.body-content{
  width:100%;
  padding:0;
  margin:0;
}


.shake {
  display: inline-block;
  -webkit-transform-origin: center center;
  -ms-transform-origin: center center;
  -webkit-transform-origin: center center;
}
.shake:hover {
  -webkit-animation-name: shake-base;
  -ms-animation-name: shake-base;
  -webkit-animation-name: shake-base;
  -webkit-animation-duration: 100ms;
  -ms-animation-duration: 100ms;
  -webkit-animation-duration: 100ms;
  -webkit-animation-iteration-count: infinite;
  -ms-animation-iteration-count: infinite;
  -webkit-animation-iteration-count: infinite;
  -webkit-animation-timing-function: ease-in-out;
  -ms-animation-timing-function: ease-in-out;
  -webkit-animation-timing-function: ease-in-out;
  -webkit-animation-delay: 0s;
  -ms-animation-delay: 0s;
  -webkit-animation-delay: 0s;
}

@-webkit-keyframes shake-base { 0% { -webkit-transform: translate(0px, 0px) rotate(0deg); }
  2% { -webkit-transform: translate(1.5px, -2.5px) rotate(-0.5deg); }
  4% { -webkit-transform: translate(-2.5px, -2.5px) rotate(-0.5deg); }
  6% { -webkit-transform: translate(-0.5px, -2.5px) rotate(-0.5deg); }
  8% { -webkit-transform: translate(-0.5px, -1.5px) rotate(-1.5deg); }
  10% { -webkit-transform: translate(1.5px, -1.5px) rotate(-0.5deg); }
  12% { -webkit-transform: translate(0.5px, -0.5px) rotate(-1.5deg); }
  14% { -webkit-transform: translate(1.5px, 1.5px) rotate(-0.5deg); }
  16% { -webkit-transform: translate(0.5px, -2.5px) rotate(-0.5deg); }
  18% { -webkit-transform: translate(-0.5px, -1.5px) rotate(0.5deg); }
  20% { -webkit-transform: translate(1.5px, -0.5px) rotate(0.5deg); }
  22% { -webkit-transform: translate(-1.5px, 0.5px) rotate(0.5deg); }
  24% { -webkit-transform: translate(-2.5px, 1.5px) rotate(-1.5deg); }
  26% { -webkit-transform: translate(1.5px, -0.5px) rotate(-1.5deg); }
  28% { -webkit-transform: translate(0.5px, -0.5px) rotate(-1.5deg); }
  30% { -webkit-transform: translate(-0.5px, -0.5px) rotate(-1.5deg); }
  32% { -webkit-transform: translate(-2.5px, 1.5px) rotate(0.5deg); }
  34% { -webkit-transform: translate(0.5px, -0.5px) rotate(0.5deg); }
  36% { -webkit-transform: translate(0.5px, -0.5px) rotate(-0.5deg); }
  38% { -webkit-transform: translate(1.5px, -0.5px) rotate(-0.5deg); }
  40% { -webkit-transform: translate(-2.5px, 0.5px) rotate(-0.5deg); }
  42% { -webkit-transform: translate(-2.5px, 1.5px) rotate(-1.5deg); }
  44% { -webkit-transform: translate(0.5px, 0.5px) rotate(-0.5deg); }
  46% { -webkit-transform: translate(-2.5px, -1.5px) rotate(-0.5deg); }
  48% { -webkit-transform: translate(1.5px, 1.5px) rotate(0.5deg); }
  50% { -webkit-transform: translate(1.5px, 1.5px) rotate(-1.5deg); }
  52% { -webkit-transform: translate(1.5px, -1.5px) rotate(-0.5deg); }
  54% { -webkit-transform: translate(1.5px, -2.5px) rotate(0.5deg); }
  56% { -webkit-transform: translate(1.5px, -0.5px) rotate(-0.5deg); }
  58% { -webkit-transform: translate(1.5px, -0.5px) rotate(0.5deg); }
  60% { -webkit-transform: translate(-0.5px, -1.5px) rotate(-0.5deg); }
  62% { -webkit-transform: translate(0.5px, 0.5px) rotate(-1.5deg); }
  64% { -webkit-transform: translate(-2.5px, 0.5px) rotate(-0.5deg); }
  66% { -webkit-transform: translate(0.5px, 1.5px) rotate(0.5deg); }
  68% { -webkit-transform: translate(-0.5px, -2.5px) rotate(-1.5deg); }
  70% { -webkit-transform: translate(0.5px, -2.5px) rotate(-1.5deg); }
  72% { -webkit-transform: translate(0.5px, -1.5px) rotate(0.5deg); }
  74% { -webkit-transform: translate(-2.5px, 1.5px) rotate(-0.5deg); }
  76% { -webkit-transform: translate(-1.5px, 0.5px) rotate(-0.5deg); }
  78% { -webkit-transform: translate(-2.5px, -2.5px) rotate(-1.5deg); }
  80% { -webkit-transform: translate(-0.5px, 0.5px) rotate(0.5deg); }
  82% { -webkit-transform: translate(-2.5px, -0.5px) rotate(0.5deg); }
  84% { -webkit-transform: translate(-1.5px, 1.5px) rotate(-0.5deg); }
  86% { -webkit-transform: translate(-2.5px, 1.5px) rotate(-0.5deg); }
  88% { -webkit-transform: translate(-1.5px, -2.5px) rotate(-0.5deg); }
  90% { -webkit-transform: translate(-0.5px, -0.5px) rotate(-1.5deg); }
  92% { -webkit-transform: translate(1.5px, -1.5px) rotate(-1.5deg); }
  94% { -webkit-transform: translate(-0.5px, -1.5px) rotate(-1.5deg); }
  96% { -webkit-transform: translate(-2.5px, 0.5px) rotate(-0.5deg); }
  98% { -webkit-transform: translate(1.5px, -2.5px) rotate(-1.5deg); } }

@-ms-keyframes shake-base { 0% { -ms-transform: translate(0px, 0px) rotate(0deg); }
  2% { -ms-transform: translate(1.5px, 1.5px) rotate(0.5deg); }
  4% { -ms-transform: translate(0.5px, -2.5px) rotate(-0.5deg); }
  6% { -ms-transform: translate(-2.5px, 1.5px) rotate(-1.5deg); }
  8% { -ms-transform: translate(-2.5px, -0.5px) rotate(-1.5deg); }
  10% { -ms-transform: translate(-1.5px, -0.5px) rotate(-1.5deg); }
  12% { -ms-transform: translate(-0.5px, -2.5px) rotate(-1.5deg); }
  14% { -ms-transform: translate(-2.5px, -2.5px) rotate(0.5deg); }
  16% { -ms-transform: translate(-1.5px, -1.5px) rotate(-0.5deg); }
  18% { -ms-transform: translate(-0.5px, 0.5px) rotate(-0.5deg); }
  20% { -ms-transform: translate(-1.5px, 0.5px) rotate(-0.5deg); }
  22% { -ms-transform: translate(1.5px, -1.5px) rotate(-1.5deg); }
  24% { -ms-transform: translate(-2.5px, -0.5px) rotate(-0.5deg); }
  26% { -ms-transform: translate(-0.5px, -2.5px) rotate(-0.5deg); }
  28% { -ms-transform: translate(0.5px, -1.5px) rotate(-0.5deg); }
  30% { -ms-transform: translate(-0.5px, 0.5px) rotate(-0.5deg); }
  32% { -ms-transform: translate(-1.5px, 1.5px) rotate(-0.5deg); }
  34% { -ms-transform: translate(-0.5px, -1.5px) rotate(-1.5deg); }
  36% { -ms-transform: translate(1.5px, -0.5px) rotate(-0.5deg); }
  38% { -ms-transform: translate(-2.5px, 0.5px) rotate(-0.5deg); }
  40% { -ms-transform: translate(1.5px, -1.5px) rotate(0.5deg); }
  42% { -ms-transform: translate(-0.5px, 1.5px) rotate(-0.5deg); }
  44% { -ms-transform: translate(-0.5px, 0.5px) rotate(-0.5deg); }
  46% { -ms-transform: translate(1.5px, 0.5px) rotate(-1.5deg); }
  48% { -ms-transform: translate(1.5px, 0.5px) rotate(0.5deg); }
  50% { -ms-transform: translate(-0.5px, -0.5px) rotate(-0.5deg); }
  52% { -ms-transform: translate(-2.5px, 1.5px) rotate(0.5deg); }
  54% { -ms-transform: translate(-0.5px, -2.5px) rotate(0.5deg); }
  56% { -ms-transform: translate(-0.5px, 1.5px) rotate(0.5deg); }
  58% { -ms-transform: translate(-1.5px, 0.5px) rotate(-0.5deg); }
  60% { -ms-transform: translate(-0.5px, -1.5px) rotate(0.5deg); }
  62% { -ms-transform: translate(1.5px, -1.5px) rotate(0.5deg); }
  64% { -ms-transform: translate(0.5px, 0.5px) rotate(-1.5deg); }
  66% { -ms-transform: translate(-0.5px, 1.5px) rotate(-1.5deg); }
  68% { -ms-transform: translate(-1.5px, -2.5px) rotate(-0.5deg); }
  70% { -ms-transform: translate(-1.5px, -2.5px) rotate(-1.5deg); }
  72% { -ms-transform: translate(-2.5px, -0.5px) rotate(-1.5deg); }
  74% { -ms-transform: translate(0.5px, 1.5px) rotate(0.5deg); }
  76% { -ms-transform: translate(-2.5px, -2.5px) rotate(-1.5deg); }
  78% { -ms-transform: translate(-1.5px, -1.5px) rotate(-0.5deg); }
  80% { -ms-transform: translate(-1.5px, -0.5px) rotate(-1.5deg); }
  82% { -ms-transform: translate(0.5px, 1.5px) rotate(-1.5deg); }
  84% { -ms-transform: translate(-2.5px, 0.5px) rotate(-1.5deg); }
  86% { -ms-transform: translate(1.5px, -1.5px) rotate(0.5deg); }
  88% { -ms-transform: translate(0.5px, -2.5px) rotate(0.5deg); }
  90% { -ms-transform: translate(-1.5px, -1.5px) rotate(-1.5deg); }
  92% { -ms-transform: translate(-1.5px, -1.5px) rotate(-1.5deg); }
  94% { -ms-transform: translate(-0.5px, 1.5px) rotate(-0.5deg); }
  96% { -ms-transform: translate(-1.5px, 0.5px) rotate(-0.5deg); }
  98% { -ms-transform: translate(-0.5px, -1.5px) rotate(-1.5deg); } }

@keyframes shake-base { 0% { transform: translate(0px, 0px) rotate(0deg); }
  2% { transform: translate(-2.5px, -2.5px) rotate(-1.5deg); }
  4% { transform: translate(1.5px, 0.5px) rotate(0.5deg); }
  6% { transform: translate(1.5px, -0.5px) rotate(0.5deg); }
  8% { transform: translate(-0.5px, 1.5px) rotate(-1.5deg); }
  10% { transform: translate(0.5px, 0.5px) rotate(0.5deg); }
  12% { transform: translate(1.5px, -2.5px) rotate(-0.5deg); }
  14% { transform: translate(1.5px, -0.5px) rotate(0.5deg); }
  16% { transform: translate(-1.5px, -2.5px) rotate(0.5deg); }
  18% { transform: translate(0.5px, -2.5px) rotate(-0.5deg); }
  20% { transform: translate(-2.5px, -2.5px) rotate(0.5deg); }
  22% { transform: translate(-0.5px, -1.5px) rotate(0.5deg); }
  24% { transform: translate(-1.5px, -2.5px) rotate(-1.5deg); }
  26% { transform: translate(-1.5px, 1.5px) rotate(-0.5deg); }
  28% { transform: translate(0.5px, 1.5px) rotate(-1.5deg); }
  30% { transform: translate(-0.5px, 1.5px) rotate(0.5deg); }
  32% { transform: translate(-1.5px, 0.5px) rotate(0.5deg); }
  34% { transform: translate(-2.5px, 1.5px) rotate(0.5deg); }
  36% { transform: translate(-0.5px, -2.5px) rotate(-0.5deg); }
  38% { transform: translate(0.5px, 1.5px) rotate(-0.5deg); }
  40% { transform: translate(1.5px, -1.5px) rotate(-0.5deg); }
  42% { transform: translate(-0.5px, 0.5px) rotate(-0.5deg); }
  44% { transform: translate(1.5px, 1.5px) rotate(0.5deg); }
  46% { transform: translate(0.5px, -1.5px) rotate(0.5deg); }
  48% { transform: translate(-1.5px, 0.5px) rotate(-1.5deg); }
  50% { transform: translate(-0.5px, -1.5px) rotate(-0.5deg); }
  52% { transform: translate(-0.5px, 1.5px) rotate(-0.5deg); }
  54% { transform: translate(-1.5px, 1.5px) rotate(0.5deg); }
  56% { transform: translate(-1.5px, -0.5px) rotate(-0.5deg); }
  58% { transform: translate(1.5px, 0.5px) rotate(-0.5deg); }
  60% { transform: translate(1.5px, 0.5px) rotate(-0.5deg); }
  62% { transform: translate(-1.5px, -1.5px) rotate(0.5deg); }
  64% { transform: translate(1.5px, 0.5px) rotate(-1.5deg); }
  66% { transform: translate(1.5px, -0.5px) rotate(0.5deg); }
  68% { transform: translate(0.5px, -2.5px) rotate(-1.5deg); }
  70% { transform: translate(0.5px, -2.5px) rotate(-1.5deg); }
  72% { transform: translate(1.5px, -1.5px) rotate(0.5deg); }
  74% { transform: translate(1.5px, -0.5px) rotate(0.5deg); }
  76% { transform: translate(1.5px, -1.5px) rotate(-0.5deg); }
  78% { transform: translate(1.5px, -1.5px) rotate(-1.5deg); }
  80% { transform: translate(-2.5px, -1.5px) rotate(-1.5deg); }
  82% { transform: translate(1.5px, -2.5px) rotate(-0.5deg); }
  84% { transform: translate(1.5px, -2.5px) rotate(-0.5deg); }
  86% { transform: translate(1.5px, 0.5px) rotate(0.5deg); }
  88% { transform: translate(-2.5px, 0.5px) rotate(-1.5deg); }
  90% { transform: translate(0.5px, 1.5px) rotate(0.5deg); }
  92% { transform: translate(-1.5px, 1.5px) rotate(0.5deg); }
  94% { transform: translate(-0.5px, 0.5px) rotate(-1.5deg); }
  96% { transform: translate(1.5px, -2.5px) rotate(0.5deg); }
  98% { transform: translate(-2.5px, -0.5px) rotate(-1.5deg); } }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
  <div class="body-content"></div>
</body>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接