canvas模仿微信抢红包功能

1、原理:先创建一张img图片,用filter滤镜制作毛玻璃效果。

2、利用绝对定位,使canvas刚好盖在img上面。

3、利用canvas原生clip函数剪辑一个圆形。

地址:http://sandbox.runjs.cn/show/c3mlltak

源代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <!--Designer:[han.jackson] Developer:[zengxiangliang] date:20160412-->
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <meta name="keywords" content="keywords"/>
    <meta name="description" content="description"/>
    <meta name="robots" content="all"/>
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
    <meta name="format-detection" content="telephone=no"/>
    <meta name="format-detection" content="email=no"/>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        html,body,.container,.bgimg{
            width:100%;
            height:100%;
        }
        .container{
            position: relative;
        }
        .bgimg{
            position: absolute;
            top:0;
            left:0;
            -webkit-filter: blur(15px);
            -moz-filter: blur(15px);
        }
        #canvas{
            position: absolute;
            top:0;
            left:0;
        }
        .button{
            position: absolute;
            bottom:10%;
            border-radius: 5px;
            font-size:20px;
            padding:5px 10px;
            text-decoration: none;
            color:#fff;
        }
        .reset{
            left:20%;
            background-color: #07C4EC;
        }
        .show{
            right:20%;
            background-color: #EC9807;
        }
    </style>
</head>
<body>
    <div class="container">
        <img class="bgimg" src="images/p43.jpg" alt=""/>
        <canvas id="canvas">您的浏览器不支持canvas</canvas>
        <a class="button reset" href="javascript:;">reset</a>
        <a class="button show" href="javascript:;">show</a>
    </div>
    <script>
        ;
        (function () {
            window.addEventListener(‘load‘, winEventLoad, false);
            window.addEventListener(‘resize‘, canvasApp, false);
            function winEventLoad() {
                canvasApp();
            }
            function canvasApp(){
                if(!!!document.getElementById(‘canvas‘).getContext(‘2d‘)){return}
                var myCanvas = document.getElementById(‘canvas‘);
                var ctx = myCanvas.getContext(‘2d‘);
                var ww = document.documentElement.clientWidth;
                var wh = document.documentElement.clientHeight;
                var radius = 40;

                var t;
                var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame ||
                        window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;

                var cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame;

                myCanvas.width = ww;
                myCanvas.height = wh;

                var options = {
                    x:Math.random()*(canvas.width-radius*2)+radius,
                    y:Math.random()*(canvas.height-radius*2)+radius,
                    r:radius
                };

                var img = new Image();
                img.src = ‘images/p43.jpg‘;
                img.onload = function () {
                    initCanvas();
                };
                function setClippingRegion(options){
                    ctx.beginPath();
                    ctx.arc(options.x, options.y, options.r, 0, Math.PI * 2, false);
                    ctx.closePath();
                    ctx.clip();
                }
                function draw(options) {
                    ctx.clearRect(0, 0, canvas.width, canvas.height);

                    ctx.save();
                    setClippingRegion(options);
                    ctx.drawImage(img,0,0,canvas.width, canvas.height);
                    ctx.restore();
                }
                function initCanvas(){
                    draw(options);
                }
                function show(){
                    var diagonal = Math.max(canvas.width,canvas.height)*2;
                    (function showloop(){
                        options.r += 20;
                        t = requestAnimationFrame(showloop);
                        if(options.r>diagonal){
                            cancelAnimationFrame(t);
                        }
                        draw(options);
                    }());
                }
                function reset(){
                    cancelAnimationFrame(t);
                    options = {
                        x:Math.random()*(canvas.width-radius*2)+radius,
                        y:Math.random()*(canvas.height-radius*2)+radius,
                        r:radius
                    };
                    options.r = 0;
                    (function resetloop(){
                        options.r += 2;
                        var t = requestAnimationFrame(resetloop);
                        if(options.r >= radius){
                            cancelAnimationFrame(t);
                        }
                        draw(options);
                    })();
                }
                document.querySelector(‘.show‘).addEventListener(‘click‘,show,false);
                document.querySelector(‘.reset‘).addEventListener(‘click‘,reset,false);
            }
        }())
    </script>
</body>
</html>
时间: 2024-12-14 18:49:45

canvas模仿微信抢红包功能的相关文章

Android中微信抢红包插件原理解析和开发实现

一.前言 自从去年中微信添加抢红包的功能,微信的电商之旅算是正式开始正式火爆起来.但是作为Android开发者来说,我们在抢红包的同时意识到了很多问题,就是手动去抢红包的速度慢了,当然这些有很多原因导致了.或许是网络的原因,而且这个也是最大的原因.但是其他的不可忽略的因素也是要考虑到进去的,比如在手机充电锁屏的时候,我们并不知道有人已经开始发红包了,那么这时候也是让我们丧失了一大批红包的原因.那么关于网络的问题,我们开发者可能用相关技术无法解决(当然在Google和Facebook看来的话,他们

Android微信自动回复功能

Android微信自动回复功能 本文原创,转载请经过本人准许. 写在前面: 最近接到老大的一个需求,要求在手机端拦截微信的通知(Notification),从而获得联系人和内容.之后将联系人和内容发送到我们的硬件产品上,展示出来之后,再将我们想回复内容传给微信,并且发送给相应联系人. 老大还提示我需要用AccessibilityService去实现它,当然在此之前我并不知道AccessibilityService是什么鬼,不过没关系, just do IT ! AccessibilityServ

微信抢红包外挂

源码下载地址:https://github.com/lendylongli/qianghongbao apk下载地址  : 百度云下载 http://pan.baidu.com/s/1qWBZwUK 前言 Codeboy微信抢红包是我在2015年春节过年期间编写的一个开源的兴趣项目,只要是将整个核心抢红包的流程编写出来,至于再复杂的一些操作就没深入研究.当这个项目发布后,也是反应挺大的,很多网友也找到我了与交流,也有做淘宝的人给钱让我去增加一些功能,当然我是拒绝的. 作者声明 在这里,我声明一下

本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI(转载)

首页 资讯 精华 论坛 问答 博客 专栏 群组 更多 ▼ 您还未登录 ! 登录 注册 机遇&速度 博客 微博 相册 收藏 留言 关于我 android 仿微信聊天界面,以及语音录制功能 博客分类: android 录音 android 录音android 仿微信聊天界面android 仿微信录音UIandroidandroid 语音 本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI. 1先看效果图:     第一:chat.xml设计 Xml代码   <?xml version=&q

cacti实现微信告警功能

背景 近来受朋友所托,为他实现cacti的微信告警功能,但是在印象之中,cacti的thold插件貌似只有邮件告警功能吧?于是花了点时间在网络上搜索了相关信息,发现cacti的微信告警的信息着实很少,唯一看似可用的文章尝试了下却无法成功,在那篇文章的基础上,我修改了一下微信脚本的代码,测试成功了.故在此整理一下,供各位参看. 网上参考的原文章:http://www.itnpc.com/news/web/145117534132561.html 原理 由于cacti的thold插件本身并没有微信告

卓流应用网新功能推广——ECMALL商城增加微信商城功能

微信商城是基于当前很受欢迎的微信的这种传媒方式中的一种商业运用,微信的当前的火热是一个商机,基于微信的传播速度,及其简便等优点,为商家提供一个平台,在这个更简便的.方便的平台里进行更为现代的电子商务.同时在利用微信的这个平台也可以为商家提供更有效的宣传方式,更有利于商品的推广. 同时尽快实现商业价值是重要的阶段目标,通过微信平台实现在线销售便是一个方向.于是诞生了微信商城这个平台! 微网站一种跨移动平台的营销型网站.它源于WebApp和网站的融合创新,兼容iOS.android.WP等各大操作系

微信卡券功能相关策略调整 类目库存等进行修改

双11狂欢活动微信的战绩应该不是很好,很少看到相关数据报道,现在微信发布卡券功能相关策略调整公告,微信卡券功能正式向直供型电商开放申请了,这是在亡羊补牢吗?(11月11日,腾讯低调庆祝了16岁生日,并在晚间宣布上线有“免费通话”功能的“微信电话本”.用户已超8亿的微信,再次试图通过“过顶传球”颠覆运营商最根本的语音业务.) 以下是微信团队的系统公告 卡券功能相关策略调整 卡券功能在原有基础上做出多项优化.改进,以下是最核心的五点: 一.卡券功能正式向直供型电商开放申请 经过开放策略的调整和申请流

ListView模拟微信好友功能

ListView模拟微信好友功能 效果图: 分析: 1.创建listView 2.创建数据 3.创建适配器 将数据放到呈现数据的容器里面. 将这个容器(带数据)连接适配器. 4.ListView设置适配器 代码: 1 package fry; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import com.example.weChatFriends.R; 7 8 import android.app.Activity

ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(goole)生的,QRCode就不用说了吧,虽说技术无国界,但是国人还是有点.... 好,言归正传,java用ZXi