zoukankan      html  css  js  c++  java
  • 每天一个Js小demo之移动端全景图场景实现-全景装修图。主要知识点:css3,旋转角度检测

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta name="viewport" content="width=device-width,user-scalable=no" />
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    body,
    html {
    margin: 0;
    height: 100%;
    overflow: hidden;
    position: relative;
    }
    .wrap {
    position: relative;
    height: 100%;
    }
    .view,
    .boxZ,
    .box {
    position: absolute;
    left: 50%;
    top: 50%;
    -webkit-transform-style: preserve-3d;
    transform-style: preserve-3d;
    }
    .box {
    -webkit-transform: rotateY(0deg);
    transform: rotateY(0deg);
    -webkit-animation: 36s rotate infinite linear;
    animation: 36s rotate infinite linear;
    }
    .box span {
    position: absolute;
    left: 50%;
    top: 50%;
    margin: -512px 0 0 -512px;
    1024px;
    height: 1024px;
    text-align: center;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    /*
    背面,角度和父级的角度相对的面是背景
    */
    }
    .box span:nth-of-type(1) {
    -webkit-transform: rotateY(0deg) translateZ(-510px);
    transform: rotateY(0deg) translateZ(-511px);
    background: url(img/neg-x.png) no-repeat;
    }
    .box span:nth-of-type(2) {
    -webkit-transform: rotateY(90deg) translateZ(-511px);
    transform: rotateY(90deg) translateZ(-511px);
    background: url(img/neg-z.png) no-repeat;
    }
    .box span:nth-of-type(3) {
    -webkit-transform: rotateY(180deg) translateZ(-511px);
    transform: rotateY(180deg) translateZ(-511px);
    background: url(img/pos-x.png) no-repeat;
    }
    .box span:nth-of-type(4) {
    background: url(img/pos-z.png) no-repeat;
    -webkit-transform: rotateY(270deg) translateZ(-511px);
    transform: rotateY(270deg) translateZ(-511px);
    }
    .box span:nth-of-type(5) {
    background: url(img/pos-y.png);
    -webkit-transform: rotateX(-90deg) translateZ(-511px);
    transform: rotateX(-90deg) translateZ(-511px);
    }
    .box span:nth-of-type(6) {
    background: url(img/neg-y.png);
    -webkit-transform: rotateX(90deg) translateZ(-511px);
    transform: rotateX(90deg) translateZ(-511px);
    }
    /*
    transform-origin z轴的设置,在ios下有兼容问题
    */
    #loading {
    position: fixed;
    left: 0;
    top: 0;
    100%;
    height: 100%;
    z-index: 10;
    background: #fff url(img/loading.gif) no-repeat center center;
    }
    </style>
    </head>
    <body>
    <div id="loading"></div>
    <script type="text/javascript">
    /* 检测图片加载完成 */
    (function(){
    var imgData = [
    "img/neg-x.png",
    "img/neg-y.png",
    "img/neg-z.png",
    "img/pos-x.png",
    "img/pos-y.png",
    "img/pos-z.png"
    ];
    var nub = 0;
    for(var i = 0; i < imgData.length; i++){
    load(imgData[i]);
    }
    function load(url){
    var img = new Image();
    img.onload = function(){
    nub++;
    if(nub == imgData.length){
    loading.style.display = "none";
    }
    };
    img.src = url;
    }
    })();
    </script>
    <div class="wrap">
    <div class="view">
    <div class="boxZ">
    <div class="box">
    <span></span>
    <span></span>
    <span></span>
    <span></span>
    <span></span>
    <span></span>
    </div>
    </div>
    </div>
    </div>
    <script type="text/javascript" src="js/m.touch.js"></script>
    <script type="text/javascript">
    (function(){
    setPerspective();
    window.addEventListener('resize', function(e) {
    setPerspective();
    });
    function setPerspective(){
    var wrap = document.querySelector('.wrap');
    var view = document.querySelector('.view');
    var boxZ = document.querySelector('.boxZ');
    var deg = 45;//视野夹角(角度越小,看到的范围越广,角度越大,看到的范围越少);
    var Z = Math.round(Math.tan(deg*Math.PI/180)*wrap.clientHeight/2);//计算景深
    wrap.style.perspective = wrap.style.WebKitPerspective = Z + "px";
    //距离景物距离不变,那看到的画面大小就不变
    css(view,"translateZ",Z);
    css(boxZ,"translateZ",-100);
    }
    })();
    (function(){
    var box = document.querySelector('.box');
    css(box,"rotateX",0);
    css(box,"rotateY",0);
    window.addEventListener('deviceorientation', function(e) {
    var x = e.beta;
    var y = e.gamma;
    var z = e.alpha;
    var rotateX = x - 90;
    var rotateY = (y + z)%360;
    if(rotateX > 60){
    rotateX = 60;
    } else if(rotateX <-60){
    rotateX = -60;
    }
    css(box,"rotateX",rotateX);
    css(box,"rotateY",-rotateY);
    });
    })();
    //http://antario.act.qq.com/
    </script>
    </body>
    </html>

  • 相关阅读:
    说一说javascript的异步编程
    Flink 整合 Nacos,让 Flink 作业配置动态更新不再是难事
    Flink 整合 Apollo,动态更新 Flink 作业配置
    一文让你彻底了解大数据实时计算引擎 Flink
    《大数据实时计算引擎 Flink 实战与性能优化》新专栏
    滴滴实时计算发展之路及平台架构实践
    Flink 从 0 到 1 学习 —— Flink Data transformation(转换)
    Flink Connector 深度解析
    Flink 从 0 到 1 学习 —— Flink 配置文件详解
    vue-cli3如何配置 eslint 及配合 vscode 自动保存
  • 原文地址:https://www.cnblogs.com/catEatBird/p/7123471.html
Copyright © 2011-2022 走看看