1 Star 1 Fork 0

kingarthur.pu / three-d-banner

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
3d.html 6.01 KB
一键复制 编辑 原始数据 按行查看 历史
kingarthur.pu 提交于 2021-08-06 17:31 . 不太像
<!DOCTYPE html>
<html>
<head>
<title>DeviceOrientationEvent</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="UTF-8" />
</head>
<style>
* {
padding: 0;
margin: 0;
}
.banner {
width: 100%;
}
.item {
width: 100%;
height: 100%;
position: relative;
}
.item_img-box {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
overflow: hidden;
}
img {
width: 100%;
vertical-align: bottom;
}
.item>.item_img-box.foreground>img {
transform: scale(1.4);
position: absolute;
}
.item>.item_img-box.background>img {
transform: scale(1.8);
position: absolute;
}
.item>.item_img-box.foreground {
z-index: 100;
}
.item>.item_img-box.middle {
z-index: 10;
}
.item>.item_img-box.background {
z-index: 1;
}
</style>
<body>
<div class="banner" id="banner">
<div class="item">
<div class="item_img-box foreground"><img src="./img/foreground.png" alt="" id="foreground"></div>
<div class="item_img-box middle"><img src="./img/middle.png" alt=""></div>
<div class="item_img-box background"><img src="./img/background.png" alt="" id="background"></div>
</div>
</div>
<!-- <p>左右:<span id="alpha">0</span>
</p>
<p>前后:<span id="beta">0</span>
</p>
<p>扭转:<span id="gamma">0</span>
</p>
<p>指北针指向:<span id="heading">0</span>度</p>
<p>指北针精度:<span id="accuracy">0</span>度</p>
<hr />
<p>x轴加速度:<span id="x">0</span>米每二次方秒</p>
<p>y轴加速度:<span id="y">0</span>米每二次方秒</p>
<p>z轴加速度:<span id="z">0</span>米每二次方秒</p>
<hr />
<p>x轴加速度(考虑重力加速度):<span id="xg">0</span>米每二次方秒</p>
<p>y轴加速度(考虑重力加速度):<span id="yg">0</span>米每二次方秒</p>
<p>z轴加速度(考虑重力加速度):<span id="zg">0</span>米每二次方秒</p>
<hr />
<p>左右旋转速度:<span id="Ralpha">0</span>度每秒</p>
<p>前后旋转速度:<span id="Rbeta">0</span>度每秒</p>
<p>扭转速度:<span id="Rgamma">0</span>度每秒</p>
<hr />
<p>上次收到通知的间隔:<span id="interval">0</span>毫秒</p> -->
<script type="text/javascript">
window.onload = function () {
const img = document.getElementsByTagName('img')[0]
const banner = document.getElementById('banner')
banner.style.height = img.height + 'px'
const __F_SCALE__ = 1.4 // 前景缩放
const __B_SCALE__ = 1.8 // 背景缩放
// 水平方向上最大偏移计算方法为:(缩放比例-1) * 宽 / 2
// 前景层
const foreground = {
maxOffsetHorizontal: 0, // 水平最大偏移量
maxOffsetVertical: 0, // 垂直最大偏移量
}
// 背景层
const background = {
maxOffsetWidth: 0,
maxOffsetheight: 0,
}
// 计算最大偏移距离
foreground.maxOffsetHorizontal = img.offsetWidth * (__F_SCALE__ - 1) / 2
foreground.maxOffsetVertical = img.offsetHeight * (__F_SCALE__ - 1) / 2
background.maxOffsetHorizontal = img.offsetWidth * (__B_SCALE__ - 1) / 2
background.maxOffsetVertical = img.offsetHeight * (__B_SCALE__ - 1) / 2
const speedRatio = background.maxOffsetHorizontal / foreground.maxOffsetHorizontal
// console.log(speedRatio)
const maxAngleX = 90
const maxAngleY = 90
window.addEventListener("deviceorientation", orientationHandler, false);
function orientationHandler(event) {
// document.getElementById("alpha").innerHTML = event.alpha;
// document.getElementById("beta").innerHTML = event.beta;
// document.getElementById("gamma").innerHTML = event.gamma;
// 沿Y轴翻转
if (Math.abs(event.gamma) <= maxAngleY) {
document.getElementById('foreground').style.left = (foreground.maxOffsetHorizontal / maxAngleX)*0.8 * event.gamma + 'px'
document.getElementById('background').style.left = -((foreground.maxOffsetHorizontal / maxAngleY)*0.8 *speedRatio* event.gamma) + 'px'
// if(event.gamma<=0){
// }else{
// }
}
if (Math.abs(event.beta) <= maxAngleX) {
document.getElementById('foreground').style.top = (foreground.maxOffsetVertical / maxAngleX) * event.beta + 'px'
document.getElementById('background').style.top = -((foreground.maxOffsetVertical / maxAngleY) *speedRatio* event.beta) + 'px'
// if(event.gamma<=0){
// }else{
// }
}
// document.getElementById("heading").innerHTML = event.webkitCompassHeading;
// document.getElementById("accuracy").innerHTML = event.webkitCompassAccuracy;
}
}
function motionHandler(event) {
// document.getElementById("interval").innerHTML = event.interval;
// var acc = event.acceleration;
// document.getElementById("x").innerHTML = acc.x;
// document.getElementById("y").innerHTML = acc.y;
// document.getElementById("z").innerHTML = acc.z;
// var accGravity = event.accelerationIncludingGravity;
// document.getElementById("xg").innerHTML = accGravity.x;
// document.getElementById("yg").innerHTML = accGravity.y;
// document.getElementById("zg").innerHTML = accGravity.z;
// var rotationRate = event.rotationRate;
// document.getElementById("Ralpha").innerHTML = rotationRate.alpha;
// document.getElementById("Rbeta").innerHTML = rotationRate.beta;
// document.getElementById("Rgamma").innerHTML = rotationRate.gamma;
}
if (window.DeviceMotionEvent) {
window.addEventListener("devicemotion", motionHandler, false);
} else {
document.body.innerHTML = "What user agent u r using???";
}
// if (window.DeviceOrientationEvent) {
// window.addEventListener("deviceorientation", orientationHandler, false);
// } else {
// document.body.innerHTML = "What user agent u r using???";
// };
</script>
</body>
</html
JavaScript
1
https://gitee.com/kingarthurpu/three-d-banner.git
git@gitee.com:kingarthurpu/three-d-banner.git
kingarthurpu
three-d-banner
three-d-banner
master

搜索帮助