界面优化--如何提升用户体验(Velocity.js和GSAP)

Velocity.js和GSAP

我们需要提升代码质量来留住用户。作为用户界面的建设者,我们的工作是迅速引导和引导用户的注意力,指导他们如何有效地使用我们的应用程序。

1. 如何提升代码质量

  • 定向聚焦

我们可以利用动画的力量来集中用户的注意力。视觉对运动的敏感度是人类大脑的一个核心,作为开发人员,我们可以利用这种对视觉运动的敏感性,以便将用户的注意力引导到我们希望他们关注的元素上,这样他们就更有可能采取我们希望他们采取的行动。

  • 无缝流

太阳不会突然的出现在天空中,一定会有一个逐渐升起的过程,这是我们所认知的世界,遵循这样的逻辑的事物会更容易的让人接受。

现在网站中的非逻辑推理非常常见,当元素的状态改变时,它们直接消失或者突然闪现,页面的更替也是如此,或者页面显示的数据生硬的变化。时间的推移,这会导致用户的认知疲劳。这时如果我们看到一个无缝流的网站(这类网站以一种模仿自然的优美方式来使用运动。达到无缝过度元素状态、切换页面以及流动的展现数据的变化),用户会对我们应用程序的“世界”有一种熟悉感,会觉得心情舒畅,相反的传统的网站会让人觉得相对“劣质”。

  • 页面触感

在无数的应用程序中,其中许多可能是相当日常和枯燥的,如果你让你的用户微笑,你就得到了一个粉丝。

一个定制的加载微调器,一个解压触感的按钮,会减轻那些充斥着一堆文字的页面给用户带来的负担。如果做得好,这些令人愉快的触摸将使你的应用程序更加难忘,可以使你从你的竞争对手中脱颖而出

注意:动画就像是在菜里添加香料。太少了,菜就淡了;太多了,菜就毁了。像任何一顿美餐一样,一个有效的动画界面必须是平衡的。

2. Vue的transition组件

Vue提供transition的封装组件使我们更容易的做到上述提到的关于优化代码的目的。

具体的用法可以直接参考官方文档

我们直接来看两个个简单的例子:

Demo1

 1<template>
2    <transition name="slide-fade" mode="out-in">
3        <router-view/>
4    </transition>
5</template>
6<style language="less">
7.slide-fade{
8    &-enter{opacity: 0;transform: translateX(10px);}
9    &-leave-to{opacity: 0;transform: translateX(-10px);}
10    &-enter-active,&-leave-active{transition: all .2s ease;}
11}
12
</style>

每当路由页面跳入时,就成了一个非逻辑推理。一个简单的解决方法是随着时间的推移将DOM淡入视图,为它们提供关于正在更改的内容的上下文。实现一个简单的淡入过渡。

Demo2

 1<template>
2    <transition-group name="staggered-fade" appear :css="false"
3        @beforeEnter="staggeredFadeInit"
4        @enter="staggeredFadeIn"
5    >

6        <router-link key="chapter" data-index='0' to="/chapter/">router-link</router-link>
7        <router-link key="offline" data-index='1' to="/offline/">router-link</router-link>
8        <router-link key="services" data-index='2' to="/services/1005.html">router-link</router-link>
9        <router-link key="xuecha" data-index='3' to="/xuecha/">router-link</router-link>
10    </transition-group>
11</template>
12<script>
13export default {
14    methods: {
15        staggeredFadeInit (el) {
16            el.style.opacity = 0
17            el.style.webkitTransform = 'translateX(15px)'
18        },
19        staggeredFadeIn (el, done) {
20            let delay = el.dataset.index * 200
21            el.style.transition = 'all .3s ease-out'
22            setTimeout(() => {
23                el.style.opacity = 1
24                el.style.webkitTransform = 'translateX(0)'
25            }, delay)
26            done()
27        }
28    }
29}
30
</script>

当我们的需求变得更加独特或复杂时,单凭css不容易实现的效果,我们可以使用JavaScript钩子。

3. Velocity.js

Velocity是一个动画引擎。它非常流畅,并且具有彩色动画,变换,循环,缓动,SVG支持和滚动功能。可以与vue中translate组件的JavaScript钩子相结合,让我们更容易的实现复杂的动画。

对上面的Demo2进行改造

安装

1npm i velocity-animate

引入使用

 1<script>
2import Velocity from 'velocity-animate'
3export default {
4    methods: {
5        staggeredFadeInit (el) {
6            el.style.opacity = 0
7            el.style.webkitTransform = 'translateX(15px)'
8        },
9        staggeredFadeIn (el, done) {
10            Velocity(el,
11                {
12                    opacity1,
13                    webkitTransform'translateX(0)'
14                },
15                {
16                    duration1000,
17                    delay: el.dataset.index * 200,
18                    easing'easeOut',
19                    complete: done
20                }
21            )
22        }
23    }
24}
25
</script>

不仅仅是在书写格式上,Velocity为我们提供了许多便利。easing属性中提供了许多过度效果,如下图:


而且easing也可以使用参数让用户自定义过度效果:easing: [60, 10]第一个60是张力,第二个10是该弹性运动的摩擦量。我们可以调整这些以获得动态效果,创建我们的弹性运动。

更多详情可以参考Velocity.js详细文档

4. GSAP

这里还想给大家介绍一个非常强大和流行的动画库称为GreenSock Animation Platform (GSAP)。面向现代web的专业级JavaScript动画

它和Velocity有什么区别呢?这个库是一个强力的、高性能的库,它使您能够对JavaScript可以触及的任何内容进行动画制作,并且它在默认情况下消除了浏览器的不一致性。

也就是说不仅仅是dom元素的动画,还能进行数据变化过度,时间线动画等等其他的高效的动画效果,包括(CSS属性、canvas库对象、SVG、React、Vue、通用对象等等),简单地说,GSAP是这个星球上最强大的高性能javascript动画库。

安装

1npm install gsap

直接上例子Demo3.vue:

 1<template>
2    <transtion appear :css="false"
3        @before-enter="beforeEnter"
4        @enter="enter"
5    >

6        <div></div>
7    </transtion>
8</template>
9<script>
10import gsap from 'gsap'
11export default {
12    methods: {
13        beforeEnter(el) {
14            el.style.opacity = 0
15            el.style.transform = 'scale(0,0)'
16        },
17        enter(el, done) {
18            gsap.to(el, {
19                duration1,
20                opacity1,
21                scale1,
22                ease'bounce.out',
23                onComplete: done
24            })
25        }
26    }
27}
28
</script>

这是一个简单的元素过度动画,gsap提供了许多实用的API,gsap.to()使元素过度到我们设定的状态,gsap.from()可以设定元素出现的初始状态,然后过度到元素的css设定样式,等等…

下一个例子Demo4.vue:

 1<template>
2    <div>
3        <div :style="{  tweenedNumber + 'px' }" class="bar">
4            <span>{{ tweenedNumber }}</span>
5        </div>
6    </div>
7</template>
8<script>
9import gsap from 'gsap'
10export default {
11    data() {
12        return {
13            number0,
14            tweenedNumber0
15        }
16    },
17    watch: {
18        number(newValue) {
19            gsap.to(this.$data, { 
20                duration1
21                ease'circ.out'
22                tweenedNumber: newValue 
23            })  
24            // 这里的this.$data使gsap可以操控我们的数据
25        }
26    },
27    created() {
28        setInterval(this.randomNumber, 1500)
29    },
30    methods: {
31        randomNumber() {
32            this.number = Math.floor(Math.random() * (800 - 0))
33        }
34    }
35}
36
</script>

这个例子中gsap操作了数据的过度变化,使number值的变化不那么生硬,从而获得了很好的用户体验。

GSAP的能力十分强大,更多详情可以参考GSAP详细文档


长按二维码关注公众号

原文地址:https://www.cnblogs.com/qinyuandong/p/13649952.html