<!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. HTML相关问题

    1.XHTML和HTML有什么区别HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言最主要的不同:XHTML 元素必须被正确地嵌套.XHTML 元素必须被关闭.标签名必须用小 ...

  2. 第一、初识C语言

    1·C语言强大而灵活,如python,LISP,FORTRAN,Perl,Logo,BASIC,PASACAL的编译器和解释器都是C语言编写的. 2·C语言的指针错误往往难以察觉,但这恰好告诉我们,一 ...

  3. 剑指offer三: 斐波拉契数列

    斐波拉契数列是指这样一个数列: F(1)=1; F(2)=1; F(n)=F(n-1)+F(n); public class Solution { public int Fibonacci(int n ...

  4. Freemarker中日期时间格式出错

    今天遇到一个奇怪的问题.同事访问我电脑发布的程序页面,freemarker日期格式报错.而其他电脑访问则没有问题. 先贴出错误信息. FreeMarker template error The str ...

  5. slideDoor(学习某编程网站的,仅作记录和学习)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. css清除浮动float的三种方法总结,为什么清浮动?浮动会有那些影响?一起来$('.float')

    一.抛一块问题砖(display: block)先看现象: 分析HTML代码结构: <div class="outer">     <div class=&quo ...

  7. HTTP协议的报文结构

    HTTP 有两类报文: (1) 请求报文----从客户向服务器发送请求报文,见图6-12(a). (2) 响应报文----从服务器到客户的回答,见图6-12(b). 由于 HTTP是面向文本的(tex ...

  8. Android BadgeView使用

    BadgeView是第三方的插件,用来显示组件上面的标记,起到提醒的作用,下载地址如下:http://files.cnblogs.com/files/hyyweb/android-viewbadger ...

  9. struct结构体(剽窃别人的)

    结构是使用 struct 关键字定义的,与类相似,都表示可以包含数据成员和函数成员的数据结构. 一般情况下,我们很少使用结构,而且很多人也并不建议使用结构,但作为.NET Framework 一般型別 ...

  10. SPSS数据分析—两阶段最小二乘法

    传统线性模型的假设之一是因变量之间相互独立,并且如果自变量之间不独立,会产生共线性,对于模型的精度也是会有影响的.虽然完全独立的两个变量是不存在的,但是我们在分析中也可以使用一些手段尽量减小这些问题产 ...