实现前端弹簧动效

原文链接
参考文章npm
用到了一个css-spring的库
虽然这些动画不是页面重要的部分,但是感觉这些小动画会提升页面的好感度。

    npm install css-spring
  • 因为要实现一个弹簧振动效果,需要有两个参数,一个是阻尼系数damping ration(em...关于什么是阻尼系数传送带),另一个是刚度stiffness,阻尼系数决定了衰减的快慢,刚度决定了往返的周期长短。给定这两个参数和弹簧的始末位移,根据一些物理公式可以推导出任意时刻弹簧的位移,这个位移就可以当作上面的scale缩放的值,或者是translate、rotate等的值。
弹窗动效

除了放大,缩小也能这样处理,还可以应用于旋转,效果如下图所示:

旋转动
效
旋转动 效
  • 代码实现 keyframs
  //  需要带单位
    const keyframes = spring(
    // from
    { rotate: '30deg' },
    // to
    { rotate: '0deg' },
    { damping: 14, stiffness: 170, precision: 3 }
    )
// toString 
  const keyframeCss = toString(keyframes, (property, value) => property === 'rotate'
  ? `transform:${property}(${value});`
  : `${property}:${value};`)

API spring(start, target, options)

  • start ,target
    开始和结束的属性 --- 属性要带单位
  {left: '10px';, background: #333;}
  {left: '100px', background: #000;}
  • options 操作 (precision, preset, stiffness, damping)
    阻尼系数damping和刚度stiffness
    精度, precision (number)默认为3 四舍五入的小数
    stiffness (number)基于弹簧的刚度 ,默认值为170
    damping (number)基于弹簧的动画的阻尼,默认值为26

  • preset (string)刚度和阻尼的预设,覆盖给定的任何刚度和阻尼值

    • stiff stiffness 210, damping 20
    • gentle stiffness 120, damping 14
    • wobbly stiffness 180, damping 12
    • noWobble stiffness 170, damping 26

API toString(keyframes, formatter)

获取spring的返回值并将其转换为css字符串

  • keyframes spring() 值
  • formatter 为每个属性/值组合调用的格式化程序函数
  (property, value) => `${property}:${value};`

for example

  0%{rotate:0deg;left:10px}
  /* ... */
  100%{rotate:180deg;left:20px;}
  const keyframeCss = toString(keyframes, (property, value) =>
    property === 'rotate'
    ? `transform:${property}(${value});`
    : `${property}:${value};`
  )
  0%{transform:rotate(0deg);left:10px}
  /* ... */
  100%{transform:rotate(180deg);left:20px;}
  • 打印出spring()返回的数据


    log.png

实际应用

当然以上代码是能帮我们实现部分css
还需要将css 插入到页面中, 将css 插入到head头部,写了一个util

// 获取head 元素
const head = document.head || document.getElementsByTagName('head')[0]
// 创建一个style元素
const style = document.createElement('style')
// 这里必须显示设置style元素的type属性为text/css,否则在ie中不起作用
style.type = 'text/css'

function addCSS(cssText) {
  const textNode = document.createTextNode(cssText)
  style.appendChild(textNode)
  head.appendChild(style)
}
// 可以在外部进行引用
module.exports = {
  addCSS,
}
  const springStar = `.star{
  visibility: hidden;
  animation: spring-rotate .59s linear 3 forwards;
}
.star:nth-of-type(2) {
  animation-delay: .15s;
}
.star:nth-of-type(3) {
  animation-delay: .3s;
}`
const modelCss = `.modal{
  animation: spring-show .59s linear forwards;
}
`
addCSS(springStar)

总结: 对单调的h5页面添加了一点点小的动效,感觉挺有意思的,我感觉提高了用户的体验感
在以后的页面中可以使用~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容