功能:

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操作图片的更多相关文章

  1. ASP.NET MVC 网站开发总结(七)——C#操作图片:多张图的拼接(旋转)

    其实用C#来操作图片的拼接就是在用Graphic画图.个人感觉还是挺有趣的,各种类库提供了丰富多彩的功能. 源代码(移植到一个简单的C#程序中,并没有放在ASP.NET项目中): using Syst ...

  2. Java操作图片的工具类

    操作图片的工具类: import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.a ...

  3. 【译】在Asp.Net中操作PDF – iTextSharp - 操作图片

    原文 [译]在Asp.Net中操作PDF – iTextSharp - 操作图片 作为我的iTextSharp系列的文章的第七篇,开始探索使用iTextSharp在PDF中操作图片,理解本篇文章需要看 ...

  4. 在Android下通过ExifInterface类操作图片的Exif信息

    什么是Exif 先来了解什么是Exif.Exif是一种图像文件格式,它的数据存储于JPEG格式是完全相同的,实际上Exif格式就是JPEG格式头插入了 数码照片的信息,包括拍摄的光圈.快门.平衡白.I ...

  5. 利用numpy实现多维数组操作图片

    1.上次介绍了一点点numpy的操作,今天我们来介绍它如何用多维数组操作图片,这之前我们要了解一下色彩是由blue ,green ,red 三种颜色混合而成,0:表示黑色 ,127:灰色 ,255:白 ...

  6. 在c#中用指针操作图片像素点

    在Bitmap类中有两个函数SetPixel,GetPixel,分别用来设置或读取图片中指定点的颜色(这里发现了VS的一个错误,SetPixel的文档说明写的是“获取颜色”??). 当要对一幅图进行相 ...

  7. UWP开发入门(十五)——在FlipView中通过手势操作图片

    本篇的最终目的,是模拟系统的照片APP可以左右滑动,缩放图片的操作.在实现的过程中,我们会逐步分析UWP编写UI的一些思路和技巧. 首先我们先实现一个横向的可以浏览图片的功能,也是大部分APP中的实现 ...

  8. java使用Thumbnailator操作图片

    Thumbnailator 是一个用来生成图像缩略图.裁切.旋转.添加水印等操作的 Java 类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图. Thumbnailato ...

  9. Python+OpenCV图像处理(三)—— Numpy数组操作图片

    一.改变图片每个像素点每个通道的灰度值 (一) 代码如下: #遍历访问图片每个像素点,并修改相应的RGB import cv2 as cv def access_pixels(image): prin ...

随机推荐

  1. 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 ...

  2. 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 ...

  3. Ubuntu18 永久设置分辨率1920x1080

    起因 虚拟机(virtualBox)中设置 1920*1080 的分辨率后, 每次重启后都会回到默认,永久设置的方式如下 步骤: 添加系统设置 sudo xrandr --newmode " ...

  4. qt creator源码全方面分析(2-3-1)

    目录 Using External Tools 使用Qt语言学家 预览QML文件 使用外部文本编辑器 配置外部工具 Using External Tools 您可以直接从Qt Creator中使用外部 ...

  5. 20200223--python学习第15天

    今日内容 模块知识 内置模块 time/datatime/json/其他 内容回顾&作业题 重点知识点 构造字典和函数对应的关系,避免重复的if  else a = 1 b = 2 ----- ...

  6. 设置ssh远程其他主机登录显示提示信息

    文件及路径: /etc/motd 实例: [root@A-client ~]# ssh -p 22 test@10.0.0.2 test@10.0.0.2's password: Last login ...

  7. js中的innerHTML,innerText,value的区别

    首先先说一下 我自己认为的 innerHTML,innerText,value的区别 innerHTML 是在控件中加html代码 就是设置一个元素里面的HTML eg: <html> & ...

  8. 为什么你精通CRUD,却搞不懂数据库的基本原理?

    原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图

  9. opencv —— calcHist、minMaxLoc 计算并绘制图像直方图、寻找图像全局最大最小值

    直方图概述 简单来说,直方图就是对数据进行统计的一种方法,这些数据可以是梯度.方向.色彩或任何其他特征.它的表现形式是一种二维统计表,横纵坐标分别是统计样本和该样本对应的某个属性的度量. 计算直方图: ...

  10. 代理-cglib代理

    jdk的动态代理只可以为接口去完成操作,而cglib它可以为没有实现接口的类去做代理,也可以为实现接口的类去做代理. IDB package com.bjpowernode.proxy; /** * ...