hammer使用: 代码:捏合、捏开、图片放大 的一个手机图片“放大缩小可拖动”的小效果
hammer.js 的使用。 (手机手势插件)
捏合、捏开、图片放大 的一个手机图片“放大缩小可拖动”的小效果。
相关js 到 http://www.bootcdn.cn/ 查找和下载。 hammer.js的版本是 v2.0.4
效果说明:
1、(捏开——这个词我不知道咋说了)就是触屏后,双指向外展开。
图片放大到2倍。
并且计算当前的事件点,以此为中心,在屏幕原处放大。(实际上以左上角为中心,然后计算偏移量)
2、捏合
图片缩小回原始状态
3、放大后的滑动事件
hammertime.get('swipe').set({ direction: Hammer.DIRECTION_ALL });
注意这句话。刚开始没加这句话的时候,发现 swipeleft 和 swiperight 事件好用,但swipeup 和 swipedown 无效
开始时还想用 pan 事件,但 pan事件是拖动,它需要更多的时间
另外还加了判断,所以只有scale放大到2倍时,才能使用滑动事件
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>Pinch</title>
<script src="script/jquery.min.js"></script>
<script src="script/hammer.min.js"></script>
<style type="text/css">
html, body {width:100%;height:100%;margin:0;padding:0;}
.pinch-zoom-container {overflow: hidden;position: relative;}
.pinch-zoom, .pinch-zoom-container {width: 100%!important;height: 100%!important;}
.pinch-zoom{position:absolute;}
.pinch-zoom img{position:absolute;width:100%;left:50%;top:50%;}
</style>
</head>
<body>
<!-- ***************************** -->
<div class="pinch-zoom-container">
<div class="pinch-zoom" id="test" data-scale="1">
<img src="2.jpg" id="testimg">
</div>
</div>
<!-- ***************************** -->
<script type="text/javascript">
$(function(){
$("img").load(function(){
$(this).css("marginLeft",(-1*$(this).width()/2)+"px");
$(this).css("marginTop",(-1*$(this).height()/2)+"px");
}); //创建一个新的hammer对象并且在初始化时指定要处理的dom元素
var hammertime = new Hammer($(".pinch-zoom")[0]);
//var hammertime = new Hammer(document.getElementById("test"));
hammertime.get('pinch').set({ enable: true });
hammertime.add(new Hammer.Pinch());
//hammertime.get('pan').set({ direction: Hammer.DIRECTION_ALL });
hammertime.get('swipe').set({ direction: Hammer.DIRECTION_ALL });//横向和纵向的swipe事件
hammertime.get('swipe').set({ threshold: 0 });//识别之前所需的最小距离
hammertime.get('swipe').set({ velocity: 0.2 });//识别之前所需的最小距离 //捏开
hammertime.on("pinchout", function (e) {
console.log(">>>>>>>>>>>>>>>>");
var W = $("#testimg").width();
var H = $("#testimg").height();
var scale = 2;
//var mouseX=e.pageX;//鼠标
//var mouseY=e.pageY;
var mouseX=e.center.x;//捏开点
var mouseY=e.center.y; if($("#test").attr("data-scale")==1){
var translateX=0;
var translateY=0;
//计算当前点击点相对于图片的偏移比例
var posX = mouseX/W;
var posY = mouseY/H;
translateX= (W * posX / scale) * -1;
translateY= (H * posY / scale) * -1; console.log("###["+translateX+"]###");
$("#test").css("transformOrigin","0% 0%");
$("#test").css("transform","scale(2,2) translate("+translateX+"px, "+translateY+"px)");
$("#test").attr("data-x",translateX);
$("#test").attr("data-y",translateY);
$("#test").attr("data-scale",2); console.log("点击点的百分比>>> "+posX+","+posY+" ");
console.log("偏移>>> "+translateX+","+translateY+" ");
//console.log("鼠标:"+mouseX+","+mouseY+" ");
//console.log("捏开开开开>>>> " + e.center.x + "," + e.center.y+" ");
//console.log("x————————"+ $("#test").attr("data-x") );
//onsole.log("y————————"+ $("#test").attr("data-y") ); } });
//捏合
hammertime.on("pinchin", function (e) {
$("#test").css("transformOrigin","scale(1,1)");
$("#test").css("transform","scale(1,1) translate(0px,0px)");
$("#test").attr("data-x",0);
$("#test").attr("data-y",0);
$("#test").attr("data-scale",1);
console.log("捏合合合合>> " );
}); function move123(x,y){
//console.log($("#test").attr("data-scale")+"【】【】")
if($("#test").attr("data-scale")==2){
var W = $("#testimg").width();
var H = $("#testimg").height();
var winW = $(document).width();
var winH = $(document).height(); var marginTop = (winH - H) * -1/2;
var marginLeft = winW * -1/2 ;
var marginBottom = -1 * ( winH / 2 -(-1 * marginTop));
//console.log("marginTop="+marginTop);
//console.log("marginBottom="+marginBottom); var translateX = $("#test").attr("data-x");
var translateY = $("#test").attr("data-y");
translateX = parseFloat(translateX) + x;
translateY = parseFloat(translateY) + y; //console.log("marginBottom————::: "+ marginBottom +" ]");
//console.log("原始的:translateX = "+ translateX + " " +"translateY = " + translateY);
if(translateX>0){translateX=0;console.log("分支: 左往右拨动");}
if( translateX < marginLeft ){translateX = marginLeft;console.log("分支: 右往左拨动");}
if( translateY < marginTop ){translateY = marginTop;console.log("分支: 下往上拨动");}
if( translateY > marginBottom ){translateY = marginBottom;console.log("分支: 上往下拨动");}
//console.log("改了的:translateX = "+ translateX + " " +"translateY = " + translateY); $("#test").css("transform","scale(2,2) translate("+translateX+"px, "+translateY+"px)");
$("#test").attr("data-x",translateX);
$("#test").attr("data-y",translateY);
$("#test").attr("data-scale",2);
}
} hammertime.on("swipe", function (e) {
//console.log("事件发生点(deltaX) x: "+e.deltaX + "(deltaY) y: "+e.deltaY);
if($("#test").attr("data-scale")==2){
//console.log("拖动结束 " + e.deltaX + "," + e.deltaY);
move123(e.deltaX,e.deltaY);
}
}); }); </script>
</body>
</html>
............
hammer使用: 代码:捏合、捏开、图片放大 的一个手机图片“放大缩小可拖动”的小效果的更多相关文章
- javaScript实现图片滚动及一个普通图片轮播的代码
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- c#如何用代码开启cmd指定命令(如:运行一个手机adb shell命令)
else if (this.Mode == TravelMode.AutoRecodeMode) { DateTime StartDate = DateTime.Now; string args = ...
- 制作一个顶部图片可以拉伸放大缩小效果的tableViewHeader
最近负责公司项目个人中心的项目模块研发,首页是一个头部图片可以拉伸放大缩小效果的tableViewHeader,今天这个demo和教程我增加了模糊效果和头像缩小效果.具体效果如图: 如果这个效果是想要 ...
- 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果
首先呢,还是一贯作风,我们先来看看众多应用中的示例:(这种效果是很常见的,可以说应用的必须品.) 搜狐客户端 ...
- swiper默认显示三个,中间放大且显示全部图片两边显示部分图片的实现方法
本页面内容最后的红色部分有惊喜哦! 最近在做一个活动页面,要求触摸切换图片时,默认在可视区域中显示三张图片,其中中间的一张图片比其他两张都大且全部显示,而其他两张图片只显示部分即可,于是就想到了swi ...
- 一款基于jQuery可放大预览的图片滑块插件
今天给大家分享一款基于jQuery可放大预览的图片滑块插件.这款jQuery焦点图插件的特点是可以横向左右滑动图片,并且点击图片可以进行放大预览,唯一的缺陷是这款焦点图并不能循环切换,如果你有较好的J ...
- 使用JavaScript 中的Math对象和勾股定理公式,计算鼠标的位置与页面图片中心点的距离,根据距离对页面上的图片进行放大或缩小处理。距离远时图片放大,距离近时图片缩小
查看本章节 查看作业目录 需求说明: 使用JavaScript 中的Math对象和勾股定理公式,计算鼠标的位置与页面图片中心点的距离,根据距离对页面上的图片进行放大或缩小处理.距离远时图片放大,距离近 ...
- 【代码笔记】iOS-通过颜色来生成一个纯色图片
一,效果图. 二,代码. RootViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional se ...
- Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片
在windows的cmd命令行下,使用Python的PIL库打开并显示一个jpg图片: ? 1 2 3 openedImg = Image.open(saveToFile); print " ...
随机推荐
- CF1142E/1143B Lynyrd Skynyrd
CF1142E/1143B Lynyrd Skynyrd 开始读错题了,以为是连续的一段,敲完后才发现是 \(subsequence\) ... 考虑对于 \(a\) 中的每个 \(a_i\) 找到它 ...
- 字符串匹配--扩展KMP模板
对于一个字符串 s 以及子串 t ,扩展KMP可以用来求 t 与 s 的每个子串的最长公共前缀 ext [ i ],当然,如果有某个 ext 值等于 t 串的长度 lent ,那么就说明从其对应的 i ...
- 有用的sql语句积累
⑴. sql查询未被外键关联的数据 select * from bb b where not exists (select 1 from aa a where a.bid=b.bid)
- java时间处理--持续时间格式化工具和常量类DurationFormatUtils
阅读目录 DurationFormatUtils类简介 maven地址 构造方法 DurationFormatUtils() formatDurationHMS(long durationMillis ...
- node express 返回json object
web 开发的过程中我们经常需要返回对象的json 格式,使用node express 是比较简单的, 1.node express 基础网站的创建 比较简单,以前的文章有 2.编写对象并导出对象 / ...
- web上传照片
.toDataURL() FileReader对象也有类似的方法,比如.readAsDataURL(),然而它只接受file或blob类型,而这两种类型一般只能通过<input[type=fil ...
- 在服务端处理同步发送小消息的性能上Kafka>RocketMQ>RabbitMQ
在发送小消息的场景中,三个消息中间件的表现区分明显: Kafka的吞吐量高达17.3w/s,远超其他两个产品.这主要取决于它的队列模式保证了写磁盘的过程是线性IO.此时broker磁盘IO已达瓶颈. ...
- echarts 知识点
echarts map 禁止放大缩小,设置 calculable 为 false 即可. calculable: false echarts 报错: There is a chart instance ...
- junit 知识点
JUnit 测试框架具有以下重要特性: 测试工具 测试套件 测试运行器 测试分类 测试工具 测试工具是一整套固定的工具用于基线测试.测试工具的目的是为了确保测试能够在共享且固定的环境中运行,因此保证测 ...
- 零基础学习hadoop开发所必须具体的三个基础知识
大数据hadoop无疑是当前互联网领域受关注热度最高的词之一,大数据技术的应用正在潜移默化中对我们的生活和工作产生巨大的改变.这种改变给我们的感觉是“水到渠成”,更为让人惊叹的是大数据已经仅仅是互联网 ...