使用touch操作图片
功能:
1、图片放大缩小
2、图片移动
3、图片上做点标记
PS
1、后端程序员不容易,且行且珍惜
2、代码不想封装,累
js代码
/**************************calc picture start****************************************/
//图片拖动开始位置
var startx = 0;
var starty = 0; //图片原始定位
var oLeft = 0;
var oTop = 0; //图片移动后的位置
var imgLeftPx = 0;
var imgTopPx = 0; //图标的位置
var markerLeft = 0;
var markerTop = 0; //手指缩放,记录两根手指的位置
var pageX, pageY, initX, initY, isTouch = false;
var start = []; var touchNumber = 0; function picMove() { $("#floor_backgroup").on("touchstart", function(e) {
//判断手指数
//if(e.changedTouches.length == 1) {
var ttg = e.changedTouches[0]; //计算相对的位置
startx = ttg.pageX
starty = ttg.pageY
var el = $("#floor_backgroup"); oLeft = el.css("left");
oTop = el.css("top");
//} //手指按下时的手指所在的X,Y坐标
pageX = e.targetTouches[0].pageX;
pageY = e.targetTouches[0].pageY; //初始位置的X,Y 坐标
initX = e.target.offsetLeft;
initY = e.target.offsetTop; //记录初始 一组数据 作为缩放使用
start = e.touches; //得到第一组两个点
if(start.length == 2) {
//表示手指已按下
isTouch = true;
} touchNumber = start.length; return false;
}) $("#floor_backgroup").on("touchmove ", function(e) {
//calcPoint(e);
//if(e.touches.length == 1) {
if(!isTouch && touchNumber == 1) {
var ttg = e.touches[0];
//计算相对的位置
var x = ttg.pageX - startx;
var y = ttg.pageY - starty; x = x + parseInt(oLeft.replace("px", ""))
y = y + parseInt(oTop.replace("px", "")) $("#floor_backgroup").css({
"left": x + "px",
"top": y + "px"
})
} //if(e.touches.length == 2) {
if(isTouch) {
//得到第二组两个点
var now = e.touches;
//得到缩放比例, getDistance 是勾股定理的一个方法
var p2 = now[1];
var p1 = now[0]; var x = (p2.pageX - p1.pageX)
var y = (p2.pageY - p1.pageY)
var value01 = Math.sqrt((x * x) + (y * y)) p2 = start[1]
p1 = start[0] x = (p2.pageX - p1.pageX)
y = (p2.pageY - p1.pageY)
var value02 = Math.sqrt((x * x) + (y * y)) var scale = (value01 / value02);
scale = scale.toFixed(8); scale = (scale - 1) / 80 + 1
//console.log(scale) var image = new Image()
image.src = $("#floor_picture").attr("src") //console.log(image.height) if($("#floor_backgroup").height() * scale > image.height) {
return false;
} if($("#floor_backgroup").height() * scale < ($("#floor_img").height() * 0.7) && $("#floor_backgroup").width() * scale < ($("#floor_img").width() * 0.7)) {
return false;
} $("#floor_backgroup").css({
"height": ($("#floor_backgroup").height() * scale) + "px",
"width": ($("#floor_backgroup").width() * scale) + "px"
})
} return false;
}) $("#floor_backgroup").on("touchend ", function(e) {
if(isTouch) {
isTouch = false;
} if(!isTouch && touchNumber == 1){
console.log(1111)
var ttg = e.changedTouches[0];
var x = ttg.pageX - startx;
var y = ttg.pageY - starty; imgLeftPx = parseInt($("#floor_backgroup").css("left").replace("px", ""))
imgTopPx = parseInt($("#floor_backgroup").css("top").replace("px", "")) if(x == 0 && y == 0) {
//$("#floor_img").click();
calcPoint(e);
}
} return false;
}) //图标touch事件
$("#floor_marker").on("touchstart", function(e) {
var ttg = e.changedTouches[0]; //记录手指放下去的位置
markerLeft = ttg.pageX
markerTop = ttg.pageY
//
//e.preventDefault();
return false;
}) $("#floor_marker").on("touchmove", function(e) {
var ttg = e.changedTouches[0]; //拖动过程中获取到的位置
var x = ttg.pageX;
var y = ttg.pageY; //计算拖动的距离
x = x - markerLeft;
y = y - markerTop; markerLeft = ttg.pageX;
markerTop = ttg.pageY; //在原基础上增加移动的距离
var mleft = $("#floor_marker").css("left").replace("%", "")
var mtop = $("#floor_marker").css("top").replace("%", "") var h = $("#floor_backgroup").height()
var w = $("#floor_backgroup").width() x = x + parseFloat(mleft) / 100 * w;
y = y + parseFloat(mtop) / 100 * h; imgleft = x / w * 100;
imgtop = y / h * 100; //console.log(x)
$("#floor_marker").css({
"left": imgleft + "%",
"top": imgtop + "%"
})
//e.preventDefault();
return false;
}) $("#floor_marker").on("touchend", function(e) { //e.preventDefault();
return false;
})
} var imgleft = 0;
var imgtop = 0; function calcPoint(e) {
var ttg = e.changedTouches[0];
var curr = e.target; var x0 = curr.offsetLeft + imgLeftPx
var y0 = $("#item2").height() + imgTopPx //curr.offsetTop //计算相对的位置
var x = ttg.pageX - x0;
var y = ttg.pageY - y0; var h = $("#floor_picture").height()
var w = $("#floor_picture").width() imgleft = x / w * 100;
imgtop = y / h * 100; //console.log(x)
$("#floor_marker").css({
"left": imgleft + "%",
"top": imgtop + "%"
})
}
/**************************calc picture end****************************************/
html代码
<div id="floor_img" style="height: 100%;width: 100%; position: relative; z-index: 3; display: block; background-color:rgba(0,0,0,0.7);overflow: hidden;">
<div id="floor_backgroup" style="position: absolute;width: 100%; " >
<!--图片-->
<img id="floor_picture" style="max-height: 100%; max-width: 100%;" src="../images/bg.png">
<!--标记图片-->
<img id="floor_marker" src="http://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png" style="position: absolute; height: 68px; margin: -64px 0 0 -26px ; width: 53px; left: 0; top: 0;">
</div>
</div>
使用touch操作图片的更多相关文章
- ASP.NET MVC 网站开发总结(七)——C#操作图片:多张图的拼接(旋转)
其实用C#来操作图片的拼接就是在用Graphic画图.个人感觉还是挺有趣的,各种类库提供了丰富多彩的功能. 源代码(移植到一个简单的C#程序中,并没有放在ASP.NET项目中): using Syst ...
- Java操作图片的工具类
操作图片的工具类: import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.a ...
- 【译】在Asp.Net中操作PDF – iTextSharp - 操作图片
原文 [译]在Asp.Net中操作PDF – iTextSharp - 操作图片 作为我的iTextSharp系列的文章的第七篇,开始探索使用iTextSharp在PDF中操作图片,理解本篇文章需要看 ...
- 在Android下通过ExifInterface类操作图片的Exif信息
什么是Exif 先来了解什么是Exif.Exif是一种图像文件格式,它的数据存储于JPEG格式是完全相同的,实际上Exif格式就是JPEG格式头插入了 数码照片的信息,包括拍摄的光圈.快门.平衡白.I ...
- 利用numpy实现多维数组操作图片
1.上次介绍了一点点numpy的操作,今天我们来介绍它如何用多维数组操作图片,这之前我们要了解一下色彩是由blue ,green ,red 三种颜色混合而成,0:表示黑色 ,127:灰色 ,255:白 ...
- 在c#中用指针操作图片像素点
在Bitmap类中有两个函数SetPixel,GetPixel,分别用来设置或读取图片中指定点的颜色(这里发现了VS的一个错误,SetPixel的文档说明写的是“获取颜色”??). 当要对一幅图进行相 ...
- UWP开发入门(十五)——在FlipView中通过手势操作图片
本篇的最终目的,是模拟系统的照片APP可以左右滑动,缩放图片的操作.在实现的过程中,我们会逐步分析UWP编写UI的一些思路和技巧. 首先我们先实现一个横向的可以浏览图片的功能,也是大部分APP中的实现 ...
- java使用Thumbnailator操作图片
Thumbnailator 是一个用来生成图像缩略图.裁切.旋转.添加水印等操作的 Java 类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图. Thumbnailato ...
- Python+OpenCV图像处理(三)—— Numpy数组操作图片
一.改变图片每个像素点每个通道的灰度值 (一) 代码如下: #遍历访问图片每个像素点,并修改相应的RGB import cv2 as cv def access_pixels(image): prin ...
随机推荐
- sqlserver install on linux chapter two
The previous chapter is tell us how to install sqlerver on linuix Today, we will see how to make it ...
- learn about sqlserver partitition and partition table --- add or remove table partitions
demo/* add partitions */ alter database xxx add filegroup FG_=fff_201708;alter database xxx add file ...
- Ubuntu18 永久设置分辨率1920x1080
起因 虚拟机(virtualBox)中设置 1920*1080 的分辨率后, 每次重启后都会回到默认,永久设置的方式如下 步骤: 添加系统设置 sudo xrandr --newmode " ...
- qt creator源码全方面分析(2-3-1)
目录 Using External Tools 使用Qt语言学家 预览QML文件 使用外部文本编辑器 配置外部工具 Using External Tools 您可以直接从Qt Creator中使用外部 ...
- 20200223--python学习第15天
今日内容 模块知识 内置模块 time/datatime/json/其他 内容回顾&作业题 重点知识点 构造字典和函数对应的关系,避免重复的if else a = 1 b = 2 ----- ...
- 设置ssh远程其他主机登录显示提示信息
文件及路径: /etc/motd 实例: [root@A-client ~]# ssh -p 22 test@10.0.0.2 test@10.0.0.2's password: Last login ...
- js中的innerHTML,innerText,value的区别
首先先说一下 我自己认为的 innerHTML,innerText,value的区别 innerHTML 是在控件中加html代码 就是设置一个元素里面的HTML eg: <html> & ...
- 为什么你精通CRUD,却搞不懂数据库的基本原理?
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图
- opencv —— calcHist、minMaxLoc 计算并绘制图像直方图、寻找图像全局最大最小值
直方图概述 简单来说,直方图就是对数据进行统计的一种方法,这些数据可以是梯度.方向.色彩或任何其他特征.它的表现形式是一种二维统计表,横纵坐标分别是统计样本和该样本对应的某个属性的度量. 计算直方图: ...
- 代理-cglib代理
jdk的动态代理只可以为接口去完成操作,而cglib它可以为没有实现接口的类去做代理,也可以为实现接口的类去做代理. IDB package com.bjpowernode.proxy; /** * ...