js -- canvas img 封装
鼠标 1.操作canvas 中的 img。 右键放大缩小,左键移动img。
2.拖动input type= range 改变图片的透明度
html 代码
<!DOCTYPE html>
<html lang="en" oncontextmenu="doNothing()">
<head>
<meta charset="UTF-8">
<title>图片已中心店的坐标缩放</title>
<style>
#box1 {
width: 500px;
height: 300px;
border: 1px solid black;
overflow: hidden;
float: left;
} #box2 {
width: 500px;
height: 300px;
border: 1px solid black;
overflow: hidden;
float: left;
margin-left: 50px;
box-sizing: border-box;
}
</style>
<script type="text/javascript">function ss() {
if (event.button == ) {
alert("aaaa");
}
document.onmousedown = ss;
}</script>
</head>
<body>
<div>
<div id="box1">
<canvas id="cas1" width="" height=""></canvas>
</div>
<div id='box2'>
<canvas id="cas2" width="" height=""></canvas>
</div>
<div style="clear: both"></div>
</div>
<input type="range" id="inp_d" value="">
</body>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="./index.js"></script>
</html>
js 代码
/**
* Created by Administrator on 2018/7/6.
*/
function doNothing() {
window.event.returnValue = false;
return false;
} var imgX = 0;
var imgY = 0;
var imgScale = 1;
var val = 0;
window.onload = function (event) {
var count = [
{cas2: 'cas1', box2: '#box1,#box2', path: './2.jpg', callback: imgOnload_callbak, scale: methods,icon_img:'./4.jpg,./5.jpg',inp_id:'#inp_d,#inp_d'},
{cas2: 'cas2', box2: '#box1,#box2,',path: './3.jpg', callback: imgOnload_callbak, scale: methods,icon_img:'./5.jpg,./4.jpg',inp_id:'#inp_d,#inp_d'}
];
for (var i = 0; i < count.length; i++) {
getElement(count[i].cas2, count[i].box2, count[i].path, count[i].callback, count[i].scale,count[i].icon_img,count[i].inp_id)
}
}; function getElement(cas_id, box_id, img_src, imgOnload_call, methods,icon_img,inp_id) {
var canvas = document.getElementById(cas_id);
var box = document.getElementById(box_id);
var arr = box_id.split(',');
var context = canvas.getContext('2d');
var img = new Image();
var img1 = new Image();
var img1_arr = icon_img.split(',');
img.src = img_src;
for(var i = 0; i < img1_arr.length;i++){
img1.src = img1_arr[i];
}
imgOnload_call(img, context, canvas, img1);
methods(arr, canvas, context, img,img1);
inp_methods(inp_id,context,canvas,img,img1)
} function imgOnload_callbak(img,context,canvas,img1) {
img.onload = function () {
context.globalAlpha = 1.0;
context.drawImage(img, 0, 0);
};
img1.onload = function (){
setTimeout(function(){
context.globalAlpha = 0;
context.drawImage(img1,0,0,img1.width,img1.height,0,0,img1.width,img1.height);
},50);
}
} function methods(elements, canvas, context, img,img1) {
var img_y = 1;
elements.forEach(function (item, i) {
$(item).mousedown(function (event) {
console.log(val);
var e_btn = event.button;
if (e_btn == 2) {
var e_down_y = event.clientY;
$(item).mousemove(function (event) {
var e_move_y = event.clientY;
if (e_move_y < e_down_y) {
img_y *= 1.01;
} else {
img_y /= 1.01;
}
e_down_y = e_move_y;
img_y = (img_y > 1) ? img_y : 1;
canvas.style.transform = "scale(" + img_y + "," + img_y + ")"
});
$(item).mouseup(function () {
$(item).unbind('mousemove');
$(item).unbind('mouseup');
})
}
else if (e_btn == 0) {
var e_drag_down = {
x: event.clientX,
y: event.clientY
};
$(item).mousemove(function (event) {
var e_drag_move = {
x: event.clientX,
y: event.clientY
};
var e_drag_distance = {
x: e_drag_move.x - e_drag_down.x,
y: e_drag_move.y - e_drag_down.y
};
e_drag_down = e_drag_move;
imgX += e_drag_distance.x;
imgY += e_drag_distance.y;
context.clearRect(0, 0, canvas.width, canvas.height);
context.globalAlpha = 1.0;
context.drawImage(img, 0, 0, img.width, img.height, (imgX / 5), (imgY / 5), img.width * imgScale, img.height * imgScale);
context.globalAlpha = val;
context.drawImage(img1, 0, 0, img1.width, img1.height, (imgX / 5), (imgY / 5), img1.width * imgScale, img1.height * imgScale);
});
$(item).mouseup(function () {
$(item).unbind("mousemove");
$(item).unbind('mouseup');
})
}
})
})
} function inp_methods(inp_id,context,canvas,img,img1){
var inp_id_arr = inp_id.split(',');
inp_id_arr.forEach(function(item,i){
$(item).on('input propertychange',function(){
val = $(item).val();
val = ( val < 0.1)? 0.1 : val/100;
context.clearRect(0,0,canvas.width,canvas.height);
context.globalAlpha = 1.0;
context.drawImage(img,0,0,img.width, img.height, (imgX / 5), (imgY / 5), img.width * imgScale, img.height * imgScale);
context.globalAlpha = val;
context.drawImage(img1,0,0,img1.width, img1.height, (imgX / 5), (imgY / 5), img1.width * imgScale, img1.height * imgScale);
})
});
}
有错误的地方,请大家帮忙 指正一下。谢谢!
js -- canvas img 封装的更多相关文章
- 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理
[微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...
- Atitit js canvas的图像处理类库attilax总结与事业
Atitit js canvas的图像处理类库attilax总结与事业 1.1. 脸部识别JavaScript类库Tracking.js1 1.2. AlloyImage特性1 1.3. CamanJ ...
- [JS,Canvas]日历时钟
[JS,Canvas]日历时钟 Html: <!doctype html> <html> <head> <meta charset="UTF-8&q ...
- JS类的封装及实现代码
js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类. 1. ...
- 【转】第7篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:全自动注册与反射方法分析
作者: 牛A与牛C之间 时间: 2013-12-12 分类: 技术文章 | 2条评论 | 编辑文章 主页 » 技术文章 » 第7篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析
作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【转】第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析
作者: 牛A与牛C之间 时间: 2013-11-19 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第5篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【转】第4篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:委托回调方法分析
作者: 牛A与牛C之间 时间: 2013-11-18 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第4篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【转】3篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:官方原生方法分析
作者: 牛A与牛C之间 时间: 2013-11-17 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第3篇:Xilium CefGlue 关于 CLR Object 与 JS ...
随机推荐
- ZooKeeper Recipes and Solutions
原文地址:http://zookeeper.apache.org/doc/current/recipes.html 参考:https://zookeeper.apache.org/doc/trunk/ ...
- HDFS的配额
- 关于ListView的一些不常用到的属性
1.setCacheColorHint自定义listview的时候,当你不使用Android:cacheColorHint=“#00000000”会出现下面选中一个空间黑色底色的情况,破坏整体美观度 ...
- JACOB调用控件函数
背景介绍: 使用JAVA程序,实现对系统已安装控件方法的调用. JACOB下载地址:http://danadler.com/jacob/ 使用方法: 1.将jacob.jar添加到项目工程中 2.将j ...
- 解决高版本vm打开虚拟机报错
问题: 打开虚拟机的文件目录,找到.vmx 文件 用记事本打开重命名后的“.vmx.txt”文件 找到行:policy.vm.mvmtid = "52 10 08 ed ff 34 ed d ...
- SSD-tensorflow-2 evaluation
测试就是用voc2007的test set来测试已经训练好的checkpoint的mAP,github上提供了三个已经训练好的model的checkpoint checkpoint 里面已有的300_ ...
- python(2) 图像通道,几何变换,裁剪
一.图像通道 1.彩色图像转灰度图 from PIL import Image import matplotlib.pyplot as plt img=Image.open('d:/ex.jpg') ...
- NodeJS学习笔记 (19)进阶调试-debugger(ok)
写在前面 谈到node断点调试,目前主要有三种方式,通过node内置调试工具.通过IDE(如vscode).通过node-inspector,三者本质上差不多.本文着重点在于介绍 如何在本地通过nod ...
- BZOJ 2141 排队(分块+树状数组)
题意 第一行为一个正整数n,表示小朋友的数量:第二行包含n个由空格分隔的正整数h1,h2,…,hn,依次表示初始队列中小朋友的身高:第三行为一个正整数m,表示交换操作的次数:以下m行每行包含两个正整数 ...
- BZOJ——T 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛
http://www.lydsy.com/JudgeOnline/problem.php?id=1612 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1 ...