婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > Canvas實(shí)現(xiàn)放大鏡效果完整案例分析(附代碼)

Canvas實(shí)現(xiàn)放大鏡效果完整案例分析(附代碼)

熱門標(biāo)簽:機(jī)器人外呼系統(tǒng)存在哪些能力 南昌仁和怎么申請(qǐng)開通400電話 電話機(jī)器人電銷系統(tǒng)掙話費(fèi) 高德地圖標(biāo)注地點(diǎn)糾錯(cuò) 拓展地圖標(biāo)注 如何獲取地圖標(biāo)注客戶 只辦理400電話 平?jīng)龅貓D標(biāo)注位置怎么弄 電話機(jī)器人黑斑馬免費(fèi)

本文主要記錄 canvas 在圖像、文字處理、離屏技術(shù)和放大鏡特效的實(shí)現(xiàn)過程中使用到的API。先看下效果吧:

一張模糊的圖片:

鼠標(biāo)點(diǎn)擊任意位置,產(chǎn)生放大效果:

哇塞~ 一個(gè)帥哥,哈哈哈哈~

1、放大鏡原理

實(shí)現(xiàn)效果:如上圖,點(diǎn)擊或點(diǎn)擊滑動(dòng)鼠標(biāo)顯示一個(gè)區(qū)域,區(qū)域中顯示對(duì)應(yīng)點(diǎn)擊部分范圍的放大清晰圖片。那么問題就可以肢解為3部分:

1、如何在canvas(模糊圖)上再畫出另外一個(gè)canvas(清晰放大圖);

2、如何將canvas中顯示的(清晰放大圖)剪切出圓形區(qū)域。

3、如何在鼠標(biāo)點(diǎn)擊滑動(dòng)的時(shí)候顯示該區(qū)域;

 

2、顯示模糊照片

其實(shí)一般的交互不是模糊照片,這里我只是為了夸張下效果,用了張模糊的原圖,哈哈哈,canvas本身是可以對(duì)清晰的圖片做濾鏡處理,涉及到很多圖形學(xué)的算法,然后我不會(huì),默默的打開了PS手動(dòng)高斯模糊了一張照片...嗯,沒毛病!

首先定義一個(gè) canvas 元素

  <canvas id="canvas"></canvas>
//定義canvas畫布
var canvas1 = document.getElementById('canvas1');
    ctx1 = canvas.getContext('2d');

//模糊圖片加載
var image1 = new Image();
image1.src = "./模糊.png";

//圖片加載成功后繪制圖片
image1.onload = function() {
  //drawImage 在畫布上繪制模糊圖片
  ctx1.drawImage(image1, 0, 0, canvas1.width, canvas1.height);
};     

ctx1.drawImage(圖片,x位置,y位置,圖片顯示寬度,圖片顯示高度)

3、加載清晰圖片

我們?cè)偌右粋€(gè)canvas(放大鏡看到的圖片),初始隱藏:

<canvas id="canvas2" style="display:none"></canvas>
var canvas2 = document.getElementById('canvas2'),
    ctx2 = canvas2.getContext('2d'),
    scale = 2; // 放大倍數(shù)

// canvas2的圖片大小是模糊圖片的2倍
canvas2.width = canvas.width * scale;
canvas2.height = canvas.height * scale;

// 在canvas2中加載圖片
var image2 = new Image();
image2.src = "name2.png";

image2.onload = function() {
  ctx2.drawImage(image2, 0, 0, canvas2.width, canvas2.height);
};

4、顯示放大鏡

4.1 繪制放大鏡

鼠標(biāo)所處的位置點(diǎn)(x,y)是區(qū)域的中心,計(jì)算出清晰圖所在的位置點(diǎn),截取圓形

// 保存當(dāng)前狀態(tài)
ctx1.save();
// 邊框
ctx1.strokeStyle = "#9eddf1";
ctx1.lineWidth = 3;
// 開始繪制
ctx1.beginPath();
// ⚪
ctx1.arc(x, y, mr, 0, Math.PI * 2);
ctx1.stroke();
// 表示剪切
ctx1.clip();

// 畫圖
ctx1.drawImage(that.canvas2, sx, sy, 2 * mr, 2 * mr, dx, dy, 2 * mr, 2 * mr);

// 釋放當(dāng)前狀態(tài)
ctx1.restore();

繪制狀態(tài)的最佳搭檔save()和restore():用于對(duì)當(dāng)前狀態(tài)的保存及釋放不影響其他操作;可用于重復(fù)的繪制圖形的變化過程;

clip():表示剪切區(qū)域

4.2 離屏技術(shù)

所謂的離屏技術(shù)就是在一個(gè)canvas上繪制另外一個(gè)canvas,前面使用的繪制圖片的API是 drawImage() ,它分別可以支持,3個(gè)、5個(gè)和9個(gè)參數(shù); 其中第一個(gè)參數(shù)既可以是圖片,也可以是canvas對(duì)象!那么我們就可以使用這個(gè)方法,在圓上繪制出清晰圖了~

// 圓的半徑是mr
var mr = 100;

// 對(duì)應(yīng)模糊圖的左上角起點(diǎn)
var dx = x - mr,
    dy = y - mr;

// 找出清晰圖截圖的左上角起點(diǎn)
var sx = x * scale - mr,
    sy = y * scale- mr;

   ...
    ctx.clip();
    // 在對(duì)應(yīng)的位置上重新繪制圖片
    //drawImage(img,sx,sy,swidth,sheight,x,y,width,height) 9個(gè)參數(shù)時(shí)
    //img: 圖片/canvas
    //sx: 圖片的X起點(diǎn)
    //sy: 圖片的Y起點(diǎn)
    //swidth:要繪制的圖片選取的寬度
    //sheight:要繪制的圖片選取的高度
    //x,y:圖片在canvas上顯示的位置
    //width,height:在Canvas上要顯示的大小
    ctx1.drawImage(canvas2, sx, sy, 2 * mr, 2 * mr, dx, dy, 2 * mr, 2 * mr);    
    ...

5、鼠標(biāo)交互事件

效果:鼠標(biāo)點(diǎn)擊并滑動(dòng)鼠標(biāo)產(chǎn)生反應(yīng),松開鼠標(biāo)或者移除畫布則失效。

//定義一個(gè)判斷鼠標(biāo)是否是點(diǎn)擊滑動(dòng)的標(biāo)識(shí)符
var flag;

//鼠標(biāo)點(diǎn)入事件
canvas.onmousedown = function(e) {
  flag = true;
  //顯示放大鏡
}
// 鼠標(biāo)移動(dòng)事件
canvas.onmousemove = function(e) {
  if (flag) {
    //顯示放大鏡
  }
}
//鼠標(biāo)松開事件
canvas.onmouseup = function(e) {
  flag = false;
  // 隱藏放大鏡
}
//鼠標(biāo)離開事件
canvas.onmouseout = function(e) {
  flag = false;
  // 隱藏放大鏡
}

完整代碼:

var scale = 3;
var mr = 150;
var photo = {
  //初始化
  init: function() {
    var that = this;

    that.canvas = document.getElementById('canvas');
    that.ctx = that.canvas.getContext('2d');

    that.canvas2 = document.getElementById('canvas2');
    that.ctx2 = that.canvas2.getContext('2d');

    that.canvas.width = 800;
    that.canvas.height = 500;

    that.canvas2.width = that.canvas.width * scale;
    that.canvas2.height = that.canvas.height * scale;
    that.image1 = new Image();
    that.image1.src = "./name3.jpg";

    that.image2 = new Image();
    that.image2.src = "./name4.jpg";

    that.image1.onload = function() {
      that.ctx.drawImage(that.image1, 0, 0, that.canvas.width, that.canvas.height);
    };

    that.image2.onload = function() {
      that.ctx2.drawImage(that.image2, 0, 0, that.canvas2.width, that.canvas2.height);
      that.moveEvt();
    };
  },

  bigerImage: function(x, y) {
    var that = this;
    var imageX = x * scale,
      imageY = y * scale,
      sx = imageX - mr,
      sy = imageY - mr;

    var dx = x - mr,
      dy = y - mr;

    that.ctx.save();

    that.ctx.strokeStyle = "#9eddf1";
    that.ctx.lineWidth = 3;

    that.ctx.beginPath();
    that.ctx.arc(x, y, mr, 0, Math.PI * 2);


    that.ctx.shadowColor = "#6ed25b";
    that.ctx.shadowBlur = 10;

    that.ctx.stroke();
    that.ctx.clip();

    that.ctx.drawImage(that.canvas2, sx, sy, 2 * mr, 2 * mr, dx, dy, 2 * mr, 2 * mr);

    that.ctx.restore();
  },

  //移動(dòng)
  moveEvt: function() {
    var that = this;
    that.canvas.onmousedown = function(e) {
    	that.flag = true;
      that.showImage(e);
    }

    that.canvas.onmousemove = function(e) {
      if (that.flag) {
        that.showImage(e)
      }
    }

    that.canvas.onmouseup = function(e) {
      that.hideImage(e)
    }

    that.canvas.onmouseout = function(e) {
      that.hideImage(e)
    }
  },

  showImage: function(e) {
    e.preventDefault()
    var x = e.offsetX,
      y = e.offsetY,
      that = this;
    that.ctx.clearRect(0, 0, that.canvas.width, that.canvas.height);
    that.ctx.drawImage(that.image1, 0, 0, that.canvas.width, that.canvas.height);
    that.bigerImage(x, y);
  },

  hideImage: function(e) {
    e.preventDefault()
    var that = this;
    
    that.flag = false;
    that.ctx.clearRect(0, 0, that.canvas.width, that.canvas.height);
    that.ctx.drawImage(that.image1, 0, 0, that.canvas.width, that.canvas.height);
  }
}

window.onload = function() {
  photo.init();
}

到此這篇關(guān)于Canvas實(shí)現(xiàn)放大鏡效果完整案例分析(附代碼)的文章就介紹到這了,更多相關(guān)Canvas 放大鏡內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

標(biāo)簽:池州 永州 棗莊 漯河 新疆 青島 遼源 西藏

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Canvas實(shí)現(xiàn)放大鏡效果完整案例分析(附代碼)》,本文關(guān)鍵詞  Canvas,實(shí)現(xiàn),放大鏡,效果,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Canvas實(shí)現(xiàn)放大鏡效果完整案例分析(附代碼)》相關(guān)的同類信息!
  • 本頁收集關(guān)于Canvas實(shí)現(xiàn)放大鏡效果完整案例分析(附代碼)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩免费看的电影| 夫妻av一区二区| 亚洲欧美日韩人成在线播放| 成人动漫视频在线| 日本 国产 欧美色综合| 精品日韩一区二区三区| 亚洲一区视频在线| 欧美二区三区的天堂| 国产一区不卡在线| 精品99久久久久久| 国产在线不卡视频| 国产精品三级电影| 国产精品毛片a∨一区二区三区| 国产成人精品免费视频网站| 欧美日韩在线播放三区四区| 日韩精品一区二区三区蜜臀 | 精品久久国产老人久久综合| 久久伊99综合婷婷久久伊| 精品视频1区2区| 国产成人精品三级麻豆| 日本一区二区三区久久久久久久久不 | 天天色天天操综合| 久久综合资源网| 欧美不卡123| 亚洲不卡在线观看| 国产一区二区在线看| 激情六月婷婷久久| 亚洲综合清纯丝袜自拍| 亚洲欧美在线视频观看| 中文字幕日韩一区| 亚洲精选免费视频| 一区二区高清免费观看影视大全 | 顶级嫩模精品视频在线看| 国产精品中文有码| 成人一区二区三区中文字幕| 国产白丝精品91爽爽久久 | 欧美videofree性高清杂交| 2021中文字幕一区亚洲| 亚洲电影视频在线| 日韩欧美一区二区在线视频| 欧洲另类一二三四区| 色94色欧美sute亚洲线路一ni| 99久久精品国产观看| 欧美性猛交一区二区三区精品 | 亚洲精品中文字幕乱码三区| 国产乱码精品一区二区三区五月婷 | 国产精品看片你懂得| 亚洲第一搞黄网站| 91捆绑美女网站| 精品久久国产字幕高潮| 亚洲精品国产一区二区精华液| 国内精品嫩模私拍在线| 宅男噜噜噜66一区二区66| 亚洲午夜影视影院在线观看| 成人av网站大全| 欧美xxxxx牲另类人与| 麻豆精品视频在线观看视频| 9191精品国产综合久久久久久| 亚洲精品免费在线播放| 日本道色综合久久| 亚洲日本在线看| www.在线欧美| 国产精品国产三级国产aⅴ无密码| 国产成人在线电影| 国产欧美一区二区精品久导航 | 久久亚洲精品小早川怜子| 香港成人在线视频| 在线电影一区二区三区| 九九久久精品视频| 91精品国产福利| 精东粉嫩av免费一区二区三区| 精品美女在线观看| 国内精品国产成人国产三级粉色| 欧美日韩免费观看一区二区三区| 亚洲免费观看在线视频| 色播五月激情综合网| 夜夜嗨av一区二区三区四季av| 欧美日韩激情一区二区三区| 美国十次了思思久久精品导航| 欧美精品一区二区三| 激情av综合网| 亚洲欧美一区二区三区国产精品| 欧美伊人久久大香线蕉综合69| 亚洲综合免费观看高清完整版| 欧美三级在线看| 精品亚洲国产成人av制服丝袜| 亚洲午夜一区二区| 26uuu精品一区二区三区四区在线| 久久99精品国产91久久来源| 国产日韩av一区| 色婷婷一区二区三区四区| 蜜桃久久久久久久| 中文字幕中文字幕中文字幕亚洲无线| 不卡视频在线观看| 一级特黄大欧美久久久| 久久久亚洲欧洲日产国码αv| av一二三不卡影片| 捆绑变态av一区二区三区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 亚洲国产日产av| 日韩丝袜美女视频| 风间由美性色一区二区三区| 国产精品色眯眯| 欧美日韩成人在线| 国内精品久久久久影院薰衣草| 中文字幕电影一区| 欧美群妇大交群的观看方式| 国产成人一区在线| 亚洲精品欧美激情| 日韩欧美国产1| 色综合婷婷久久| 国产精品亚洲一区二区三区在线| 亚洲成av人片一区二区三区 | 国产欧美日韩综合精品一区二区| 在线观看91精品国产麻豆| 97国产一区二区| 国产成人午夜高潮毛片| 美国精品在线观看| 香蕉久久夜色精品国产使用方法 | www.在线成人| 久久av中文字幕片| 免费在线观看不卡| 日韩高清不卡在线| 亚洲第一av色| 一区二区理论电影在线观看| 成人欧美一区二区三区在线播放| 国产亚洲一区二区三区四区| 欧美一区二区三区性视频| 精品视频一区二区不卡| 99久久777色| 国产999精品久久久久久绿帽| 欧美bbbbb| 免费人成精品欧美精品| 美美哒免费高清在线观看视频一区二区 | 欧美天堂亚洲电影院在线播放| 成人久久久精品乱码一区二区三区| 久久机这里只有精品| 看国产成人h片视频| 丝袜美腿亚洲综合| 亚洲一级在线观看| 亚洲国产综合色| 亚洲国产成人高清精品| 亚洲免费av网站| 国产精品女同一区二区三区| 国产精品毛片a∨一区二区三区| 中文字幕精品—区二区四季| 国产精品视频yy9299一区| 国产女人水真多18毛片18精品视频| 精品国产a毛片| 国产精品欧美综合在线| 一区二区欧美视频| 日本sm残虐另类| 国产做a爰片久久毛片| 国产成人丝袜美腿| 99re热这里只有精品视频| 91久久线看在观草草青青| 精品污污网站免费看| 欧美一区三区四区| 久久精品视频在线看| 中文久久乱码一区二区| 亚洲免费成人av| 日韩电影免费在线| 国产在线一区观看| 91精品国产综合久久久久久| 日韩欧美在线网站| 久久久久久久久久电影| 中文字幕精品一区二区三区精品| 精品国产三级电影在线观看| 久久久久久久久97黄色工厂| 国模冰冰炮一区二区| 成人丝袜视频网| 一区二区三区在线视频观看58| 欧美日韩高清在线播放| 欧美精品久久久久久久久老牛影院| 国产精品久久久久久久久果冻传媒 | 一区二区三区在线观看国产| 亚洲天堂精品视频| 亚洲18影院在线观看| 日韩精品一二三| 亚洲视频综合在线| 亚洲一区二区三区中文字幕| 亚洲风情在线资源站| 免费成人av资源网| 国产成人精品三级麻豆| 91麻豆自制传媒国产之光| 在线欧美日韩国产| 91色porny蝌蚪| 欧美高清hd18日本| 欧美激情一区二区三区在线| 国产精品久久久久永久免费观看| 中文字幕成人网| 奇米色一区二区| 99久久婷婷国产精品综合| 日韩视频一区二区三区| 亚洲国产精品国自产拍av| 亚洲午夜久久久久久久久电影网| 裸体歌舞表演一区二区| gogo大胆日本视频一区| 欧美精品1区2区3区| 国产精品福利av|