js仿微信抢红包功能


Posted in Javascript onSeptember 25, 2020

本文实例为大家分享了js仿微信抢红包功能的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>仿微信抢红包</title>
  <style>
   html,body,div{margin:0;padding:0;}
   body{background:#EAEAEA;font:16px/1.8 "微软雅黑";padding-bottom:20px}
   input{margin:0;display:inline-block;border:1px solid #ddd;padding:4px 2px;font-size:16px;font-family:"微软雅黑";margin-right: 5px;}
   input:focus{border-color:#3C9BD1;outline:none;}
   
   .wrap,.list { margin: 50px auto; width: 300px;}
   .title{ font-size: 42px; color: #464646;text-align: center;}
   .line{height:40px;line-height:40px;text-align: center;}
   .btn{display:block;background:#3C9BD1;color:#fff;line-height: 40px;height:40px;text-align: center;width:200px;margin:0 auto;margin-top:50px;text-decoration: none;transition:all .3s linear;border-radius: 2px;}
   .btn:hover{opacity:.9;}
   .list{width:500px;border:1px solid #DBDBDB;padding:10px;BACKGROUND:#F5F5F5;text-align: center;}
   .list p span {color: red; padding: 0 8px;}
   .list p:empty{background: #000000;}
   .list:empty{display: none;}
   .link{position:fixed;height:20px;font-size: 12px;color:#999;text-align: center;width: 100%;bottom:0;line-height:20px;margin:0;padding:0; background: #EAEAEA;padding:5px 0;}
   .link a{font-size:12px;color:#999;}
  </style>
 </head>
 <body>
  <h1 class="title">javascript实现仿微信抢红包</h1>
  <div class="wrap">
   <div class="line">红包个数:<input type="text" name="packetNumber" value="5" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')" maxlength="10">个</div>
   <div class="line">总 金 额:<input type="text" name="money" value="5" onkeyup="if(isNaN(value))execCommand('undo')" onafterpaste="if(isNaN(value))execCommand('undo')" maxlength="10">元</div>
   <div class="line"><a class="btn" href="javascript:;" rel="external nofollow" >发红包</a></div>
  </div>
  <div class="list"></div>
  <p class="link">参考<a target="_blank" href="https://www.zybuluo.com/yulin718/note/93148">《微信红包的架构设计简介》</a>文章</p>

<script>
 "use strict";

var _createClass = function() {
 function defineProperties(target, props) {
  for (var i = 0; i < props.length; i++) {
   var descriptor = props[i];
   descriptor.enumerable = descriptor.enumerable || false;
   descriptor.configurable = true;
   if ("value" in descriptor)
    descriptor.writable = true;
   Object.defineProperty(target, descriptor.key, descriptor);
  }
 }
 return function(Constructor, protoProps, staticProps) {
  if (protoProps)
   defineProperties(Constructor.prototype, protoProps);
  if (staticProps)
   defineProperties(Constructor, staticProps);
  return Constructor;
 }
 ;
}();

function _classCallCheck(instance, Constructor) {
 if (!(instance instanceof Constructor)) {
  throw new TypeError("Cannot call a class as a function");
 }
}

var MoneyPacket = function() {
 function MoneyPacket(packNumber, money) {
  _classCallCheck(this, MoneyPacket);
  
  this.min = 0.01;
  this.flag = true;
  this.packNumber = packNumber;
  this.money = money;
  if (!this.checkPackage()) {
   this.flag = false;
   return {
    "flag": this.flag
   };
  }
 }
 
 _createClass(MoneyPacket, [{
  key: "checkPackage",
  value: function checkPackage() {
   if (this.packNumber == 0) {
    alert("至少需要设置1个红包");
    return false;
   }
   if (this.money <= 0) {
    alert("红包总金额不能小于0");
    return false;
   }
   if (this.packNumber * this.min > this.money) {
    alert("单个红包金额不可低于0.01元");
    return false;
   }
   return true;
  }
 }]);
 
 return MoneyPacket;
}();

var getRandomMoney = function getRandomMoney(packet) {
 if (packet.packNumber == 0) {
  return;
 }
 if (packet.packNumber == 1) {
  var _lastMoney = Math.round(packet.money * 100) / 100;
  packet.packNumber--;
  packet.money = 0;
  return _lastMoney;
 }
 var min = 0.01
  , 
 max = packet.money / packet.packNumber * 2
  , 
 money = Math.random() * max;
 money = money < min ? min : money;
 money = Math.floor(money * 100) / 100;
 packet.packNumber--;
 packet.money = Math.round((packet.money - money) * 100) / 100;
 return money;
}
;

(function() {
 var oBtn = document.querySelector(".btn");
 var oList = document.querySelector(".list");
 
 oBtn.onclick = function() {
  var packetNumber = +document.querySelector("input[name=packetNumber]").value;
  var money = +document.querySelector("input[name=money]").value;
  var str = "";
  
  var packet = new MoneyPacket(packetNumber,money)
   , 
  num = packet.flag && packet.packNumber || 0;
  console.log("========================================================================");
  for (var i = 0; i < num; i++) {
   var _pack = getRandomMoney(packet);
   str += "<p>第<span>" + i + "</span>个红包:: <span>" + _pack.toFixed(2) + "</span>元  ==剩余红包:: <span>" + packet.money.toFixed(2) + "</span> 元<p>";
   console.log("第", i, "个红包::", _pack.toFixed(2), "元  ==剩余红包::", packet.money.toFixed(2), "元");
  }
  str !== "" && (oList.innerHTML = str);
 }
 ;
})();

</script>
 </body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 拖放效果实现代码
Jan 22 Javascript
AngularJS入门教程之Hello World!
Dec 06 Javascript
AngularJS 实现按需异步加载实例代码
Oct 18 Javascript
详解jQuery中ajax.load()方法
Jan 25 Javascript
jquery append与appendTo方法比较
May 24 jQuery
运用jQuery写的验证表单(实例讲解)
Jul 06 jQuery
jQuery选择器之属性筛选选择器用法详解
Sep 19 jQuery
微信小程序使用audio组件播放音乐功能示例【附源码下载】
Dec 08 Javascript
基于Vue开发数字输入框组件
Dec 19 Javascript
Vue的路由动态重定向和导航守卫实例
Mar 17 Javascript
详解JS中统计函数执行次数与执行时间
Sep 04 Javascript
Vue实现开关按钮拖拽效果
Sep 22 Javascript
给vue项目添加ESLint的详细步骤
Sep 29 #Javascript
微信小程序 POST请求的实例详解
Sep 29 #Javascript
微信小程序之数据缓存的实例详解
Sep 29 #Javascript
微信小程序getPhoneNumber获取用户手机号
Sep 29 #Javascript
微信小程序中setInterval的使用方法
Sep 29 #Javascript
vue生成随机验证码的示例代码
Sep 29 #Javascript
JS设计模式之单例模式(一)
Sep 29 #Javascript
You might like
十大“创意”战术!
2020/03/04 星际争霸
php jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
php操作MongoDB类实例
2015/06/17 PHP
php实现异步数据调用的方法
2015/12/24 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
python能在浏览器能运行吗
2020/06/17 Python
python中pickle模块浅析
2020/12/29 Python
Canvas实现贝赛尔曲线轨迹动画的示例代码
2019/04/25 HTML / CSS
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
策划创业计划书
2014/02/06 职场文书
出纳会计岗位职责
2014/03/12 职场文书
法定代表人授权委托书
2014/09/19 职场文书
留学推荐信中文范文
2015/03/26 职场文书
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL