最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

canvas實現(xiàn)探照燈效果

 更新時間:2017年02月07日 14:59:41   作者:小火柴的藍色理想  
本文介紹了使用clip()方法實現(xiàn)一個探照燈效果的實例,具有很好的參考價值,下面跟著小編一起來看下吧

canvas中的clip()方法用于從原始畫布中剪切任意形狀和尺寸。一旦剪切了某個區(qū)域,則所有之后的繪圖都會被限制在被剪切的區(qū)域內(nèi)(不能訪問畫布上的其他區(qū)域)

也可以在使用clip()方法前通過使用save()方法對當(dāng)前畫布區(qū)域進行保存,并在以后的任意時間通過restore()方法對其進行恢復(fù)

接下來使用clip()方法實現(xiàn)一個探照燈效果

<button id="btn">變換</button>
<button id="con">暫停</button>
<canvas id="canvas" width="400" height="290" style="border:1px solid black">當(dāng)前瀏覽器不支持canvas,請更換瀏覽器后再試</canvas>
<script>
btn.onclick = function(){history.go();}
con.onclick = function(){
 if(this.innerHTML == '暫停'){
  this.innerHTML = '恢復(fù)';
  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);
  } 
 } 
}
function update(){
 ball.x += ball.stepX;
 ball.y += ball.stepY; 
 bumpTest(ball);
}
function bumpTest(ele){
 //左側(cè)
 if(ele.x <= ele.r){
  ele.x = ele.r;
  ele.stepX = -ele.stepX;
 }
 //右側(cè)
 if(ele.x >= W - ele.r){
  ele.x = W - ele.r;
  ele.stepX = -ele.stepX;
 }
 //上側(cè)
 if(ele.y <= ele.r){
  ele.y = ele.r;
  ele.stepY = -ele.stepY;
 }
 //下側(cè)
 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(),畫布背景圖片會出現(xiàn)在clip()區(qū)域內(nèi)
  cxt.drawImage(IMG,0,0);
  cxt.restore();
 }
}
initial();
clearInterval(oTimer);
function fnInterval(){
 //更新運動狀態(tài)
 update();
 //渲染
 render(); 
}
var oTimer = setInterval(fnInterval,50);
</script>

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • 使用javascript實現(xiàn)監(jiān)控視頻播放并打印日志

    使用javascript實現(xiàn)監(jiān)控視頻播放并打印日志

    這篇文章主要介紹了使用javascript實現(xiàn)監(jiān)控視頻播放并打印日志的方法及示例代碼分享,非常不錯,需要的朋友可以參考下
    2015-01-01
  • 解決Js先觸發(fā)失去焦點事件再執(zhí)行點擊事件的問題

    解決Js先觸發(fā)失去焦點事件再執(zhí)行點擊事件的問題

    今天小編就為大家分享一篇解決Js先觸發(fā)失去焦點事件再執(zhí)行點擊事件的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • NestJS使用class-validator進行數(shù)據(jù)驗證

    NestJS使用class-validator進行數(shù)據(jù)驗證

    本文將通過詳細的步驟和實戰(zhàn)技巧,帶大家掌握如何在NestJS中使用class-validator進行數(shù)據(jù)驗證,以及11條實戰(zhàn)中常用的驗證技巧,感興趣的可以了解下
    2024-11-11
  • js判斷在哪個瀏覽器打開項目的方法

    js判斷在哪個瀏覽器打開項目的方法

    這篇文章主要介紹了js判斷在哪個瀏覽器打開項目的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • JS分頁控件 可用于無刷新分頁

    JS分頁控件 可用于無刷新分頁

    今天無意看到了這個分頁控件,不過使用方法不是很清楚沒有研究,。大家可以自行研究,里面的函數(shù)寫法倒是不錯,需要內(nèi)容的結(jié)合
    2013-07-07
  • js給selected添加options的方法

    js給selected添加options的方法

    這篇文章主要介紹了js給selected添加options的方法,涉及javascript動態(tài)添加頁面下拉列表selected的技巧,需要的朋友可以參考下
    2015-05-05
  • JavaScript使用多線程實現(xiàn)一個大文件上傳

    JavaScript使用多線程實現(xiàn)一個大文件上傳

    這篇文章主要為大家詳細介紹了JavaScript使用多線程實現(xiàn)一個大文件上傳的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2024-11-11
  • JavaScript對象參數(shù)的引用傳遞

    JavaScript對象參數(shù)的引用傳遞

    這篇文章主要為大家介紹了JavaScript對象參數(shù)的引用傳遞的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-01-01
  • JavaScript 高效運行代碼分析

    JavaScript 高效運行代碼分析

    傳統(tǒng)上,網(wǎng)頁中不會有大量的腳本,至少腳本很少會影響網(wǎng)頁的性能。
    2010-03-03
  • bootstrapValidator 重新啟用提交按鈕的方法

    bootstrapValidator 重新啟用提交按鈕的方法

    bootstrapValidator 使用中,由于字段檢查等原因,致使提交按鈕失效。如何重新啟用提交按鈕呢?下面小編給大家介紹下bootstrapValidator 重新啟用提交按鈕的方法,需要的朋友可以參考下
    2017-02-02

最新評論

贵州省| 灯塔市| 长沙县| 淄博市| 台前县| 嘉禾县| 南开区| 奉节县| 湾仔区| 博爱县| 沂南县| 大同县| 邮箱| 彭阳县| 铁力市| 武乡县| 恭城| 沿河| 荥经县| 富锦市| 石阡县| 岢岚县| 汕头市| 常州市| 沙坪坝区| 沾化县| 黄山市| 阳春市| 高清| 黑龙江省| 北辰区| 洪洞县| 正定县| 霍城县| 阿克陶县| 和田县| 色达县| 文昌市| 于都县| 南丹县| 伊通|