下面是代码:
<template>
    <div class="ser_home">
        <ul class="red_packet" id="red_packet">
            <template v-for="(item, index) in liParams">
                <li :style="{ left: item.left, animationDuration: item.durTime, webkitAnimationDuration: item.durTime}" 
  :class="item.cls" :data-index="index" @webkitAnimationEnd="removeDom">
                    <a href='javascript:;'>
                        <i :style="{ transform: item.transforms, webkitTransform: item.transforms}"></i>
                    </a>
                </li>
            </template>
        </ul>
    </div>
</template>

<script>
export default {
    data () {
        return {
            liParams: [],
            timer: null,
            duration: 10000 // 定义时间
        }
    },
    mounted () {
        this.startRedPacket()
    },
    methods: {
        /**
         * 开启动画
         */
        startRedPacket() {
            let win = document.documentElement.clientWidth || document.body.clientWidth
            let left = parseInt(Math.random() * (win - 50) + 0);
            
            let rotate = (parseInt(Math.random() * (45 - (-45)) - 45)) + "deg";  // 旋转角度
            let scales = (Math.random() * (12 - 8 + 1) + 8) * 0.1;  // 图片尺寸
            let durTime = (Math.random() * (2.5 - 1.2 + 1) + 1.2) + 's'; // 时间  1.2和1.2这个数值保持一样
            console.log(durTime)
            this.liParams.push({left: left+'px', cls: 'move_1', transforms: 'rotate('+ rotate +') scale('+ scales +')', durTime: durTime})

setTimeout( () =>  {   // 多少时间结束
                clearTimeout(this.timer)
                return;
            }, this.duration)

this.timer = setTimeout( () => {
                this.startRedPacket()
            },100)   
        },
        /**
         * 回收dom节点
         */
        removeDom (e) {
            let target = e.currentTarget;
            document.querySelector('#red_packet').removeChild(target)
        }
    }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">
.ser_home {
    width: 100%;
    height: 100%;
}
.red_packet {
    display: block;
    position: relative;
    overflow: hidden;
    width: 100%;
    height: 100%;
    i {
        width: 48px;
        height: 69px;
        display: block;
        background: url('/hongbao.png') no-repeat;
    }
    li {
        position: absolute;
        animation: all 3s linear;
        top:-100px;
        z-index: 10;
        &.move_1 {
            -webkit-animation: aim_move 5s linear 1 forwards;
            animation: aim_move 5s linear 1 forwards;
        }
    }
    a {
        display: block;
    }
}

@keyframes aim_move {
      0% {
        -webkit-transform: translateY(0);
        transform: translateY(0);
      }
      100% {
        -webkit-transform: translateY(120vh);
        transform: translateY(120vh);
      }
    }

</style>
---------------------
作者:彻夜不归
来源:CSDN
原文:https://blog.csdn.net/qq_40204835/article/details/79173685
版权声明:本文为博主原创文章,转载请附上博文链接!

vue 在移动端实现红包雨 (兼容性好)的更多相关文章

  1. 2017了,回家前 "年末" 分享:下雨,飘雪,红包雨,碰撞球,自定义View

    (本博客为原创:http://www.cnblogs.com/linguanh/) 目录: 效果展示 感想 代码拆解 开源地址 效果展示 有没有兴趣继续看下去,直接看下"颜值"是第 ...

  2. 追求极致的用户体验ssr(基于vue的服务端渲染)

    首先这篇博客并不是ssr建议教程,需要ssr入门的我建议也不要搜索博客了,因为官网给出了详细的入门步骤,只需要step by step就可以了,这篇博客的意义是如何使用ssr,可能不同的人有不同的意见 ...

  3. 红包雨中:Redis 和 Lua 的邂逅

    2018年,王思聪的冲顶大会,西瓜视频的百万英雄,再到映客的芝士超人,直播答题火爆全网. 我服务的一家电商公司也加入了这次热潮,技术团队研发了直播答题功能.答题结束之后,红包会以红包雨的形式落下,用户 ...

  4. 仿淘宝,京东红包雨(基于Phaser框架)

    本红包雨项目是基于HTML5的游戏框架Phaser写的,最终形成的是一个canvas,所以性能很好,但是必须要说的是这个框架比较大,压缩后也有700K左右,所以请慎用. 代码地址: https://g ...

  5. Vue.js 服务端渲染业务入门实践

    作者:威威(沪江前端开发工程师) 本文原创,转载请注明作者及出处. 背景 最近, 产品同学一如往常笑嘻嘻的递来需求文档, 纵使内心万般拒绝, 身体倒是很诚实. 接过需求,好在需求不复杂, 简单构思 后 ...

  6. ASP.NET Core 与 Vue.js 服务端渲染

    http://mgyongyosi.com/2016/Vuejs-server-side-rendering-with-aspnet-core/ 原作者:Mihály Gyöngyösi 译者:oop ...

  7. vue.js移动端配置flexible.js

    前言 最近在用vue做移动端项目,网上找了一些移动端适配的方案,个人觉得手淘团队flexible.js还是比较容易上手,在这里做下总结. 主体 flexible.js适配方案采用rem布局,根据屏幕分 ...

  8. Vue(SPA) WebPack模块化打包、SEO优化(Vue SSR服务端同构直出)、全浏览器兼容完整解决方案

    白驹过隙,时光荏苒 大概去年这个时候写了angular 结合webpack的一套前端方案,今年此时祭出vue2结合webpack的一套前端方案. 明年的这个时候我又是在做什么... 读在最前面: 1. ...

  9. 用css动画写一个下红包雨的效果

    红包雨的功能相信大家都做过,不过一般都是用js计算的,闲着无聊用css的样式写了类似的,主要用的是css的transform和animation结合.大概代码逻辑: @keyframes startH ...

随机推荐

  1. poj 1061 青蛙的约会+拓展欧几里得+题解

    青蛙的约会+拓展欧几里得+题解 纵有疾风起 题意 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出 ...

  2. 树型DP入门

    题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚 ...

  3. P5596 洛谷月赛 题 题解

    因为a>=0,b>=0,所以y^2-x^2>=0,所以y>x,因为都是自然数设y=x+k,化简得x=b-k^2/2*k-a;可知x仅当b-k^2%2*k-a==0且b-k^2与 ...

  4. 学习WPF-1

    学习WPF-1 最近到新公司,需要使用WPF来做界面开发,我原先是使用WinForm来做界面开发的,所以对于现在使用WPF来开发,需要先学习一段时间了,考核的内容目前也还没定下来做什么, 但终归是使用 ...

  5. Jquery复习(五)之append()、appendTo()、prepend()、prependTo()、after()、before()易忘点

    添加元素的方法 append().appendTo().prepend().prependTo().after().before() 通过 append() .appendTo().prepend() ...

  6. 运维LVS-NAT模式理解

    一.LVS-NAT模式的工作原理这个是通过网络地址转换的方法来实现调度的.首先调度器(LB)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个 后端的真实服务器(RS ...

  7. 2019-11-29-dotnet-core-使用-CoreRT-将程序编译为-Native-程序

    title author date CreateTime categories dotnet core 使用 CoreRT 将程序编译为 Native 程序 lindexi 2019-11-29 08 ...

  8. SQL的基本操作(三)

    Hive基本SQL操作 Hive DDL(数据库定义语言) 1.数据库的基本操作 --展示所有数据库 show databases; --切换数据库 use database_name; /*创建数据 ...

  9. [SCOI2016]幸运数字(线性基,倍增)

    [SCOI2016]幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作 ...

  10. elk搭建的详细步骤以及说明

    一:准备工作 1.准备一台虚拟机 192.168.175.222      elk-node2 2.关闭防火墙以及selinux 命令:systemctl stop firewalld       # ...