javascript - 如何在 css 或 javascript 中使文本上升或波动(无动画)

标签 javascript html css

如何使一些动态文本在 HTML 中看起来像这样:

To make it look like this 我不介意它是用 CSS 还是 Javascript 完成的。 它不应该以任何方式设置动画。

最佳答案

用 CSS 变换来伪造它:

Math.easeInOutSine = function (t, b, c, d) {
  return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
};
var easing = Math.easeInOutSine,
    $target = $('#target'),
    position = $target.position(),
    width = $target.width(),
    height = 100;
$target.html($target.text().split('').map(
  function(char){
    return '<span>'+char+'</span>';
  }
).join(''));
var $chars = $target.children();
$chars.each(function(){
  var $char = $(this),
      w = $char.width(),
      l = $char.position().left,
      offset = easing(l, 0, height, width),
      skew = offset - easing(w + l, 0, height, width),
      angle = Math.atan(skew/w) * 180 / Math.PI;
  offset = -offset;
  $char.css({
    transform: 'translateY('+offset+'px) skewY('+angle+'deg)'
  });
});
$target.css({
  paddingTop: height
});
#target {
  white-space:pre;
  display:inline-block;
}
#target span {
  position:relative;
  display:inline-block;
  transform-origin:left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div><div id="target">This is a test of the emergency broadcast system.</div></div>

http://codepen.io/ouroborus/pen/mmbzje

我说是假的,因为各个字母不是 flex 的。本质上,曲线被分成线性段,使得它们与放置在那里的 Angular 色一样宽,因此它仅近似于曲线。随着字体大小的增加,这一点变得更加明显。

关于javascript - 如何在 css 或 javascript 中使文本上升或波动(无动画),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43356923/

相关文章:

javascript - 如何在一个 Canvas 上控制多个视频

javascript - AngularJs ng-repeat 在小组课上

html - 将 HTML 代码块添加到 Lua 中的字符串(concat)

javascript - 使用 Backbone.js 对集合进行排序

JavaScript 缓动

html - 响应式图像,如果容器较大,则宽度不会为 100% - 容器为 Flexbox

html - Angular 2 : Give value to button based on dropdown menu value

css - 带有全尺寸居中图像的 Bootstrap 轮播

CSS Only Accordion 适用于 Chrome 但不适用于 Safari

javascript - Bootstrap 3 无序列表显示不正确