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 相关文章推荐
ie 调试javascript的工具
Apr 29 Javascript
jquery tab插件精简版分享
Sep 10 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
Apr 20 Javascript
jquery each的几种常用的使用方法示例
Jan 21 Javascript
基于Javascript实现弹出页面效果
Jan 01 Javascript
AngularJS ng-blur 指令详解及简单实例
Jul 30 Javascript
JS如何生成一个不重复的ID的函数
Dec 25 Javascript
工厂模式在JS中的实践
Jan 18 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
Aug 16 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
Aug 25 Javascript
antd Select下拉菜单动态添加option里的内容操作
Nov 02 Javascript
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
给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
php中文件上传的安全问题
2006/10/09 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
jQuery简单实现禁用右键菜单
2015/03/10 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
JS与HTML结合实现流程进度展示条思路详解
2017/09/03 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
Python实现partial改变方法默认参数
2014/08/18 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
2019/08/09 Python
wxPython实现带颜色的进度条
2019/11/19 Python
python实现扫雷游戏
2020/03/03 Python
Python如何急速下载第三方库详解
2020/11/02 Python
python tqdm实现进度条的示例代码
2020/11/10 Python
化学实验员岗位职责
2013/12/28 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
叶问观后感
2015/06/15 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
优秀创业计划书分享
2019/07/19 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
python爬取新闻门户网站的示例
2021/04/25 Python
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers