JS 第三方工具封裝經典案例(canvas元素拖動)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>圖片繪製並拖拽</title>
<style>
body,div{
margin:0;
padding:0;
}
</style>
</head>
<body>
<canvas id="myCanvas" width="500" height="400" style="border:1px solid red;">
<p>您的系統不支援此程式!</p>
</canvas>
<a href="" id="downlink">下載圖片</a>
<img src='' id="modelImg">
<script>
var canvas = document.getElementById('myCanvas');
var cansText = canvas.getContext('2d');
var img = new Image();
img.src="./images/finger.png";
img.onload = function(){
cansText.drawImage(img,50,50,150,100);
}
cansText.save();
cansText.fillStyle = "#000000";
cansText.font='15px Arial';
cansText.translate(300,350);
cansText.fillText("canvas生成圖片測試",0,0);
cansText.fillText("長按儲存到手機",0,30);
cansText.restore();
function dragImg(){
var moving = false; //標記是否在拖動
var movingLine = false; //塗鴉
var imgCurrent = {
x:50,
y:50
};
var dis = {};
canvas.onmousedown = function(e){
//計算滑鼠落下點與被拖動的左邊和上邊的距離
dis={
x:e.clientX-imgCurrent.x,
y:e.clientY-imgCurrent.y
}
//判斷是不是在圖片上
if(dis.x>150 || dis.y>100){
return;
}
moving = true;
}
canvas.onmousemove = function(e){
if(!moving) {
return;
}
var px = e.clientX - dis.x;
var py = e.clientY - dis.y;
//不要超出邊界 如何處理
// 橫座標 0 - (畫布的寬度-圖片的寬度)
// 縱座標 0 - (畫布的高度-圖片的高度)
var movescope = {
mx:canvas.width - 150,
my:canvas.height-100
};
if(px>movescope.mx || px<0){
return;
}
if(py>movescope.my || py<0){
return;
}
cansText.clearRect(0,0,canvas.width,canvas.height);
cansText.drawImage(img,px,py,150,100);
imgCurrent= {
x:px,
y:py
}
}
canvas.onmouseup = function(){
moving = false;
movingLine = false;
}
canvas.addEventListener('mousedown',function(ev){
movingLine = true;
})
canvas.addEventListener('mousemove',function(ev){
if(!movingLine){
return;
}
// drawLine()
cansText.fillStyle = 'red';
cansText.beginPath(); //開始一條路徑
cansText.arc(ev.clientX,ev.clientY,5,0,2 *Math.PI,true); //路徑
cansText.fill();
})
}
dragImg();
//圖片的下載 base64
document.getElementById('downlink').addEventListener('click',function(ev){
ev.preventDefault();
// this.download = 'hello.png';
this.href = canvas.toDataURL('image/png');
modelImg.src= this.href;
})
</script>
</body>
</html>
相關文章
- JS 第三方工具封裝經典案例(canvas動態繪圖)JS封裝Canvas繪圖
- JS 第三方工具封裝經典案例(canvas時鐘)JS封裝Canvas
- HTML元素拖動JSHTMLJS
- JavaScript經典案例:鍵盤控制元素移動JavaScript
- js拖動調整元素寬度JS
- 封裝avalonia指定元件允許拖動的工具類封裝元件
- 封裝js獲取當前元素的弟弟元素節點封裝JS
- JavaScript 拖動調整元素尺寸JavaScript
- JS能力測評經典題--查詢陣列元素位置JS陣列
- 《驚封》經典語錄
- JavaScript經典案例(二)JavaScript
- MySQL經典案例分析MySql
- JavaScript拖動調整元素的尺寸JavaScript
- js封裝 Ajax ——常用工具函式JS封裝函式
- Java基礎經典案例Java
- js經典題目JS
- canvas繪製經典星空連線效果Canvas
- JS — websocket封裝JSWeb封裝
- JS功能封裝JS封裝
- div拖動範圍限定在指定元素內
- Python入門經典案例一Python
- C++ 經典案例1例C++
- Linux 【Shell指令碼經典案例】Linux指令碼
- OpenCV之C++經典案例OpenCVC++
- Js 經典面試題JS面試題
- 封裝、許可權修飾符、封裝的案例封裝
- ajax原生js封裝JS封裝
- 原生js封裝AjaxJS封裝
- 小程式的canvas繪圖的封裝Canvas繪圖封裝
- 部分JS經典題目解析JS
- 封裝Date工具類封裝
- 封裝Redis工具類封裝Redis
- JS物件之封裝(二)JS物件封裝
- 深入理解負載均衡經典案例負載
- 關於AWK的10個經典案例
- 一次Android動畫工具類的封裝Android動畫封裝
- 封裝scroll.js 獲取滾動條的值封裝JS
- js 動態新增class封裝(es6語法)JS封裝