`
jimolangyaleng
  • 浏览: 5748 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

js刮奖处理

    博客分类:
  • JS
阅读更多

这个是在移动端上处理的一个刮奖小Demo

直接上完整代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="format-detection" content="telephone=no">
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
       	<style type="text/css">
		    #guaJiang .bjc {
			    color: black;
			    height: 70px;
			    width: 240px;
			    text-align: center;
			    line-height: 70px;
			    font-size: 20px;
			    position: absolute;
			    top: 300px;
			    left: 60px;
			    background-image: url(img/4-01.png);
			    background-repeat: no-repeat;
			    background-size: 18px 18px;
			    background-position: 80% 53%
			}
			#guaJiang .guaCanvas {
			    z-index: 3;
			    position: absolute;
			    top: 300px;
			    left: 60px
			}
		</style>
       
        <title>网红</title>
    </head>
    <body >
	    <div id='guaJiang'>
			<div class='bjc'>萌赚送你1.5</div>
			<canvas id="myCanvas" class='guaCanvas' width="240" height="70"></canvas>
		</div>
    </body>
</html>

 然后是JS代码

var clientWidth = document.documentElement.clientWidth;
            	if(clientWidth *1 >0){
            		document.querySelector("#guaJiang .bjc").style.left = (clientWidth - 240)/2 + "px";
            		document.querySelector("#guaJiang .guaCanvas").style.left = (clientWidth - 240)/2 + "px";
            	}
            	
            	
            	 // 得到画笔
                var cvs = document.getElementById("myCanvas"),
                    ctx = cvs.getContext("2d"),
                    touchRadius = 10;    // 默认手指触摸半径,可以自定义设置
                
                // 默认填充灰色来遮住文字
                ctx.fillStyle = "#ccc";
                ctx.fillRect(0, 0, 240, 70);    // fillRect,用矩形填充
                ctx.font = '15px arial';
                ctx.fillStyle = 'white';
                ctx.fillText('您获得一次刮奖机会', 56,40);
                
                // 画园的方法
                // @param { integer } 圆心的x坐标
                // @param { integer } 圆心的y坐标
                // @param { integer } 圆心半径
                // @param { string } 填充的颜色(本例中会通过其余代码设置为‘透明’,所以这个设置可以忽略)
                var fillCircle = function (x, y, radius, fillColor) {
                    this.fillStyle = fillColor || "#eee";
                    this.beginPath();
                    this.moveTo(x-90, y-300);
                    this.arc(x-90, y-300, radius, 0, Math.PI * 2, false);    // 标准画圆
                    this.fill();
                };
                
                // 得到涂抹的百分比
                var getTransparentPercent = function (ctx, width, height) {
                    var imgData = ctx.getImageData(0, 0, width, height),    // 得到canvas的像素信息
                        pixles = imgData.data,
                        transPixs = [];
                    for (var i = 0, j = pixles.length; i < j; i += 4) {    // 因为存储的结构为[R, G, B, A],所以要每次跳4个长度
                        var a = pixles[i + 3];    // 拿到存储alpha通道的值
                        if (a === 0) {    // alpha通道为0,就代表透明
                            transPixs.push(i);
                        }
                    }
                    return (transPixs.length / (pixles.length / 4) * 100).toFixed(2);
                }
                
                // 需要判断是PC还是手机
                var device = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent.toLowerCase()),
                    clickEvtName = device ? 'touchstart' : 'mousedown',
                    moveEvtName = device ? 'touchmove' : 'mousemove';
                
                // 判断是不是开始触摸等
                if (!device) {
                    var isMouseDown = false;
                    document.addEventListener('mouseup', function (e) {
                        isMouseDown = false;
                    }, false);
                } else {
                    document.addEventListener("touchmove", function (e) {
                        if (isMouseDown) {
                            e.preventDefault();
                        }
                    }, false);
                    document.addEventListener('touchend', function (e) {
                        isMouseDown = false;
                    }, false);
                }
                
                // 开始移动
                cvs.addEventListener(clickEvtName, function (e) {
                    isMouseDown = true;
                    var x = (device ? e.touches[0].clientX : e.clientX);
                    var y = (device ? e.touches[0].clientY : e.clientY);
                    ctx.globalCompositeOperation = 'destination-out';    // 关键部分,描述当在canvas上再次绘画时候的情况,这个设置便是之前所说的透明
                    fillCircle.call(ctx, x, y, touchRadius);
                    console.log("当前涂抹比例为:" + getTransparentPercent(ctx, 240, 70));
                }, false);
                
                // 移动中
                cvs.addEventListener(moveEvtName, function (e) {
                    if (!device && !isMouseDown) {
                        return false;
                    }
                    var x = (device ? e.touches[0].clientX : e.clientX);
                    var y = (device ? e.touches[0].clientY : e.clientY);
                    ctx.globalCompositeOperation = 'destination-out';
                    fillCircle.call(ctx, x, y, touchRadius);
                    console.log("当前涂抹比例为:" + getTransparentPercent(ctx, 240, 70));
                }, false);

 运行之后的效果图

 

 

 

  • 大小: 820 Bytes
  • 大小: 10.3 KB
0
0
分享到:
评论

相关推荐

    jQuery手机端刮奖效果代码.zip

    该代码的核心是`jquery.eraser.js`插件,这是一个专门用于实现刮奖效果的jQuery扩展。它利用了JavaScript的绘图功能,通过在画布元素上模拟刮擦行为,来展示隐藏的内容。以下将详细介绍这个代码实现的关键知识点: ...

    flash+php刮奖

    综合来看,"Flash+PHP刮奖"实例通过Flash实现了刮奖的视觉效果和用户交互,JavaScript作为中间桥梁,使得前端与后端能够顺畅沟通,而PHP则在服务器端处理业务逻辑和数据管理。这种技术组合提供了丰富的用户体验,...

    刮奖效果-HTML-代码

    在这个刮奖效果中,JavaScript发挥了核心作用,它负责处理用户的刮奖行为。通过监听用户在`&lt;canvas&gt;`上的触摸或鼠标事件,实现刮开覆盖层的功能。JavaScript还可能包含一些逻辑判断,比如判断是否完全刮开、随机生成...

    手机端刮奖效果jquery插件(完整)

    通过使用jQuery,开发者可以更高效地编写跨浏览器的JavaScript代码,使得刮奖功能在不同设备上表现一致。 这款插件的核心在于利用jQuery的动画功能模拟刮奖过程。刮奖效果通常包括两个主要部分:一是覆盖层(通常是...

    手机端刮奖效果jquery.eraser.js插件.zip

    jQuery是一个广泛使用的JavaScript库,简化了DOM操作、事件处理和动画效果。这个插件扩展了jQuery的功能,提供了刮奖效果的具体实现。它可能会监听用户的触摸事件,当用户在特定区域滑动时,根据滑动轨迹擦除特定的...

    刮奖,刮兑换码,刮开图层,jQuery橡皮擦插件jQuery.eraser演示

    4. **处理用户交互**:当用户在刮奖区域上移动鼠标时,插件会自动处理鼠标移动事件,擦除相应区域。用户停止移动时,如果整个区域都被擦除,可以触发特定的回调函数,如显示隐藏的兑换码或奖品信息。 5. **图层处理...

    html5canvas实现刮奖效果

    在处理鼠标移动事件时,我们需要考虑速度和力度,这可能涉及到平滑轨迹的计算和动画效果的实现。 以下是一个简化的刮奖效果实现步骤: 1. 创建Canvas元素,并获取2D渲染上下文。 2. 绘制背景图像或颜色。 3. 在...

    简单的Canvas刮奖带动画效果的实例

    最后,为了让刮奖效果更逼真,我们还可以添加一些额外的细节,比如增加随机抖动效果,或者根据刮开区域的图像检测是否中奖。这些都可以通过Canvas的高级特性如图像处理函数来实现。 通过这个实例,我们不仅学习了...

    HTML5手机刮刮乐刮奖卡代码.zip

    这个代码实现是基于jQuery 1.10.2.min.js,一个流行的JavaScript库,它简化了DOM操作、事件处理和动画等功能。以下是关于这个HTML5刮刮乐代码的详细知识点: 1. **HTML5**: HTML5是超文本标记语言的最新版本,增加...

    HTML5手机端刮奖代码.zip

    同时,JavaScript还可以处理奖项的随机生成、验证用户是否刮出奖项以及控制刮奖的次数限制。 4. jQuery:jQuery是一个流行的JavaScript库,简化了DOM操作、事件处理和动画制作。在刮奖代码中,jQuery可以用于快速...

    html5刮奖效果

    总的来说,HTML5刮奖效果是利用现代Web技术实现的一种创新互动功能,它结合了HTML5的`&lt;canvas&gt;`绘图能力、CSS3的视觉效果和JavaScript的动态交互,为用户提供了丰富的网页体验。通过深入理解并实践这样的项目,...

    基于HTML5 Canvas的刮奖(刮刮卡)小控件( card based on HTML5 Canvas).zip

    1. **事件监听**:通过JavaScript监听用户的鼠标交互,例如`mousedown`、`mousemove`和`mouseup`事件,来捕捉用户的刮奖动作。当用户按下鼠标并移动时,刮奖过程开始;松开鼠标时,刮奖结束。 2. **Canvas绘图**:...

    支付宝刮奖案例

    其次,后端服务是刮奖活动的核心部分,它处理用户请求,验证刮奖结果并记录用户行为。这部分可能涉及到的技术有Java、Python、Node.js等后端开发语言,以及RESTful API设计原则。后端服务器通过接收前端发送的请求,...

    刮刮卡 刮奖

    3. **编写交互逻辑**:在JavaScript文件中编写刮奖功能的逻辑,监听用户的触摸事件,模拟刮奖动作,同时更新界面展示。 4. **集成后端接口**:通过调用API与服务器进行通信,获取刮奖结果,提交用户信息等。 5. **...

    HTML5转盘活动、刮奖活动

    HTML5是一种先进的网页标记语言,它为Web开发者提供了丰富的功能和强大的工具,使得构建交互性强、体验优秀的...而"转盘AND刮奖"这个压缩包可能包含了实现这些功能的HTML、CSS和JavaScript文件,供开发者学习和参考。

    canvas实现在线刮奖效果.zip

    jQuery是一个广泛使用的JavaScript库,简化了DOM操作、事件处理、动画制作和Ajax交互。在这个项目中,jQuery可能用于绑定鼠标事件,如`mousedown`、`mousemove`和`mouseup`,以响应用户的刮奖动作。此外,它还可能...

Global site tag (gtag.js) - Google Analytics