您的当前位置:首页>全部文章>文章详情

【UniApp】uniapp及vue中动画功能实现方案

CrazyPanda发表于:2023-12-12 17:56:54浏览:375次TAG:

需求场景:实际开发过程中,我们经常遇到各类比较炫酷的动画开发,比如简单的echarts插件使用,animation动画等...

动画实现方案:

1.css动画,如gif,a-png,animation,transform等

animation: handleAni 1s linear infinite;
@keyframes handleAni {
    0% { //css样式 }
    50%{ //css样式 }
    100% { // css样式 }
    或者
    from {}
    to {}
}

理解CSS3 transform中的Matrix(矩阵) « 张鑫旭-鑫空间-鑫生活

2.vue内置组件transition

<!-- 将要使用动画的内容放在transition里即可 -->
<transition name="fade">
 <div v-show="show"></div>
</transition>
 
 
.fade-enter-active,
.fade-leave-active {
 transition: opacity .5s
}
.fade-enter,
.fade-leave-active {
 opacity: 0
}

3.切视频

前端两种播放视频的方式_木易66丶的博客-CSDN博客_前端视频播放

4.循环序列帧

简单思路是设计师给出N个几十kb的小图片,利用setInterval定时器循环图片,需要注意的是:setInterval会越循环越快,需要定义变量intervalFlag防止加速,缺点:这种方式属于很多图片无限循环,后边的图片不断覆盖前边的图片,如果图片加载缓慢会导致卡白,而且比较耗费性能

<img :src="showImageUrl" class="" mode="aspectFit" />
data() {
    return {
        intervalFlag: false,
        setIntervalNumber: 0,
        showImageUrl: '',
        interval: null,
    }
}
handleAni() {
    if(this.intervalFlag) return //防止加速
    this.intervalFlag = true
    let _this = this
    this.interval = setInterval(function() { _this.setIntervalFunc() }, 60) //每60毫秒执行一次
}
setIntervalFunc() {
    if(this.setIntervalNumber>=40) {
        this.setIntervalNumber = 0
    }
    this.showImageUrl = this.setIntervalNumber + '.png'
}
// 清除定时器
clearIntervalFunc() {
    clearInterval(this.interval)
}

5.lottie

AE导出json文件,项目中引入json实现动画

[笔记]从AE动画到web代码-一一网络

6.svga

6.1.简单实现:vue项目中使用svga格式文件_钱大碗爱吃辣的博客-CSDN博客_vue使用svga

6.2.理解文章:

SVGAPlayer库学习 · 语雀

SVGA使用手册_星星点点微光的博客-CSDN博客_svga使用

6.3.工具:SVGA

svga引入:

// 安装
npm install svgaplayerweb --save
 
// 引入svgaplayerweb插件
import SVGA from 'svgaplayerweb';
 
// 引入svga

组件封装:

<template>
    <view class="svgaBox">
        <view id="demo" :style="{ 'position':'absolute', 'left': 0, 'top': 0, 'width': canvasWidth+'px', 'height': canvasHeight+'px' }"></view>
    </view>
</template>
<script>
    import SVGA from 'svgaplayerweb';
    export default {
        props: {
            canvasWidth: {
                type: Number,
                default: 0
            },
            canvasHeight: {
                type: Number,
                default: 0
            },
            imageAniUrl: {
                type: String,
                default: 'default.svga'
            },
            canvasLeft: {
                type: Number,
                default: 0
            },
            canvasTop: {
                type: Number,
                default: 0
            },
            isLoop: {
                type: Boolean,
                default: false
            },
        },
        data() {
            return {}
        },
        mounted() {
            this.initSvag()
        },
        methods: {
            initSvag() {
                let _this = this
                var canvasList = document.getElementById('demo')
                var canvas = document.createElement('canvas')
                canvas.width = this.canvasWidth  // Number类型!
                canvas.height= this.canvasHeight // Number类型!
                canvas.style.position = 'absolute'
                canvas.style.top = this.canvasTop
                canvas.style.left = this.canvasLeft
                canvas.style.zIndex = 4
                canvas.id = 'myCanvas'
                canvasList.appendChild(canvas)
                let player = new SVGA.Player('#myCanvas')
                let parser = new SVGA.Player('#myCanvas')
                parser.load(this.imageAniUrl, function(value){
                    player.loops = _this.isLoops?0:1
                    player.setVideoItem(value)
                    player.startAnimation()
                })
            }
        }
    }
</script>

实现效果(转骰子效果)

WeChat_20221008194011-CSDN直播

7.vue-lottie动画

vue中使用Lottie - 简书

Lottie - 轻松实现复杂的动画效果 - 掘金

8.js判断当前页面用什么浏览器打开的方法

js判断当前页面用什么浏览器打开的方法 - phpStudy

猜你喜欢

【UniApp】uniapp全局方法怎么使用
uniapp是一款基于Vue.js框架开发的跨平台开发框架,可以通过编写一套代码,同时在iOS、Android、H5等多个平台上运行。在uniapp中,我们可以使用全局方法来方便地进行公共方法的调用。本文将介绍uniapp全局方法的定义和使用。一、定义全局方法在uniapp中定义全局方法需要用到Vue.prototype.$xxxx = function()这个语法,其中xxxx是方法名称。示例代码如下:Vue.prototype.$formatDate&nbsp;=&nbsp;fun
发表于:2023-12-16 浏览:359 TAG:
【UniApp】UniApp原生讯飞语音插件-YL-SpeechRecognition
由于插件文档图片部分可能无法显示,可以移步到CSDN博客,查看完整文档:https://blog.csdn.net/baiyuliang2013/article/details/130925332插件说明:支持安卓IOS双端!新版本已由必须联系本人打离线包,升级为线上购买后自主导入sdk打包,更方便快捷!当然,您在使用时遇到问题依然可以联系本人QQ:453503875,微信:同qq。若您只需要安卓端,可使用:Uts版插件:https://ext.dcloud.net.cn/plugin?id=1
发表于:2023-12-07 浏览:358 TAG:
【UniApp】利用uniapp实现图表展示功能
利用uniapp实现图表展示功能随着信息化时代的到来,数据的处理和可视化成为了各个领域的重要任务。在移动端开发中,图表展示功能也成为了一个不可或缺的组成部分。而利用uniapp框架实现图表展示功能,不仅可以快速开发出高效的移动应用程序,还能兼容多个平台,提供一致的用户体验。一、准备工作在开始之前,我们首先需要准备好uniapp的开发环境,并且在项目中引入常用的图表库echarts。我们可以在uniapp的插件市场中搜索echarts插件,并按照提示进行安装和引入。二、开发步骤创建一个新
发表于:2023-12-23 浏览:325 TAG:
【UniApp】Uniapp怎么动态更改tabbar
Uniapp是一款跨端开发框架,可以同时开发出H5、小程序、app等多个平台的应用,是非常实用的开发工具。其中,tabbar是作为底部导航栏来展示多个页面的重要控件之一。在开发过程中,有时需要根据不同的业务需求动态更改tabbar,本文将介绍如何在Uniapp中实现动态更改tabbar的方法。一、tabbar的基本使用及结构在Uniapp中使用tabbar,需要在pages.json文件中设置底部导航栏的样式和页面路径。示例代码如下:&quot;tabBar&quot;:&nbsp;{
发表于:2023-12-25 浏览:475 TAG:
【Uniapp】uniapp如何传递参数
一、通过URL传递参数URL是一种描述文件在计算机网络中位置的方式。在uniapp中,可以通过URL传递参数。在web开发中,可以通过query string来传递参数。在uniapp中有两种方式来进行URL传参:路由跳转和h5页面跳转:1.路由跳转uniapp中提供了一些路由相关的API,其中,uni.navigateTo和uni.redirectTo这两个API可以在跳转时携带参数。在跳转时,可以将参数以对象的形式传递给URL,并以query string(查询字符串)的形式来表示。如下所示
发表于:2024-03-26 浏览:324 TAG:
【UniApp】uniapp怎么判断是否安装微信
随着移动互联网的发展,微信已经成为了国内用户相对来说最为普及和使用最为广泛的社交工具。对于一些涉及到微信相关功能的应用程序开发者来说,需要在程序中加入判断用户是否已经安装了微信应用,以便在用户没有安装微信的情况下给出相应的提示或选择其他途径实现相关功能。在uniapp开发中,我们可以使用uniapp自带的uni.getProvider()函数来判断当前设备是否安装了某个提供商的应用程序。而微信作为目前国内使用最为广泛的社交工具之一,这里我们主要介绍如何使用uni.getProvider
发表于:2023-12-17 浏览:390 TAG:
【UniApp】uniapp 中使用addEventListener
uniapp 中使用 addEventListener 方法可以给某个元素绑定事件监听。使用方法:document.getElementById(&quot;some-element&quot;).addEventListener(&quot;click&quot;,&nbsp;function()&nbsp;{ &nbsp;&nbsp;//&nbsp;do&nbsp;something&nbsp;when&nbsp;the&nbsp;element&nbsp;is&nbsp;clicked }
发表于:2023-12-13 浏览:539 TAG:
【UniApp】uniapp中路由传参的加密与解密方式
uniapp中路由传参的加密与解密方式,需要具体代码示例【引言】在uniapp开发中,经常会遇到一种情况,就是需要将一些敏感信息通过路由进行传递,但是传递的参数是明文,有一定的安全风险。为了保护用户数据的安全性,我们可以对路由传参进行加密和解密处理,以增加数据的安全性。本文将介绍uniapp中路由传参的加密与解密方式,并提供实际代码示例。【加密方式】在uniapp中,可以使用常见的加密算法(如AES、RSA等)对传递的参数进行加密,以保护数据的安全性。下面以AES算法为例,介绍加密的方式及代码示
发表于:2024-04-03 浏览:335 TAG:
【UniApp】uniapp怎么关闭某个页面
在开发Uniapp应用的过程中,常常需要实现关闭某个页面的功能,本文将介绍如何在Uniapp中关闭指定页面。一、通过页面栈管理关闭页面在Uniapp应用中,页面的跳转是通过页面栈管理实现的。页面栈是一个数据结构,用来存储页面之间的跳转关系,每当跳转到一个新页面时,该页面会被添加到页面栈的顶部,当从该页面返回或关闭该页面时,该页面会被从页面栈中弹出。因此
发表于:2023-12-25 浏览:294 TAG:
【UniApp】如何在uniapp中实现底部导航的隐藏功能
在使用uniapp开发移动应用时,底部导航栏的存在可以帮助用户快速地切换页面和功能,提高用户体验和操作效率。然而,在某些特殊情况下,我们可能需要隐藏掉底部导航栏,本文将介绍如何在uniapp中实现底部导航的隐藏。一、底部导航栏的基本使用uniapp的底部导航栏是在pages.json文件中进行配置的,我们可以在其中设置底部菜单栏的样式、图标和跳转的页面等信息。以下是一个简单的示例代码:{ &nbsp;&nbsp;&quot;pages&quot;:[ &nbsp;&nbsp;&amp;nbs
发表于:2023-12-16 浏览:351 TAG: