⭐️ 本文首发自 前端修罗场(点击加入),是
一个由 资深开发者 独立运行 的专业技术社区,我专注Web 技术、答疑解惑、面试辅导以及职业发展。现在加入,私聊我即可获取一次免费的模拟面试机会,帮你评估知识点的掌握程度,获得更全面的学习指导意见,交个朋友,少走弯路,少吃亏!
🔥 本文作者已创建广受全网好评的 《前端面试题库》(点击收藏),该题库 针对准备找工作的应届生、初中高级前端工程师设计,以及想要巩固前端基础知识的开发者,文章中包含 90% 的面试考点和实际开发中需要掌握的知识,内容按点分类,环环相扣,重要的是,形成了前端技能树,提升了自己的前端技术水平。
作者对重点考题做了详细解析和重点标注(建议在 PC 上阅读),并通过图解、思维导图的方式帮你降低了学习成本,节省备考时间,尽可能快地提升。可以说目前市面上没有像这样完善的面试备考指南!
动画在交互方式中发挥着重要作用,它们可通过添加一些视觉风格来增强用户体验。 在本文中,我们将研究和比较目前最流行的 Vue.js 动画库。
首先是 vue-kinesis,它是一个强大的动画库,它提供了一系列组件,允许我们将交互式动画添加到我们的 Vue 应用程序中。 这个库会自然地对光标变化做出反应,并根据鼠标事件调用动画,但有趣的是,除此之外,vue-kinesis 还允许我们根据音频变化控制动画。

它的组件具有广泛的自定义属性,我们可以使用它们以编程方式控制动画,从而使我们能够轻松实现所需的效果。
vue-kinesis 可用于 Vue 2 和 Vue 3。 要将这个库包含在 Vue 3 项目中,必须首先安装包:
npm install vue-kinesis@next
然后将其导入到文件中,如下所示:
import { createApp } from "vue";
import App from "./App.vue";
import VueKinesis from "vue-kinesis";
const app = createApp(App);
app.use(VueKinesis);
app.mount("#app");
您还可以安装 Vue 2 版本:
npm install vue-kinesis
然后选择导入整个库,以便在项目中的任何位置都可以使用它:
// src/main.js
import Vue from 'vue'
import VueKinesis from 'vue-kinesis'
Vue.use(VueKinesis);
或者只导入一个特定的组件:
import { KinesisContainer } from 'vue-kinesis'
这个库包括三个组件,每个组件都有自己的属性来控制交互流程:
Kinesis-container — 用于禁用或启用交互的包装器组件。 此外,为了附加触发动画的事件,支持移动(鼠标交互)和滚动。 但是,移动设备不支持 move 事件
Kinesis-element — 要应用动画的元素的包装组件,以及指定动画类型或来源
Kinesis-audio — 此组件用于指定在将音频源添加到 kinesis 容器时要响应的音频频率
示例:
<template>
<div id="app">
<kinesis-container>
Here, you can put
<kinesis-element :strength="10"> whatever </kinesis-element>
<kinesis-element :strength="20"> content! </kinesis-element>
</kinesis-container>
</div>
</template>
<script>
import { KinesisContainer, KinesisElement } from "vue-kinesis";
export default {
name: "App",
components: {
KinesisContainer,
KinesisElement,
},
};
</script>
输出:

同样,下面是关于音频的示例:
<template>
<div id="app">
<div class="main">
<div style="padding: 40px">
<button class="play-button" @click="togglePlaying">
{{ isPlaying ? "Stop" : "Play" }}
</button>
</div>
<div style="padding: 40px">
<kinesis-container :audio="audioFile" :playAudio="isPlaying">
<kinesis-audio :audioIndex="50" type="scale">
<kinesis-element :strength="10" type="depth">
<div class="circle"></div>
</kinesis-element>
</kinesis-audio>
</kinesis-container>
</div>
</div>
</div>
</template>
<script>
import { KinesisContainer, KinesisElement, KinesisAudio } from "vue-kinesis";
export default {
name: "App",
components: {
KinesisContainer,
KinesisElement,
KinesisAudio,
},
data() {
return {
audioFile: require("./aud.mp3"),
isPlaying: false,
};
},
methods: {
togglePlaying() {
this.isPlaying = !this.isPlaying;
},
},
};
</script>
输出:

在此示例中,我们定义了音频文件的路径并将其附加到 kinesis-container,并且由于 kinesis-audio 组件由此触发,我们在其中放置了一个正方形 div,以便每当我们单击切换播放的按钮时 ,div 做出反应。
如前所述,该库通过向包含在其中的元素添加 kinesis 动画来对音频文件中的光标更改、滚动事件或频率做出反应。 因此,它对于在这些范围内创建动画最有用。 然而,一个值得注意的例子是一个简单的音乐应用程序,其中一些其他元素对当前正在播放的音频做出反应。
vue-prix 是另一个很棒的 vue 动画库,可以轻松地为图像添加视差滚动效果。 在视差效果中,前景图像及其背景元素都在移动,但背景移动得慢得多,从而产生深度错觉。

npm i vue-prlx
然后在我们的入口文件中初始化它:
// src/main.js
import Vue from 'vue'
import VuePrlx from 'vue-prlx'
Vue.use(VuePrlx);
或者,通过其 CDN 引入,如下所示:
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-prlx/dist/v-prlx.min.js"></script>
<script>
Vue.use(VuePrlx.VuePrlxPlugin);
</script>
只需在图像标签中添加一个新的 v-prlx 属性,视差效果将立即启动:
<img src="path/to/img" v-prlx>
在移动设备上,默认禁用视差效果。 但是,您可以通过将 .mobile 附加到 v-prlx 属性来轻松启用它:
<img src="path/to/img" v-prlx.mobile>
此外,通过提供额外的对象,我们可以设置视差速度、反转其方向等等:
<img
src="path/to/img"
v-prlx="{ reverse: true, speed: 0.2, fromBottom: true }"
/>
在 Web 应用程序中,视差效果通常添加到特色(侧面)图像中。
这是另一个轻量级的 Vue 库,它允许我们在 Vue 应用程序中为图像添加模拟的交互式 3D 效果。 而且,与我们讨论过的其他一些动画库不同,这个是 SSR 兼容的,这意味着它可以与服务器端渲染一起使用。
gif
npm install @luxdamore/vue-fake3d
-image-effect
要开始将 3D 效果添加到我们的图像文件中,我们需要导入 Fake3dImageEffect 组件以及库 CSS 文件:
import { Fake3dImageEffect } from "@luxdamore/vue-fake3d-image-effect";
import "@luxdamore/vue-fake3d-image-effect/dist/Fake3dImageEffect.css";
export default {
components: {
"fake3d-image-effect": Fake3dImageEffect,
},
};
或者,如果您想让它成为可以从应用程序中的任何位置访问的全局插件,我们可以使用以下代码来实现:
// src/main.js
import Fake3dImageEffect from "@luxdamore/vue-fake3d-image-effect";
import "@luxdamore/vue-fake3d-image-effect/dist/Fake3dImageEffect.css";
Vue.use(Fake3dImageEffect);
示例:
<template>
<div id="app">
<fake3d-image-effect
fill-height-content
tag="div"
:image="require('./path/to/aquarium.jpeg')"
>
<div class="container">
<h1>Boy at <u>Aquarium</u></h1>
<p class="m-5">
Lorem ipsum dolor sit amet consectetur adipisicing elit.
delectus!
</p>
<p>Photo by Biljana Martinić on Unsplash</p>
</div>
</fake3d-image-effect>
<img alt="Vue logo" src="./assets/logo.png" />
</div>
</template>
<script>
import { Fake3dImageEffect } from "@luxdamore/vue-fake3d-image-effect";
import "@luxdamore/vue-fake3d-image-effect/dist/Fake3dImageEffect.css";
export default {
name: "App",
components: { Fake3dImageEffect },
};
</script>
在这个例子中你可能已经注意到了,fake3dimage 组件还支持一些其他的 props,比如 fill-height-content prop,它将元素高度设置为 100vh(全高),以及 tag 属性,它允许我们选择 用于包装其他子元素的首选语义元素。

这个库允许我们通过简单地添加一个新的 v-wave 属性在单击标记元素时为标记元素添加漂亮的波纹效果,类似于材质设计中的波纹效果。
这个库有一个有趣的特性,它可以很好地处理静态定位的元素,并且可以根据父元素自动猜测波浪的颜色。 但是,如果认为合适,您也可以设置首选颜色。
npm i v-wave
import {createApp} from 'vue'
import VWave from 'v-wave'
import App from './App.vue'
createApp(App)
.use(VWave)
.mount('#app')
import Vue from 'vue'
import VWave from 'v-wave'
Vue.use(VWave)
要开始使用这个库,只需将 v-wave 属性添加到要添加波纹效果的任何元素上:
<button v-wave>Click me!</button>
<button v-wave="{ color: 'blue' }">Click me too!</button>
结果:

我们可以通过更改其初始不透明度、持续时间、缓动和许多其他参数来进一步自定义涟漪效果:
<div
v-wave="{
color: 'rebeccapurple',
initialOpacity: 0.5,
duration: 2,
easing: 'ease-in',
}"
>
Click me!
</div>
结果:

该库包含用于在元素滚动到视口时为其设置动画的指令。 然而,与之前的库不同的是,这个库没有直接提供帮助类或组件来允许我们向应用程序添加动画。 相反,它提供了指令,允许我们在应用程序的一部分滚动到视图中时调用动画。
npm install vue-animate-onscroll
引入:
import Vue from 'vue'
import VueAnimateOnScroll from 'vue-animate-onscroll'
Vue.use(VueAnimateOnScroll)
一旦作为 Vue 插件导入,我们可以通过向元素添加 v-animate-onscroll 属性以及我们的动画名称来在滚动时为元素设置动画:
<div v-animate-onscroll="'rotate">Rotate me once upon scroll</div>
但是,如前所述,我们仍然需要定义 CSS 动画 animation 才能触发动画。 一个更相关的例子如下所示:
<template>
<div id="app">
<div class="flex-center">
<div>
<h1>Awesome application</h1>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Perspiciatis,
eum.
</p>
</div>
</div>
<div class="main">
<img src="path/to/img" v-animate-onscroll="'swing'" />
</div>
</div>
</template>
<style>
/* create swing animation */
@keyframes swing {
10% {
transform: rotate(10deg);
}
40% {
transform: rotate(-10deg);
}
60% {
transform: rotate(5deg);
}
80% {
transform: rotate(-5deg);
}
}
</style>
输出:

还值得一提的是,默认情况下,当一个元素滚动到视图中时,其对应的动画只会触发一次。 但是,我们可以使用 v-animate-onscroll.repeat 代替后者,这样只要元素滚动到视图中,就会触发动画:
<img src="path/to/img" v-animate-onscroll.repeat="'swing'" />
此外,您可以自定义要触发动画的滚动方向(向上或向下):
<div v-animate-onscroll="{up: 'animationName'}">Animate me once on scroll up</div>
<div v-animate-onscroll="{down: 'animationName'}">Animate me on upon scroll down</div>
<!-- Different animations for up and down directions -->
<div v-animate-onscroll="{down: 'animationName', up: 'anotherAnimationName'}">Animate me on scroll</div>
从头开始创建 CSS 动画可能很耗时。 出于这个原因,将此库与其他动画库(例如流行的 Animate.css)互换使用是一种常见的方法。
每个动画库都是不同的,并且有不同的方法使事情变得更容易。 还有许多动画库可供选择。
有了这篇文章,希望您能够从各种可用的动画库中进行选择,并找到一个完美地补充您的 Vue.js 应用程序的动画库。
如果你觉得这篇文章还不错,请点击下方小红心 👍🏻 ❤️,鼓励一下!我会继续为你带来优质的内容~我是前端修罗场,
一个独立运行的专业技术社区,感谢你的关注与支持!
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po