canvas探照灯效果的示例代码


Posted in HTML / CSS onNovember 30, 2018

canvas中的clip()方法用于从原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内(不能访问画布上的其他区域)

也可以在使用clip()方法前通过使用save()方法对当前画布区域进行保存,并在以后的任意时间通过restore()方法对其进行恢复

canvas探照灯效果的示例代码

接下来使用clip()方法实现一个探照灯效果

</iframe>
<button id="btn">变换</button>
<button id="con">暂停</button>
<canvas id="canvas" width="400" height="290" style="border:1px solid black">当前浏览器不支持canvas,请更换浏览器后再试</canvas>
<script> btn.onclick = function(){history.go();}
con.onclick = function(){ if(this.innerHTML == '暂停'){ this.innerHTML = '恢复';
        clearInterval(oTimer);
    }else{ this.innerHTML = '暂停'; 
        oTimer = setInterval(fnInterval,50);
    }
} var canvas = document.getElementById('canvas'); //存储画布宽高
var H=290,W=400; //存储探照灯
var ball = {}; //存储照片
var IMG; //存储照片地址
var URL = 'http://sandbox.runjs.cn/uploads/rs/26/ddzmgynp/chunfen.jpg'; function initial(){ if(canvas.getContext){ var cxt = canvas.getContext('2d'); var tempR = Math.floor(Math.random()*30+20); var tempX = Math.floor(Math.random()*(W-tempR) + tempR); var tempY = Math.floor(Math.random()*(H-tempR) + tempR)        
        ball = {
            x:tempX,
            y:tempY,
            r:tempR,
            stepX:Math.floor(Math.random() * 21 -10),
            stepY:Math.floor(Math.random() * 21 -10)
        };
        IMG = document.createElement('img');
        IMG.src=URL;
        IMG.onload = function(){
            cxt.drawImage(IMG,0,0);
    }//欢迎加入全栈开发交流圈一起学习交流:582735936
  
]//面向1-3年前端人员

}   //帮助突破技术瓶颈,提升思维能力
        }   
    }    
} function update(){
    ball.x += ball.stepX;
    ball.y += ball.stepY; 
    bumpTest(ball);
} function bumpTest(ele){ //左侧
    if(ele.x <= ele.r){
        ele.x = ele.r;
        ele.stepX = -ele.stepX;
    } //右侧
    if(ele.x >= W - ele.r){
        ele.x = W - ele.r;
        ele.stepX = -ele.stepX;
    } //上侧
    if(ele.y <= ele.r){
        ele.y = ele.r;
        ele.stepY = -ele.stepY;
    } //下侧
    if(ele.y >= H - ele.r){
        ele.y = H - ele.r;
        ele.stepY = -ele.stepY;
    }
} function render(){ //重置画布高度,达到清空画布的效果
 canvas.height = H; if(canvas.getContext){ var cxt = canvas.getContext('2d');
        cxt.save(); //将画布背景涂黑
 cxt.beginPath();
        cxt.fillStyle = '#000';
        cxt.fillRect(0,0,W,H); //渲染探照灯
 cxt.beginPath();
        cxt.arc(ball.x,ball.y,ball.r,0,2*Math.PI);
        cxt.fillStyle = '#000';
        cxt.fill(); 
        cxt.clip(); //由于使用了clip(),画布背景图片会出现在clip()区域内
 cxt.drawImage(IMG,0,0);
        cxt.restore();
    
}//欢迎加入全栈开发交流圈一起学习交流:582735936
  
]//面向1-3年前端人员

}   //帮助突破技术瓶颈,提升思维能力
    }

}
initial();
clearInterval(oTimer); function fnInterval(){ //更新运动状态
 update(); //渲染
 render();    
} var oTimer = setInterval(fnInterval,50); 
</script>

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

HTML / CSS 相关文章推荐
详解Css3新特性应用之过渡与动画
Jan 10 HTML / CSS
html5+css3气泡组件的实现
Nov 21 HTML / CSS
使用css3实现的tab选项卡代码分享
Dec 09 HTML / CSS
深入浅析css3 中display box使用方法
Nov 25 HTML / CSS
纯css实现照片墙3D效果的示例代码
Nov 13 HTML / CSS
如何使用css3实现一个类在线直播的队列动画的示例代码
Jun 17 HTML / CSS
html5的localstorage详解
May 09 HTML / CSS
html5指南-7.geolocation结合google maps开发一个小的应用
Jan 07 HTML / CSS
html5+css3实现一款注册表单实例
Apr 17 HTML / CSS
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
Dec 15 HTML / CSS
详解html5页面 rem 布局适配方法
Jan 12 HTML / CSS
HTML5中外部浏览器唤起微信分享
Jan 02 HTML / CSS
localStorage的过期时间设置的方法详解
Nov 26 #HTML / CSS
canvas拼图功能实现代码示例
Nov 21 #HTML / CSS
详解Canvas 跨域脱坑实践
Nov 07 #HTML / CSS
浅谈移动端网页图片预加载方案
Nov 05 #HTML / CSS
Canvas中设置width与height的问题浅析
Nov 01 #HTML / CSS
html5 postMessage前端跨域并前端监听的方法示例
Nov 01 #HTML / CSS
HTML5之消息通知的使用(Web Notification)
Oct 30 #HTML / CSS
You might like
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
XHProf报告字段含义的解析
2016/05/17 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
2014/10/17 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
js中unicode转码方法详解
2015/10/09 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
jQuery实现定位滚动条位置
2016/08/05 Javascript
jQuery子元素过滤选择器用法示例
2016/09/09 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
easyUI下拉列表点击事件使用方法
2017/05/18 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
Vue 实例中使用$refs的注意事项
2021/01/29 Vue.js
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
教你学会使用Python正则表达式
2017/09/07 Python
Python中按值来获取指定的键
2019/03/04 Python
Python实现堡垒机模式下远程命令执行操作示例
2019/05/09 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
计算机专业毕业生自荐信范文
2014/03/06 职场文书
勾股定理课后反思
2014/04/26 职场文书
社区反邪教工作方案
2014/06/16 职场文书
2014年关工委工作总结
2014/11/17 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
三八节祝酒词
2015/08/11 职场文书
初一语文教学反思
2016/03/03 职场文书
开网店计划分析
2019/07/30 职场文书