<!DOCTYPE html>
<html>
<head>
<script>
function getxy(e){
var a=new Array()
var t=e.offsetTop;
var l=e.offsetLeft;
var w=e.offsetWidth;
var h=e.offsetHeight;
while(e=e.offsetParent){
t+=e.offsetTop;
l+=e.offsetLeft;
}
a[0]=w;a[1]=h;
a[2]=l;a[3]=t;
return a;
}
</script>
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="assets/style.css">
<title>Hammer.js</title> <style>
*, *:after, *:before {
box-sizing: border-box;
-moz-box-sizing: border-box;
} html, body {
margin: 0;
padding: 0;
height: 100%;
min-height: 100%;
background: #eee;
font: 13px/1.5em 'Open Sans', Helvetica, Arial, sans-serif;
} a {
color: #4986e7;
} .bg1, .green { background: #42d692; }
.bg2, .blue { background: #4986e7; }
.bg3, .red { background: #d06b64; }
.bg4, .purple { background: #cd74e6; }
.bg5, .azure { background: #9fe1e7; } body {
margin: 20px;
} pre {
background: #fff;
padding: 20px;
margin-bottom: 20px;
} .container {
max-width: 900px;
margin: 0 auto;
} .clear { clear: both; } html, body {
overflow: hidden;
margin: 0;
} body {
-webkit-perspective: 500;
-moz-perspective: 500;
perspective: 500;
} .animate {
-webkit-transition: all .3s;
-moz-transition: all .3s;
transition: all .3s;
} #hit {
padding: 10px;
} #log {
position: absolute;
padding: 10px;
} .bg2{
width:15em; height:40em; margin:0 auto;
/*background-image:url(1.jpg);*/
position:fixed;
z-index:-2;
background-repeat:no-repeat;
}
</style>
</head>
<body>
<div class="bg2" id="bg2"> </div> <script src="hammer.js"></script>
<script>
var reqAnimationFrame = (function () {
return window[Hammer.prefixed(window, 'requestAnimationFrame')] || function (callback) {
window.setTimeout(callback, 1000 / 60);
};
})(); var bg = document.getElementById("bg2");
var xy = getxy(bg);
var bgP = {
x:0,y:0,dx:0,dy:0,
s:1,ls:1,bdw:xy[0],bdh:xy[1]
}; var mc = new Hammer.Manager(bg); function imgLoaded(){
bgP.bgw = this.width;
bgP.bgh = this.height; if(bgP.bgw / bgP.bgh > bgP.bdw / bgP.bdh)
bgP.useW = false;
else
bgP.useW = true; this.style.display = 'none'; bg.style.backgroundImage = 'url('+this.src+')';
bg.style.backgroundSize = bgP.useW? (bgP.bgw+'px auto') : ('auto '+bgP.bgh+'px'); mc.add(new Hammer.Pan({ threshold: 0, pointers: 0 })); mc.add(new Hammer.Rotate({ threshold: 0 })).recognizeWith(mc.get('pan'));
mc.add(new Hammer.Pinch({ threshold: 0 })).recognizeWith([mc.get('pan'), mc.get('rotate')]); mc.on("panstart panmove", onPan);
//mc.on("rotatestart rotatemove", onRotate);
mc.on("pinchstart pinchmove", onPinch); mc.on("hammer.input", function(ev) {
if(ev.isFinal) {
bgP.dx = 0;
bgP.dy = 0;
bgP.ls = 1;
}
});
} function onPan(ev) {
bgP.x += ev.deltaX - bgP.dx;
bgP.y += ev.deltaY - bgP.dy; console.log('x='+(ev.deltaX - bgP.dx)+', y='+(ev.deltaY - bgP.dy)); bgP.dx = ev.deltaX;
bgP.dy = ev.deltaY; if(bgP.x>0) bgP.x = 0;
if(bgP.y>0) bgP.y = 0; if(bgP.x+bgP.bgw*bgP.s<bgP.bdw)
bgP.x = bgP.bdw - bgP.bgw*bgP.s; if(bgP.y+bgP.bgh*bgP.s<bgP.bdh)
bgP.y = bgP.bdh - bgP.bgh*bgP.s; var pos = bgP.x+'px '+bgP.y+'px';
bg.style.backgroundPosition = pos;
} var initScale = 1;
function onPinch(ev) {
if(ev.type == 'pinchstart') {
initScale = transform.scale || 1;
}
var add = ev.scale - bgP.ls;
bgP.s += add;
bgP.ls = ev.scale; if(bgP.useW){
var w = (bgP.bgw*bgP.s);
if(w<bgP.bdw)
{
bgP.s = bgP.bdw/bgP.bgw;
w = (bgP.bgw*bgP.s);
}
bg.style.backgroundSize = w +'px auto';
}else{
var h = (bgP.bgh*bgP.s);
if(h<bgP.bdh)
{
bgP.s = bgP.bdh/bgP.bgh;
h = (bgP.bgh*bgP.s);
}
bg.style.backgroundSize = 'auto '+h +'px';
}
} function bgStart(src){
var img = document.createElement('img');
img.src = src;
img.style.opacity = '0.01';
img.onload = imgLoaded;
}
bgStart('1.jpg');
</script> </body>
</html>

hammer.js实现背景图手势缩放调整位置的更多相关文章

  1. Qt中的Label和PushButton背景图自动缩放设置

    Label 背景图自动缩放 QPixmap* pixmap = new QPixmap(":/images/HeadIcon/1.png"); pixmap->scaled( ...

  2. 移动开发框架,第【二】弹:Hammer.js 移动设备触摸手势js库

    hammer.js是一个多点触摸手势库,能够为网页加入Tap.Double Tap.Swipe.Hold.Pinch.Drag等多点触摸事件,免去自己监听底层touchstart.touchmove. ...

  3. JS实现背景图按时切换或者每次更新

    首先要有一个添加背景图片的div <div  id="myDiv"></div> css样式中添加背景tu图 body{height:100%;} #myD ...

  4. JS编写背景图切换

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  5. JS——百度背景图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. CSS 实现背景图尺寸不随浏览器缩放而变化

    <!-- Author:博客园小dee --> 一些网站的首页背景图尺寸不随浏览器缩放而变化,例如百度个人版的首页,缩放后背景图的尺寸并不改变: 再比如花瓣网( http://www.hu ...

  7. NGUI 背景图自适应

    背景图UISprite组件调整如下: UIRoot设置: 不保持比例自适应: 保持宽与屏幕宽一致,高度随宽的缩放比例进行缩放:

  8. CSS实现背景图尺寸不随浏览器大小而变化的两种方法

    一些网站的首页背景图尺寸不随浏览器缩放而变化,本例使用CSS 实现背景图尺寸不随浏览器缩放而变化,方法一. 把图片作为background,方法二使用img标签.喜欢的朋友可以看看   一些网站的首页 ...

  9. javascript 手势缩放 旋转 拖动支持:hammer.js

    原文: https://cdn.rawgit.com/hammerjs/hammer.js/master/tests/manual/visual.html /*! Hammer.JS - v2.0.4 ...

随机推荐

  1. Java轻量级业务层框架Spring两大核心IOC和AOP原理

    IoC(Inversion of Control): IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些 ...

  2. linux下配置安装python3

    一.首先,官网下载python3的所需版本. wget https://www.python.org/downloads/release/python-360/Python-3.6.0.tgz 想下载 ...

  3. DNS域名解析服务器

    域名解析服务器,靠它把你要访问的网址找到然后把信息送到你电脑上.DNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的.域名服务器是指保存有该网络中所有主 ...

  4. Windows_RTM_RC

    1.https://zhidao.baidu.com/question/172764638.html RTM(Release to Manufacturing)版 软件在正式在零售商店上架前,需要一段 ...

  5. Nodejs的安装及配置

    1.从Nodejs官网下载安装包,进行安装,是否安装成功,可以从cmd npm去检查,出现如下界面,就表示安装成功 2.打开Webstorm进行配置,(如果安装前打开webstorm了,需要重启web ...

  6. C# 实现 Excel文件的数据导入

    前台 <asp:FileUpload ID="fuFile" runat="server" /> 后台 public string GetExcel ...

  7. 百度app测试服务

    https://cloud.baidu.com/product/mat.html?t=cp:ct|pp:fcforbce242jrcs|cn:fcforbce242|pu:newAATJRKWS002 ...

  8. AX2012单元格显示颜色 displayOption

    public void displayOption(HV_WMSLocationStatusHistory _record, FormRowDisplayOption _options){    #d ...

  9. 11.10 Taolu1234组信息汇总

    团队名称: Taolu1234 团队选题: <餐厅到店点餐系统>WEB版 团队博客地址: http://www.cnblogs.com/queenjuan/ 团队GITHUB地址: htt ...

  10. web.py框架入门

    在使用微信搭建公众平台的时候,使用的是web.py这个方便简单的框架,学习一下. 框架文档:http://webpy.org/docs/0.3/tutorial.zh-cn  按照文档的内容写一遍程序 ...