<!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. 对teacher表进行增加,删除,修改

    <%@page import="java.text.SimpleDateFormat"%> <%@ page language="java" ...

  2. [转]什么是SPI通信

    SPI:高速同步串行口.3-4线接口,收发独立.可同步进行. SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口.是Motorola首先在其MC6 ...

  3. 【转】CSS:table-cell详解

    table-cell这个家伙在国外的网站中偶有露头,天朝由于IE6.7这两个货泛滥成灾,难有发挥,那么,这个家伙到底能干些什么呢?先让我们来研究下table,那些年曾经使用的table布局为何如此辉煌 ...

  4. SQL知识整理一:触发器、存储过程、表变量、临时表

    触发器 触发器的基础知识 create trigger tr_name on table/view {for | after | instead of } [update][,][insert][,] ...

  5. 16-腾讯-intership-面试

    问题 问:说一下在浏览器那里输入一个网址,会发生什么?答:DNS服务器解析,TCP三次握手,建立连接,然后bilibala............... 问:你对http相关协议熟悉吗?答:我问是ge ...

  6. Node聊天程序实例04:chat_ui.js

    作者:vousiu 出处:http://www.cnblogs.com/vousiu 本实例参考自Mike Cantelon等人的<Node.js in Action>一书. 这个程序在客 ...

  7. css3——新盒子定义box-sizing

    css3对盒子有了新定义,以前的 盒子实际宽(高) = padding + width(height) + ( border * 2); 使用了box-sizing之后盒子实际宽(高) 就等于 wid ...

  8. arm指令周期

    1.大部分算术运算和逻辑运算指令都是单周期的,例如加法.减法.位级运算和移位 2.乘法指令根据操作数位数的不同,从2-5个周期都有可能. 3.无条件跳转语句和跳转语句成功跳转,需要重新填充流水线,因此 ...

  9. led灯的翻转函数

    定义: uint8_t led1_val; void LED1(uint8_t* val){ *val =!(*val); if( *val == 0x00 ) HAL_GPIO_WritePin ( ...

  10. npm install报错Error: ENOENT

    E:\projects\ueditor\ueditor1_4_3_3-src>npm installError: ENOENT, stat 'C:\Users\Lucas\AppData\Roa ...