<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta content="width=device-width initial-scale=1.0 maximum-scale=1.0 user-scalable=0" name="viewport"/>
<title>手指</title>
<style>
.bg-model{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.5);}
.rect{position:absolute;width:60px;height:60px;border:1px dashed #f00}
.resize{position:absolute;width: 30px;height: 30px;bottom: -15px;right: -15px;background: rgb(163, 146, 54)
}
</style>
</head>
<body>
<div class="bg-model" id="div1">
<div class="rect" id="div2" style="top:10px;left:10px;width: 60px;">
<p id="DebugTXT"></p>
<div class="resize" id="div3"></div>
</div>
</div>
<script>
var d1=document.getElementById('div1'),d2=document.getElementById('div2') ,d3=document.getElementById('div3');
var Moving,Resizing;
var startX,startY,sideLen=60;
d1.addEventListener('touchstart',touchStart,true);
d1.addEventListener('touchmove',touchMove,true);
d1.addEventListener('touchend',touchEnd,true);
var twoFinger;
var pos1={x:0,y:0},pos2={x:0,y:0};
var pos12={x:0,y:0},pos22={x:0,y:0};
function touchStart(e){
var el = e.target;
DebugTXT.innerHTML='touch:'+e.touches.length+'<br>changeTouch:'+e.changedTouches.length+'<br>'+twoFinger;
if(e.touches.length==2){
twoFinger=true;
pos1.x=e.touches[0].clientX; pos1.y=e.touches[0].clientY;
pos2.x=e.touches[1].clientX; pos2.y=e.touches[1].clientY;
return;
}else{twoFinger=false;}
var touch= e.touches[0];
if (el.id == 'div2') {
Moving = true;
Resizing = false;
startX=touch.clientX-parseInt(d2.style.left);
startY=touch.clientY-parseInt(d2.style.top);
} else if (el.id == 'div3') {
Moving = false;
Resizing = true; sideLen=parseInt(d2.style.width);
startX=touch.clientX;
startY=touch.clientY;
d3.style.display='none';
}twoFinger=false;
}
function touchMove(e){
DebugTXT.innerHTML='touch:'+e.touches.length+'<br>changeTouch:'+e.changedTouches.length+'<br>'+twoFinger;
e.stopPropagation();
e.preventDefault();
if (e.changedTouches.length == 2) {
twoFinger = true;
pos12.x = e.changedTouches[0].clientX;
pos12.y = e.changedTouches[0].clientY;
pos22.x = e.changedTouches[1].clientX;
pos22.y = e.changedTouches[1].clientY;
return;
}
var touch = e.changedTouches[0];
if (Moving) {
var endX = touch.clientX, endY = touch.clientY;
d2.style.left = endX - startX + 'px';
d2.style.top = endY - startY + 'px';
} else if (Resizing) {
var endX = touch.clientX, endY = touch.clientY;
var increase = Math.min(endX - startX, endY - startY);
d2.style.width = sideLen + increase + 'px';
d2.style.height = sideLen + increase + 'px';
}
}
function touchEnd(e){
DebugTXT.innerHTML='touch:'+e.touches.length+'<br>changeTouch:'+e.changedTouches.length+'<br>'+twoFinger;
if(e.touches.length==0&&twoFinger){
twoFinger=false;
var len1=Math.pow(Math.pow(pos1.x-pos2.x,2)+Math.pow(pos1.y-pos2.y,2),0.5).toFixed(0);
var len2=Math.pow(Math.pow(pos12.x-pos22.x,2)+Math.pow(pos12.y-pos22.y,2),0.5).toFixed(0);
//alert('len1:'+len1+',len2:'+len2);
var newL=len2-len1>0?1.5:0.5;
sideLen=parseInt(d2.style.width);
d2.style.width =d2.style.height =sideLen*newL+ 'px';
}
Moving=Resizing=false; d3.style.display='block';
}
</script>
</body>
</html>
分享到:
相关推荐
本篇文章将通过实例代码详细介绍如何用JS实现移动端双指缩放和旋转,以及如何对网页进行缩放。 首先,我们需要了解移动端触摸事件。在移动端设备上,JS通过监听特定的触摸事件来捕捉用户的触摸行为。这些事件包括...
在Android开发中,实现图片的双指缩放和单指拖拽是常见的需求,尤其在设计用户界面或者创建自定义视图时。这种功能能够提供更丰富的交互体验,让用户能够自由地查看和操作图片。本篇文章将深入探讨如何在Android应用...
本DEMO主要展示了如何利用双指缩放和双击操作来实现图片的放大与缩小,提供了一个直观且易用的交互体验。以下将详细解释这个DEMO涉及的技术点。 首先,我们要理解双指缩放(Pinch Zoom)的概念。双指缩放是基于多点...
"移动端jquery效果显示地图双指缩放,单指拖动"这个主题主要探讨了如何使用jQuery和JavaScript技术在移动设备上实现类似地图应用的交互功能,即双指缩放(pinch-to-zoom)和单指拖动(drag-to-move)。下面将详细...
在Android开发中,实现双指缩放和移动控件是一项常见的需求,特别是在设计触摸交互的界面时。这一功能主要用于图片查看器、地图应用或者任何需要用户进行手势操作的场景。以下将详细介绍如何在Android中实现这个功能...
这个压缩包“Android项目控件以及双指放大缩小图片、单指拖动图片.rar”提供了一个示例,展示了如何在Android应用中实现双指缩放和单指拖动图片的功能。这个功能在很多场景下都非常实用,比如在地图应用、图像查看器...
在Android开发中,实现双指缩放图片和摇一摇功能是常见的交互需求,这两个特性大大提升了用户体验。本文将详细讲解如何在Android应用中实现这些功能。 首先,我们来看双指缩放图片的功能。这个功能主要涉及到...
在本文中,我们将深入探讨Silverlight技术,特别是关于图片缩放的实现实例。Silverlight是Microsoft推出的一个跨浏览器插件,用于创建丰富的交互式Web应用程序,具有强大的图形处理能力和多媒体支持。图片缩放功能在...
然后在JavaScript中初始化Hammer实例,并监听`pinch`和`pinchend`事件: ```javascript var scalableDiv = document.getElementById('scalable'); var hammertime = new Hammer(scalableDiv); hammertime.on('...
Android SDK提供了一个名为ScaleGestureDetector的工具类,它可以帮助我们更方便地检测双指缩放手势。我们可以创建一个ScaleGestureDetector的实例,并提供一个OnScaleGestureListener。在监听器的onScale()方法中,...
在本案例中,我们主要关注的是图片手指缩放功能,这在手机移动端的网页浏览或图像查看中非常常见。 1. **Hammer.js 插件安装与引入**: 在项目中使用 Hammer.js,首先需要将其下载或通过 CDN 引入。在本压缩包中,...
除了双指捏合,滑动手势也可以用于平移或连续变焦。用户可以沿着水平或垂直方向滑动手指来实现视角的平移,或者通过持续的滑动来连续调整缩放级别。这需要在`ACTION_MOVE`事件中处理,并根据手指移动的距离动态更新...
### Android监听百度地图缩放事件知识点详解 #### 一、概述 在开发基于地理位置的应用时,经常需要使用地图服务来展示位置信息或者提供路径规划等功能。百度地图作为一款功能强大的地图服务工具,在Android开发中...
在移动应用开发中,尤其是涉及用户交互的场景,如照片浏览、地图导航等,实现图片随着手指滑动而缩放的功能是一项基本需求。这个功能基于触摸屏幕的手势识别技术,通常利用多点触控(Multi-Touch)来实现图片的平移...
极简调用: <script src="main/js/photoswipe.init.js"></script> (this)'/> ()'>多图预览</button> function photoPreview(items) { var items = [{ src: "1.jpg", ...</body>
- 创建ScaleGestureDetector对象,重写onScale()、onScaleBegin()和onScaleEnd()回调方法,用于识别和处理双指缩放。 2. **处理多点触控事件**: - 在onTouchEvent()方法中,首先调用GestureDetector的...
在iOS开发中,实现双指捏合操作来放大或缩小图片是一种常见的手势识别功能,它极大地提升了用户体验。这种手势主要用于图像查看器应用,让用户能够自由地查看图片的细节或者整体布局。本文将深入探讨如何在iOS中实现...
我们将主要关注`ScaleGestureDetector`类,它是Android SDK提供的一种专门用于识别双指缩放手势的工具。 `ScaleGestureDetector`是Android SDK中的一个内置类,它可以帮助我们检测到用户在屏幕上进行的双指捏合和...