js实现直播点击飘心效果


Posted in Javascript onAugust 19, 2020

本文实例为大家分享了js实现直播点击飘心效果的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title>直播点击飘心效果</title>
 <style type="text/css">
html, body {
 height: 100%;
 position: relative;
 width: 100%;
}
canvas {
 display: block;
 position: absolute;
 bottom: 100px;
 right: -24px;
 z-index: 20;
 cursor: pointer;
 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.journal-reward {
 position: absolute;
 bottom: 70px;
 right: 20px;
 height: 60px;
 width: 60px;
 display: block;
 z-index: 21;
 cursor: pointer;
}
 
</style>
</head>
<body>
 <img src="img/reward.png" class="journal-reward" /> 
<script src="jquery.min.js"></script> 
<script src="flutter-hearts-zmt.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>

flutter-hearts-zmt.js

! function(t, e) {
 "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : t.BubbleHearts = e()
}(this, function() {
 "use strict";
 
 function t(t, n, r) {
 var i = e.uniformDiscrete(89, 91) / 100,
 o = 1 - i,
 u = (e.uniformDiscrete(45, 60) + e.uniformDiscrete(45, 60)) / 100,
 a = function(t) {
 return t > i ? Math.max(((1 - t) / o).toFixed(2), .1) * u : u
 },
 c = e.uniformDiscrete(-30, 30),
 f = function(t) {
 return c
 },
 h = 10,
 s = n.width / 2 + e.uniformDiscrete(-h, h),
 d = (n.width - Math.sqrt(Math.pow(t.width, 2) + Math.pow(t.height, 2))) / 2 - h,
 l = e.uniformDiscrete(.8 * d, d) * (e.uniformDiscrete(0, 1) ? 1 : -1),
 m = e.uniformDiscrete(250, 400),
 w = function(t) {
 return t > i ? s : s + l * Math.sin(m * (i - t) * Math.PI / 180)
 },
 v = function(e) {
 return t.height / 2 + (n.height - t.height / 2) * e
 },
 p = e.uniformDiscrete(14, 18) / 100,
 g = function(t) {
 return t > p ? 1 : 1 - ((p - t) / p).toFixed(2)
 };
 return function(e) {
 if(!(e >= 0)) return !0;
 r.save();
 var n = a(e),
 i = f(e),
 o = w(e),
 u = v(e);
 r.translate(o, u), r.scale(n, n), r.rotate(i * Math.PI / 180), r.globalAlpha = g(e), r.drawImage(t, -t.width / 2, -t.height / 2, t.width, t.height), r.restore()
 }
 }
 var e = function(t) {
 var e = t,
 n = Math.floor,
 r = Math.random;
 return t.uniform = function(t, e) {
 return t + (e - t) * r()
 }, t.uniformDiscrete = function(t, r) {
 return t + n((r - t + 1) * e.uniform(0, 1))
 }, t
 }({}),
 n = function(t, e) {
 if(!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
 },
 r = function() {
 function t(t, e) {
 for(var n = 0; n < e.length; n++) {
  var r = e[n];
  r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r)
 }
 }
 return function(e, n, r) {
 return n && t(e.prototype, n), r && t(e, r), e
 }
 }(),
 i = window.requestAnimationFrame || window.webkitRequestAnimationFrame || function(t) {
 return setTimeout(t, 16)
 },
 o = function() {
 function o() {
 n(this, o);
 var t = this.canvas = document.createElement("canvas"),
  e = this.context = t.getContext("2d"),
  r = this._children = [],
  u = function n() {
  i(n), e.clearRect(0, 0, t.width, t.height);
  for(var o = 0, u = r.length; o < u;) {
  var a = r[o];
  a.render.call(null, (a.timestamp + a.duration - new Date) / a.duration) ? (r.splice(o, 1), u--) : o++
  }
  };
 i(u)
 }
 return r(o, [{
 key: "bubble",
 value: function(n) {
  var r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : e.uniformDiscrete(2400, 3600),
  i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : t(n, this.canvas, this.context);
  return this._children.push({
  render: i,
  duration: r,
  timestamp: +new Date
  }), this
 }
 }]), o
 }();
 return o
});
// 图片地址在此处更换 可换成你的图片
var assets = [
 'img/1.png',
 'img/2.png',
 'img/3.png',
 'img/4.png',
 'img/5.png',
];
assets.forEach(function(src, index) {
 assets[index] = new Promise(function(resolve) {
 var img = new Image;
 img.onload = resolve.bind(null, img);
 img.src = src;
 });
});
 
Promise.all(assets).then(function(images) {
 
 var random = {
 uniform: function(min, max) {
 return min + (max - min) * Math.random();
 },
 uniformDiscrete: function(i, j) {
 return i + Math.floor((j - i + 1) * random.uniform(0, 1));
 },
 };
 
 var stage = new BubbleHearts();
 var canvas = stage.canvas;
 canvas.width = 170;
 canvas.height = 300;
 canvas.style['width'] = '170px';
 canvas.style['height'] = '300px';
 document.body.appendChild(canvas);
 //journal-reward 为赏桃的按钮 
 document.getElementsByClassName('journal-reward')[0].addEventListener('click', function() {
 //随机飘动
 stage.bubble(images[random.uniformDiscrete(0, images.length - 1)]);
 
 }, false);
 
});

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

Javascript 相关文章推荐
超级简单的图片防盗(HTML),好用
Apr 08 Javascript
TextArea 控件的最大长度问题(js json)
Dec 16 Javascript
Javascript 面向对象 重载
May 13 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
Apr 03 Javascript
输入框过滤非数字的js代码
Sep 18 Javascript
Jqgrid之强大的表格插件应用
Dec 02 Javascript
详解Angualr 组件间通信
Jan 21 Javascript
使用canvas进行图像编辑的实例
Aug 29 Javascript
微信小程序 动画的简单实例
Oct 12 Javascript
angular动态表单制作
Feb 23 Javascript
JS中比Switch...Case更优雅的多条件判断写法
Sep 05 Javascript
JavaScript冒泡算法原理与实现方法深入理解
Jun 04 Javascript
js实现鼠标点击飘爱心效果
Aug 19 #Javascript
Vue环境搭建+VSCode+Win10的详细教程
Aug 19 #Javascript
Vue实现导航栏菜单
Aug 19 #Javascript
vue实现tab栏点击高亮效果
Aug 19 #Javascript
封装Vue Element的table表格组件的示例详解
Aug 19 #Javascript
JS实现页面鼠标点击出现图片特效
Aug 19 #Javascript
Vue实现点击导航栏当前标签后变色功能
Aug 19 #Javascript
You might like
PHP面向对象的使用教程 简单数据库连接
2006/11/25 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
js获取视频时长代码
2014/04/10 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
Javascript中setTimeOut和setInterval的定时器用法
2015/06/12 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
Python比较2个时间大小的实现方法
2018/04/10 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
2014年消防工作实施方案
2014/02/20 职场文书
2014年冬季防火方案
2014/05/21 职场文书
节能标语大全
2014/06/21 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
工程质检员岗位职责
2015/04/08 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
nginx配置proxy_pass中url末尾带/与不带/的区别详解
2021/03/31 Servers
js判断两个数组相等的5种方法
2022/05/06 Javascript