VueJS中的动画(附实例和代码)

83 阅读3分钟

问题陈述--为什么是动画?

网站UI开发不是为了让事情变得漂亮。它是关于网站性能和客户体验的。根据亚马逊沃尔玛的研究,他们发现在增加用户互动时间时,转换率/收入会下降,因为用户在互动过程中感到被打断。另一项研究发现,与普通的加载器相比,定制的动画加载器的等待时间更长,放弃率更低,因为用户对前一个加载器的互动感更强。

简而言之,你的应用程序的动画应该对用户更有互动性和吸引力,有点像电影院的预订应用程序一个位置标签内的表格,例如。

什么是VueJS?

对于那些熟悉AngularReactJS的人来说,VueJS是一个渐进的JavaScript框架,支持一些功能:

  • 一个虚拟的DOM
  • 声明式渲染
  • 计算的属性
  • 反应式组件
  • 条件性渲染......仅举几例

其中一些功能与AngularReactJS已经提供的功能很相似。然而,你可以看看它与其他框架的比较

Todo列表实例

让我们举一个简单的例子:Todo列表,其中包含一个任务列表,具有向/从列表中添加/删除任务的功能。

这将是我们在HTML文件中的视图,假设你已经在script 标签中包含了VueJS:

<div id="app">
    <input type="text" v-model="task"/>
    <input type="button" value="Add" v-on:click="addTaskToList"/>
    <ul>
        <li v-for="(todo, index) in todoList">
            {% raw %}{{ todo }}{% endraw %}
            <input type="button" value="Remove" v-on:click="removeTaskFromList(index)"/>  
        </li>
    </ul>
</div>

同时,我们的JS文件看起来像这样:

var app = new Vue({
    el: '#app',
    data: {
        task: 'my first task',
        todoList : []
    },
    methods : {
        addTaskToList : function(){
            this.todoList.push(this.task);
        },
        removeTaskFromList : function(index){
            this.todoList.splice(index, 1);
        }
    }
});

代码本身是不言自明的。它只是用addTaskToList 方法在todoList 内添加一个task ,然后用removeTaskFromList 从列表中删除。

HTML中的事件绑定和循环语法看起来与你在AngularJS中看到的相似。然而,VueJS中的变量和方法的语法是不同的,这让你想起了你在**C++**中编码的私有变量和公共方法。你可以查看这个演示

让我们在这里面添加更多的交互。一个确认弹出窗口应该出现,有OKCancel 选项。无论选择什么选项,弹出窗口都应该在以后关闭。

HTML中,让我们修改列表元素:

<li v-for="(todo, index) in todoList">
    {% raw %}{{ todo }}{% endraw %}
    <input type="button" value="Remove" v-on:click="onRemoveTask(index)"/>
</li>

并添加一个新的弹出式元素:

<div v-show="isPopupOpen">
    Are you sure you want to remove this from Todo List?<br/>
    <input type="button" value="OK" v-on:click="confirmRemove()"/>
    <input type="button" value="Cancel" v-on:click="cancelRemove()"/>
</div>

同时在JS中,初始化里面的新数据变量:

data: {
    isPopupOpen : false,
    currentIndex: -1
}

还有,添加一些方法:

methods : {
    onRemoveTask : function(index) {
        this.isPopupOpen = true;
        this.currentIndex = index;
    },
    confirmRemove : function() {
        this.removeTaskFromList(this.currentIndex);
        this.isPopupOpen = false;
    },
    cancelRemove : function() {
        this.isPopupOpen = false;
    }
}

让我们在其中添加一些动画。

为了淡入/淡出弹出窗口,你需要将我们的弹出窗口包裹在transition 标签中:

<transition name="fade">
    <div v-show="isPopupOpen">
        … Pop-up element content
    </div>
</transition>

这个元素负责处理过渡逻辑。你不需要理会何时开始或停止过渡。你所要提到的是你想看到什么样的过渡和多长时间。这可以通过VueJS提供的一些CSS类来完成:

.fade-enter-active, .fade-leave-active {
    transition: opacity 0.5s ease-out;
}

.fade-enter, .fade-leave-to {
    opacity: 0;
}

注意:这个类中使用的fade 前缀应该与transition 组件的name 属性相匹配。

为了在弹出式窗口出现后模糊表单和列表元素,它们应该被包裹在一个使用v-bind 属性的有条件约束的容器内。

<div v-bind:class="[isPopupOpen ? 'disabled' : '', ‘container’]">
    … Form and Todo List element content
</div>

并添加所需的CSS:

.container {
    transition: all 0.05s ease-out;
}

.disabled {
    filter: blur(2px);
    opacity: 0.4;
    pointer-events: none;  // This makes sure that nothing else is clicked other than pop-up options
}

优势

  • 清洁
  • 语义
  • 可维护

这就是你如何以更简单和语义的方式创建应用程序和制作动画。然而,你必须有HTMLCSSJavaScript的中级知识。如果你认为VueJS很有前途,就去试试吧。还有很多东西你会喜欢去了解的。看看官方文档吧。