hammer.js实现背景图手势缩放调整位置
<!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实现背景图手势缩放调整位置的更多相关文章
- Qt中的Label和PushButton背景图自动缩放设置
Label 背景图自动缩放 QPixmap* pixmap = new QPixmap(":/images/HeadIcon/1.png"); pixmap->scaled( ...
- 移动开发框架,第【二】弹:Hammer.js 移动设备触摸手势js库
hammer.js是一个多点触摸手势库,能够为网页加入Tap.Double Tap.Swipe.Hold.Pinch.Drag等多点触摸事件,免去自己监听底层touchstart.touchmove. ...
- JS实现背景图按时切换或者每次更新
首先要有一个添加背景图片的div <div id="myDiv"></div> css样式中添加背景tu图 body{height:100%;} #myD ...
- JS编写背景图切换
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- JS——百度背景图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- CSS 实现背景图尺寸不随浏览器缩放而变化
<!-- Author:博客园小dee --> 一些网站的首页背景图尺寸不随浏览器缩放而变化,例如百度个人版的首页,缩放后背景图的尺寸并不改变: 再比如花瓣网( http://www.hu ...
- NGUI 背景图自适应
背景图UISprite组件调整如下: UIRoot设置: 不保持比例自适应: 保持宽与屏幕宽一致,高度随宽的缩放比例进行缩放:
- CSS实现背景图尺寸不随浏览器大小而变化的两种方法
一些网站的首页背景图尺寸不随浏览器缩放而变化,本例使用CSS 实现背景图尺寸不随浏览器缩放而变化,方法一. 把图片作为background,方法二使用img标签.喜欢的朋友可以看看 一些网站的首页 ...
- javascript 手势缩放 旋转 拖动支持:hammer.js
原文: https://cdn.rawgit.com/hammerjs/hammer.js/master/tests/manual/visual.html /*! Hammer.JS - v2.0.4 ...
随机推荐
- [转]Meta http-equiv属性详解
http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变 ...
- redis 常用配置
参数说明 redis.conf 配置项说明如下: 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式 ...
- JS --- 原型模式
创建一个对象,先来看一段代码: // 例如创建一个 Person 的构造函数, 让人有名字, 可以说话 function Person ( name ) { this.name = name; // ...
- Javascript中的集合
集合是由一组无序且唯一(即不能重复)的项组成 function Set() { var items={}; this.has=function(value){ //return value in it ...
- HBase的Write Ahead Log (WAL) —— API与基本概念
HBase的数据写入操作,会先记录到HLog中,再真正写入到MemStore中.前者是对写入友好的格式,后者是对查询友好的格式.所以前者吞吐量更高,写入成功率大,提高了系统的可靠性,“基本”可以实现宕 ...
- JS中判断 !="" 或者 !=null 失效
var id; //... if (!id&& typeof (id) != "undefined" && id!= 0) { //id为null ...
- 流媒体测试笔记记录之————解决问题video.js 播放m3u8格式的文件,根据官方的文档添加videojs-contrib-hls也不行的原因解决了
详细代码Github:https://github.com/Tinywan/PHPSharedLibrary/tree/master/Tpl/Html5/VideoJS 想播放hls协议的就是m3u8 ...
- 慕课网__HTML5 存储
application cache 只能更新全部,不能更新单独的文件 在更新后,要重新打开浏览器,缓存才会生效, 不能实时生效
- JavaScript中绑定事件监听函数的通用方法addEvent() 和 事件绑定之bindEvent()与 unBindEvent()函数
下面绑定事件的代码,进行了兼容性处理,能够被所有浏览器支持: function addEvent(obj,type,handle){ try{ // Chrome.FireFox.Opera.Safa ...
- 從 Internet 安裝 Cygwin
從 Internet 安裝 Cygwin 如果您有高速的 Internet 連線, 可以考慮用這個方法, 否則不建議使用 執行 setup.exe Cygwin Setup 畫面, 按 Next. C ...