• 使用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%; 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; 100%; " >
    					<!--图片-->
    					<img id="floor_picture" style="max-height: 100%; max- 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 ;  53px; left: 0; top: 0;">
    				</div>
    			</div>
    

      

  • 相关阅读:
    网站中使用了Excel组件问题 Microsoft.ACE.OLEDB.14.0' provider is not registered on the local machine
    键值对在架构设计里的应用
    轻轻松松 用U盘安装WIN7
    U盘装WIN7:微软官方工具《Windows 7 USB DVD Download Tool》U盘装wind7(更新官方整合SP1的WIN7 ISO)
    微软一站式示例代码库(中文版)20110924版本, 新添加ASP.NET, Windows Base, Silverlight, WinForm等20个Sample
    最薄笔记本苹果MacBook Air安装雪豹+Win7双系统的驱动解决方法
    使用受保护的配置加密配置信息
    自动加密web.config配置节批处理
    Asp.net MVC3学习
    周老师科研站
  • 原文地址:https://www.cnblogs.com/zhoushangwu/p/10757441.html
Copyright © 2020-2023  润新知