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 相关文章推荐
jquery URL参数判断,确定菜单样式
May 31 Javascript
跨浏览器的事件对象介绍
Jun 27 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
Jun 16 Javascript
JavaScript将XML转成JSON的方法
Mar 12 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
Jul 18 Javascript
jQuery实现的自定义弹出层效果实例详解
Sep 04 Javascript
js仿微信公众平台打标签功能
Apr 08 Javascript
详解vue-cli 本地开发mock数据使用方法
May 29 Javascript
Vue一次性简洁明了引入所有公共组件的方法
Nov 28 Javascript
Vue.Draggable拖拽功能的配置使用方法
Jul 29 Javascript
vuex实现及简略解析(小结)
Mar 01 Javascript
Javascript地址引用代码实例解析
Feb 25 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
php for 循环语句使用方法详细说明
2010/05/09 PHP
PHP开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
基于Jquery实现的一个图片滚动切换
2012/06/21 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
JS将网址url转化为JSON格式的方法
2018/07/02 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
JavaScript 中的无穷数(Infinity)详解
2020/02/13 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
python 地图经纬度转换、纠偏的实例代码
2018/08/06 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
Pytorch中Tensor与各种图像格式的相互转化详解
2019/12/26 Python
Django 返回json数据的实现示例
2020/03/05 Python
Python内置函数locals和globals对比
2020/04/28 Python
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
智能旅行箱:Horizn Studios
2018/04/30 全球购物
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
求职信范文大全
2014/05/26 职场文书
药店促销活动总结
2014/07/10 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers
vue实现Toast组件轻提示
2022/04/10 Vue.js