做一个360度看车的效果玩玩(web)

前几天在 Lexus 官网看到有这样的一个效果:http://www.lexus.com.cn/models/es/360

于是顺手打开控制台看了下他们是怎么做的,发现使用的技术还是比较简单的,通过背景图的切换来完成全景的效果。

心血来潮自己做了一个优化一点的版本,先上 DEMO 和 源码。(由于图片资源较大,加载时间较长,请耐心等待)

接下来分享下我的制作流程。首先观察下他们的图片链接:

http://img.lexus.do2014.cn/images/es/car/spoke10a/Sonic_Quartz/36.jpg!t1024x450.jpg

标红的位置为图片的序号,在拖拽时通过改变 url 来完成全景的效果。每款车的每个颜色都有60张图,序号为1-59。

现在想把这60张图下载下来,一张张扣自然太low,小小的运用下 node.js 帮我们实现这个需求:依次请求图片,并通过 fileSystem 将图片写到本地。

download.js

var http = require("http"),
    fs = require("fs");

var imgPath = ‘http://img.lexus.do2014.cn/images/es/car/spoke10a/Red_Mica_Crystal_Shine/‘;

fs.mkdir(‘./downloadImg‘, (err) => {
    if (err && err.code != ‘EEXIST‘) return;
    downloadImg();
});

function downloadImg() {
    for (var i = 0; i < 60; i ++) {
        var url = imgPath + i + ".jpg!t1024x450.jpg";
        // console.log(url);
        ((i) => {
             http.get(url, (res) => {
                var out = fs.createWriteStream(‘./downloadImg/‘+i+‘.jpg‘, {
                    encoding: ‘binary‘
                });

                res.on(‘data‘, (chunk) => {
                    out.write(chunk);
                });

                res.on(‘end‘, () => {
                    console.log(‘Image_‘+i+‘ download complete.‘);
                    out.end(‘‘);
                });
            });
        })(i);
    }
}
$ node download.js

这样60张图片就已经下载下来了,接下来想通过 CSS 精灵来实现这个图片切换的效果,所以需要将这些图片拼成一整张,我这里使用 sketch 来完成。

在同等的服务器条件下,一张肯定要比多张效率高。不过即使是压缩之后的图,也有着上M的大小。如果有 CDN 进行加速的话,那是再好不过的了。

准备工作已经完成了,接下来进行代码的编写。

首先创建一个方法用来生成矩阵,矩阵中用来保存每辆车在雪碧图中的坐标。

{     // ...
  I: 0,
  J: 0,
  rowNum: 10,
  colNum: 6,
  max: 60,
  conWidth: 1024,
  conHeight: 450,   //...
  createMatrix() {
        this.matrix = [];

        var arr = [];

        for (var i = 0; i < this.max; i ++) {
            var position = ‘-‘ + this.I * this.conWidth + ‘ -‘ + this.J * this.conHeight;
            arr.push(position);

            this.I ++;

            if ((i+1) % this.colNum == 0) {
                this.matrix.push(arr);
                arr = [];
                this.I = 0;
                this.J ++;
            }
        }
        // console.log(this.matrix);
        this.I = 0;
        this.J = 0;
    }
}

生成的坐标矩阵如下

由于这些坐标最后是应用于 backgroundPostion 属性上的,所以直接在前面添加了 “-” 号。

接下来创建一个改变图片行列序号的方法,同时将坐标设置到 backgroundPosition 上。

{
       //...
    this.$container: document.querySelector(‘#container‘),
    this.I: 0,
    this.J: 0,
    this.rowNum: 10,
    this.colNum: 6,
       //...
    rotate(type) { //clockwise: 顺时针, anti: 逆时针
        if (type == ‘clockwise‘) {
            this.I ++;

            if (this.I >= this.colNum) {
                this.I = 0;
                this.J ++;
                if (this.J >= this.rowNum) this.J = 0;
            }

        } else if (type == ‘anti‘) {
            this.I --;

            if (this.I < 0) {
                this.I = this.colNum - 1;
                this.J --;
                if (this.J < 0) this.J = this.rowNum - 1;
            }
        }
        // console.log(this.I, this.J);
        this.changePosition();
    },

    changePosition() {
        // console.log(this.matrix[this.J][this.I]);
        this.$container.style.backgroundPosition = this.matrix[this.J][this.I];
    },
}

最后使用 hammer.js 来完成手势的操作

var hammer = new Hammer(this.$container);

hammer.on(‘pan‘, function(e) {
  if ([向右拖动]) {
    this.rotate(‘anti‘);
  } else {
    this.rotate(‘clockwise‘);
  }
});

这样,一个全景观车的效果就完成了。

感谢你的浏览,希望有所帮助。

时间: 2024-08-25 15:21:42

做一个360度看车的效果玩玩(web)的相关文章

使用Javascript来创建一个响应式的超酷360度全景图片查看幻灯效果

360度的全景图片效果常常可以用到给客户做产品展示,今天这里我们推荐一个非常不错的来自Robert Pataki的360全景幻灯实现教程,这里教程中将使用javascript来打造一个超酷的全景幻灯实现,相信大家一定会喜欢的! 在这个教程中没有使用到任何插件,我们将使用HTML,css和javascript来实现,当然,也使用是jQuery这个框架! 如何实现? 我们将使用预先按照360生成的图片进行轮播来实现动画展示效果.包含了180个图片.所以加载时间可能比较长. 代码实现 我们将在css代

使用 ThreeSixty 创建可拖动的 360 度全景图片预览效果

ThreeSixty 是生成可拖动的360度预览图像序列的 jQuery 插件.只需要在你的 HTML 页面包引入最新的 jQuery 和 threesixty.js 文件就可以使用了,支持键盘上的箭头键,也支持触摸和移动设备.可以使用 nextFrame() 和 prevFrame() 绑定 UI 控件. 官方网站     在线演示     插件下载 示例 HTML: 1 <div class="threesixty" data-path="assets/img/sr

css3加js做一个简单的3D行星运转效果

前几天在园子里看到一篇关于CSS3D行星运转的文章,原文在这里,感觉这个效果也太酷炫了,于是自己也就心血来潮的来尝试的做了一下.因为懒得去用什么插件了,于是就原生的JS写,效果有点粗超,还有一些地方处理的不是很好,如果有好的建议万望留言告知,不胜感谢.源代码已上传到github上,点这里获取.好了不说废话了,下面附上代码. HTML部分 <div class="path-Saturn"> <div id="Saturn" title="土

怎么样拍摄360度全景?

360全景不是凭空生成的,要制作一个360全景,我们需要有原始的图像素材,原始图像素材的来源可以是: A.在现实的场景中,使用相机的全景拍摄功能得到的鱼眼图像 B.通过建模渲染得到的虚拟图像 下文中的表格对比了在不同的设备.拍摄机位.拼合模式.拍摄难度下所能获得到的鱼眼图像 要拍摄全景素材我们需要用到一些专业设备,如下: 数码单反相机 360全景拍摄硬件配备-数码单反相机 首先让我们来认识一下什么是数码单反相机.说白了,数码单反相机就是使用了单反新技术的数码相机.作为专业级的数码相机,用其拍摄出

基于mysql数据库集群的360度水平切割

1.why sharding? 我们都知道,信息行业发展日益迅速,积累下来的数据信息越来越多,互联网公司门要维护的数据日益庞大.设想一下,假如腾讯公司只用一个数据库的一张表格来存储所有qq注册用户的登录相关信息,毫不夸张的说,那好比就是一场灾难,腾讯少说都有好几个亿的用户,所有的信息都存储在一个数据库的一张表中,那么我们的sleect语句那得多么的消耗硬件资源,用户体验度那是相当的差的,基本上不能去运行了,那谁还去用qq,那怎么办呢,数据分割这时候就派上用场了,它根据数据的特性,将一张表单上的内

虚幻UE4中如何采集360度全景图片和VR视频

如何使用虚幻4来制作一个VR视频播放器呢,简单来讲,使用虚幻4的视频采集插件来获取图像,并对图像进行处理,就能获取我们需要的图像了,下一步,你可以把图像投影到一个360度球体上,就能形成球形的播放器了. 1.插件测试-采集单帧双眼图像 打开Epic Games Launcher,启动引擎(我使用的版本为4.14.0).在弹出的对话框中点击New Project标签栏,再选择C++标签页,选择Vehicle Advanced模板,并将项目命名为STEREOSCOPIC.最后点击CreateProj

前端的小玩意(9.4)——做一个仿360工具箱的web页面(自动生成所有图标,对图标添加响应逻辑)

前端的小玩意(9.1)--做一个仿360工具箱的web页面(Tab按钮切换) http://blog.csdn.net/qq20004604/article/details/52216203 前端的小玩意(9.2)--做一个仿360工具箱的web页面(全部工具里面的模板) http://blog.csdn.net/qq20004604/article/details/52226223 前端的小玩意(9.3)--做一个仿360工具箱的web页面(我的工具里的模板和样式) http://blog.c

企业遇到什么问题有必要做360度评估?

许多人力资源从业者在推动360度评估项目是,希望能够找到一些更为量化的评估角度来考察360度项目推进的时机.可以试着参考以下指标,如果有三项以上符合你所在的组织的情况,就应该考虑是否引入360度评估反馈技术,以及该如何设计和实施360度评估反馈技术. 一年内出现过新晋管理者不够胜利,“提拔错了人”的情况: 管理者与员工之间.管理者之间关系紧张,频繁发生冲突: 管理者对提升自我并无动力,被动学习: 管理者成熟度偏低.长期无改善: 管理者不知道如何发展: 高潜员工抱怨企业对他们的关注不足: 培训需求

前端的小玩意(9.3)——做一个仿360工具箱的web页面(我的工具里的模板和样式)

前端的小玩意(9.1)--做一个仿360工具箱的web页面(Tab按钮切换) http://blog.csdn.net/qq20004604/article/details/52216203 前端的小玩意(9.2)--做一个仿360工具箱的web页面(全部工具里面的模板) http://blog.csdn.net/qq20004604/article/details/52226223 (三)我的工具页面布局 如图: 首先将其分为二部分: 第一部分是上方整体红色方框区域: 包含若干个独立按钮,按钮