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 ...
随机推荐
- POJ 3273 二分答案
思路:二分答案经典题吧....注意边界就OK了 //By SiriusRen #include <cstdio> #include <algorithm> using name ...
- c# IndexOf()用法
IndexOf()用法 查找字符串中字符或者字符串首次出现的位置,返回的是索引值; str1.indexOf('字');//查找“字”在字符串中首次出现的索引值 str1.indexOf(" ...
- 鼠标点击textarea后,在光标后追加内容
$("#insertMsg").on("click",function(){ //获取下拉选项框的值 var textFeildValue = $(" ...
- 利用第三方类 phpmailer 发邮件
第一.百度一下 phpmailer 随便找个 girhub 网站 download 下来即可. 第二.复制如下代码放在项目根目录,填写完整你的账号信息,即可发送邮件.就是这么简单! <?php ...
- lhgDialog使用--loading提示(不自动关闭)
使用lhgDialog时,发现有一个$.dialog.tips()方法可以实现loading样式的提示,但是存在默认关闭时间.方法如下图所示, 为了实现不自动关闭的方法,查看了相应的源码后,实现不关闭 ...
- Unity 性能优化(力荐)
开始之前先分享几款性能优化的插件: 1.SimpleLOD : 除了同样拥有Mesh Baker所具有的Mesh合并.Atlas烘焙等功能,它还能提供Mesh的简化,并对动态蒙皮网格进行了很好的支持. ...
- 03016_DBCP连接池
1.连接池概述 (1)用池来管理Connection,这样可以重复使用Connection: (2)有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象: ( ...
- Java基础学习总结(23)——GUI编程
一.AWT介绍 所有的可以显示出来的图形元素都称为Component,Component代表了所有的可见的图形元素,Component里面有一种比较特殊的图形元素叫Container,Containe ...
- JAVA JS 中的 modulus exponent 生成 C# 公匙
C#用的是xml,里面是base64编码的.你上面的就是hex格式,只要把上面hex格式转成byte数组,然后在base64编码就可以了. public static byte[] Hex2Byte( ...
- HTML学习----------DAY1 第一节
什么是 HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (ma ...