HTML5移动端touch滑动与重力/方向感应结合

引用了jquery、shake.js插件

shake.js : https://github.com/alexgibson/shake.js/blob/master/shake.js

图片尺寸1920 * 3000 px


<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HTML5移动端touch滑动与重力/方向感应结合</title>
<style type="text/css">
*{ margin:0; padding:0;}
html , body{ display:block; width:100%; max-width:640px; min-width:320px; margin:0 auto; height:100%;}

.box{ width:100%; height:100%; overflow:hidden; -webkit-overflow-scrolling:touch;}

.box_box{ width:300%; position:relative;}
.box_box img{ width:100%;}
.box_msg1 , .box_msg2 , .box_msg3 , .box_msg4 , .box_msg5 , .box_msg6{ display:block; width:60px; height:60px; line-height:60px; text-align:center; font-size:10px; border-radius:50%; position:absolute; left:350px; top:550px; background-color:#d00; color:#fff; cursor:pointer;
		 -webkit-animation:box_msg 2s .2s infinite; animation:box_msg 2s .2s infinite;
}
.box_msg2{ left:900px; top:900px;}
.box_msg3{ left:600px; top:800px;}
.box_msg4{ left:500px; top:1000px;}
.box_msg5{ left:700px; top:1100px;}
.box_msg6{ left:800px; top:1200px;}
@-webkit-keyframes box_msg{
	0% , 100%{ -webkit-transform:scale(1); opacity:1;}
	50%{ -webkit-transform:scale(0.9); opacity:.8;}
}
@keyframes box_msg{
	0% , 100%{ transform:scale(1); opacity:1;}
	50%{ transform:scale(0.9); opacity:.8;}
}
</style>
<script src="jquery2.1.js"></script>
<script src="shake.js"></script>
</head>

<body>
<div class="box">
	<div class="box_box">
        <img src="cs.jpg" />
        <div class="box_msg1" data-text="再接再厉">点我有惊喜~</div>
        <div class="box_msg2" data-text="恭喜你,获得XXXX">点我有惊喜~</div>
        <div class="box_msg3" data-text="再接再厉">点我有惊喜~</div>
        <div class="box_msg4" data-text="再接再厉">点我有惊喜~</div>
        <div class="box_msg5" data-text="再接再厉">点我有惊喜~</div>
        <div class="box_msg6" data-text="再接再厉">点我有惊喜~</div>
    </div>
</div>


</body>
</html>
<script>
window.onload = function() {
	var demo = $('.box_box');
	var demoW = demo.width();
	var demoH = demo.height();
	var winW = $(window).width();
	var winH = $(window).height();
	var spacing_l = demoW - winW;
	var spacing_t = demoH - winH;
	var x_bl;
	var y_bl;
	//手机感应动作
    var myShakeEvent = new Shake({
        threshold:0.3,
		 timeout:0
    });
    myShakeEvent.start();
    window.addEventListener('shake', shakeEventDidOccur, false);
    function shakeEventDidOccur () {
		deal_with(myShakeEvent.lastX , myShakeEvent.lastY , false);
    }
	
	//滑动动作
	document.body.addEventListener("touchstart", touchStart, false);
	document.body.addEventListener("touchmove", touchMove, false);
	document.body.addEventListener("touchend", touchEnd, false);
	function touchStart(e){
		var touch = e.touches[0];
		startX = touch.pageX;
		startY = touch.pageY;
		window.removeEventListener('shake', shakeEventDidOccur, false);
	}
	function touchMove(e){
		e.preventDefault();
		var touch = e.touches[0];
		endX = touch.pageX;
		endY = touch.pageY;
		deal_with(startX - endX , endY - startY , true);
	}
	function touchEnd(e){
		setTimeout(function(){
			window.addEventListener('shake', shakeEventDidOccur, false);
		},500)
	}
	
	//到达指定位置
	function deal_with(left_num , top_num , if_touch){
		if(if_touch){
			x_bl = 0.1;
			y_bl = 0.1;
		}else{
			x_bl = 5;
			y_bl = 5;
		}
//		var demo_l = parseFloat(demo.css("margin-left"));
//		var demo_t = parseFloat(demo.css("margin-top"));
		var demo_l = demo.offset().left;
		var demo_t = demo.offset().top;
		
		if(demo_l <= 0 && demo_l >= -spacing_l){
			var l_num = Math.abs(left_num) * x_bl;
			if(left_num > 0){
				l_num = demo_l - l_num;
			}else{
				l_num = demo_l + l_num;
			}
			if(l_num > 0){
				l_num = 0;
			}
			if(l_num < -spacing_l){
				l_num = -spacing_l;
			}
			//demo.css({"margin-left":l_num});
			demo_translate3d();
		}
		if(demo_t <= 0 && demo_t >= -spacing_t){
			var t_num = Math.abs(top_num) * y_bl;
			//手机感应动作  只设置横向感应,手指动作,上下左右都能滑动
			if(!if_touch){
				t_num = demo_t;
			}else{
				if(top_num > 0){
					t_num = demo_t + t_num;
				}else{
					t_num = demo_t - t_num;
				}
				if(t_num > 0){
					t_num = 0;
				}
				if(t_num < -spacing_t){
					t_num = -spacing_t;
				}
			}
			//demo.css({"margin-top":t_num});
			demo_translate3d();
		}
		function demo_translate3d(){
			var trans = "translate3d(" + l_num + "px," + t_num + "px,0)";
			demo.css({
				"-webkit-transition":"0ms",
				"-webkit-transform":trans,
				"transition":"0ms",
				"transform":trans
			});
		}
	}
	
	
	
};

$(".box_msg1 , .box_msg2 , .box_msg3 , .box_msg4 , .box_msg5 , .box_msg6").click(function(){
	alert($(this).attr("data-text"));
});
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值