《月熊志》技术解析——沉浸式的翻阅体验

  《月熊志》为大家提供了一个沉浸式的翻阅体验,用户可以在页面切换时体验到真实的3D翻书效果,非常的酷炫。而要实现这个效果,需要用到CSS3 3D transform和JavaScript,同时为了实现跨浏览器和跨设备的统一体验,用到hammer.js库去处理滑动操作。

  

  示例效果:

  

  网页的结构十分简单,整个杂志是一个ID为magazine的div,子元素. page即页面元素,其中还需要包含一层.page-content层。

  HTML:

  CSS:

  .page {

  position: absolute;

  top: 0;

  left: 0;

  width: 100%;

  height: 100%;

  overflow: hidden;

  display: none;

  }

  .page-content {

  position: absolute;

  top: 0;

  left: 0;

  width: 100%;

  height: 100%;

  }

  当用户拖拽页面时,我们会复制一份当前页和下一页,作为3D翻页的元素存在,层之间的关系如下:

  $currentPage -> 当前页

  $newPage -> 新的一页(上一页/下一页)

  $pageBack -> 克隆的$newPage

  $pageFront -> 克隆的$currentPage

  

  除了当前页的其他页面,为了只显示页面一半,需要将外层div的宽度设置为50%,同时将.page-content设为200%。

  CSS:

  .page.front,

  .page.back,

  .page.prev,

  .page.next {

  width: 50%;

  }

  .page.front .page-content,

  .page.back .page-content,

  .page.prev .page-content,

  .page.next .page-content {

  width: 200%;

  }

  当开始拖拽时,通过鼠标位置在屏幕的左边或者右边判断翻页的方向并复制页面。然后在拖拽时,根据移动距离计算翻页进度并转换为角度应用到元素上。最后使用css transition完成余下动画。

  JS代码关键部分:

  $("#magazine").hammer({prevent_default: true}).on("dragstart", function(event) {

  //开始拖拽

  //根据指针的位置判断新的一页是上一页还是下一页

  var pageX = event.gesture.center.pageX;

  _.$newPage = pageX > centerX ? _.$currentPage.next(".page").addClass("next") : _.$currentPage.prev(".page").addClass("prev");

  //复制当前页和新的一页

  _.$pageFront = $("

  ").append(_.$currentPage.children().clone());

  _.$pageBack = $("

  ").append(_.$newPage.children().clone());

  $(this).on("drag", function(event) {

  //拖拽中

  //获得手势方向

  var direction = event.gesture.direction;

  //如果是左右滑动才继续

  if (direction != "left" && direction != "right") return;

  //获得鼠标x坐标,和窗口宽度相除获得百分比和角度

  var deltaX = Math.max((_.direction == "left" ? -1 : 1) * event.gesture.deltaX, 0),

  progress = deltaX / winWidth,

  angle = (direction == "left" ? -180 : 180) * progress;

  //使用transform翻转页面

  _.$pageFront.css("transform", "perspective(2200px) rotateY(" + angle + "deg)");

  _.$pageBack.css("transform", "perspective(2200px) rotateY(" + (angle - 180) + "deg)");

  }).on("dragend", function(event) {

  //拖拽结束

  var deltaX = Math.max((direction == "left" ? -1 : 1) * event.gesture.deltaX, 0),

  time = event.gesture.deltaTime,

  progress = deltaX / winWidth,

  flipped = progress > 0.5 || deltaX / time > 0.5, //如果滑动距离超过屏幕的一半或者速度大于0.5就认为页面被翻过去了

  duration = !flipped ? 1 - progress : progress,

  angle = !flipped ? 0 : _.direction == "left" ? -180 : 180;

  //通过css3 transition完成余下动画

  _.$pageFront.css({

  "transition": "all " + duration + "s ease-out",

  "transform": "perspective(2200px) rotateY(" + angel + "deg)"

  });

  _.$pageBack.css({

  "transition": "all " + duration + "s ease-out",

  "transform": "perspective(2200px) rotateY(" + (angel - 180) + "deg)"

  });

  });

  });

  如果你的页面包含视频或者Canvas等元素,那还需要再做一些额外的工作,因为这些元素并不能以同样的状态被直接复制。

  最后如果你需要兼容不支持CSS3浏览器。可以借助Modernizr判断,以水平滑动的方式切换页面。

  if (Modernizr.csstransforms3d && Modernizr.csstransitions) {

  //支持

  } else {

  //不支持

  };

  其实,网站上还有很多特效的制作,大家可以自己前去体验:http://moonbear.animalsasia.org/ie/。希望本文能给大家带来一些灵感,运用到自己的网站开发上面去。

时间: 2024-11-03 16:55:02

《月熊志》技术解析——沉浸式的翻阅体验的相关文章

在7000平米展厅中沉浸式体验50个行业场景,是什么感受?

2017年3月9日至10日,因聚而生--ΣCO-Partner,华为中国生态伙伴大会2017在湖南长沙国际会展中心隆重召开.作为大会重要的模块之一,华为生态伙伴大会的展厅划分为行业展区.生态伙伴展区以及ICT基础设施平台三部分,吸引了诸多人的浓厚兴趣. 记者去逛展厅的时间是3月10日下午4点,距离会议结束只剩下2个半小时.通常情况下,一个为期两天的会议,在第二天下午4点的时候,展厅内各个展位几乎都开始撤展了.但是华为中国生态伙伴大会2017展厅没有一个展台在撤展,因为展厅内几乎仍是人头攒动,每个

英特尔收购虚拟现实领域的创业公司VOKE,打造沉浸式运动体验

英特尔正在开发各种业界领先的解决方案,为运动员.体育迷和内容制作者提供全新的沉浸式运动体验. 数据洪流的产生,包括对其捕捉.连接.分析以及互动的能力,正在为体育行业带来革命性的变化,我们称之为运动体验的数字化.英特尔正在开发各种业界领先的解决方案,为运动员.体育迷和内容制作者提供全新的沉浸式运动体验. 我们今年为体育迷和广播公司带来了绝佳的体验,让他们以全新的数据驱动型视角观看阿斯本站世界极限运动大赛(X Games Aspen)和NBA全明星周末等体育赛事.近期,我们正式组建了新的业务部门英特

数字标牌带来沉浸式购物体验

IT时报 尤歆飞 在不久的将来,人们到商场里买衣服时,会发现一个一人多高的联网数字标牌上正在循环显示各类服装信息.在屏幕上选择想买的衣服种类,马上会有可供选择的上千种产品,然后通过颜色.尺寸.材质和价格等关键词挑出自己最满意的产品.而且还可在一个虚拟人体模型上查看穿着效果及多种配饰信息.当来到试衣间时,营业员已经将你要试的衣服送来. 当然,也可以现场发送短信或邮件,通过网络与家人或朋友分享这些图片,征求他们的建议,或直接从屏幕上购买商品. 这就是英特尔携手多家合作伙伴在日前举行的第三届上海国际数

Android UI体验之全屏沉浸式透明状态栏样式

前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体验.而Android 5.0之后谷歌又提出了 ColorPalette 的概念,让开发者可以自己设定系统区域的颜色,使整个 App 的颜色风格和系统的颜色风格保持统一.今天学习总结一下如何实现Android 4.4以上全屏沉浸式透明状态栏效果.先看下预期效果: 首先现分清楚哪部分是状态栏,哪部分是导

DS汽车通过采用沉浸式虚拟现实技术实现展厅转型

PSA集团(PSA Group)旗下的高端品牌DS汽车公司(DS Automobiles)采用达索系统的"虚拟车库(Virtual Garage)"行业解决方案为全新的SUV车型DS 7 CROSSBACK提供全面支持,推动其展厅转型,带来全新"DS虚拟视觉(DS Virtual Vision)"沉浸式虚拟现实体验,从而实现更出色的购车体验.   通常大多数消费者只会去汽车经销商门店一两次,而虚拟技术能提升消费者造访门店的次数,为汽车品牌深入了解消费者和经销商的需求

《TensorFlow技术解析与实战》——导读

前言 缘起 2017年2月,TensorFlow的首届开发者峰会(2017 TensorFlow Dev Summit)在美国的加利福尼亚州举行.在会上,谷歌公司宣布正式发布TensorFlow 1.0版本.本书就是基于最新的1.1.0版本来介绍TensorFlow的技术解析和实战. 人工智能大潮来了.2016年,AlphaGo击败围棋大师李世石后,人工智能的应用仿佛一夜之间遍地开花.在科技潮流的大环境中,现在硅谷的用人单位越来越倾向于雇用既懂理论(思考者)又懂编程(执行者)的工程师.思考者的日

2017年新兴科技技术成熟度曲线彰显3大趋势 人工智能、沉浸式体验和数字平台

Gartner发布了2017年新兴科技技术成熟度曲线(Hype Cycle for Emerging Technologies),其中包含的各类新兴科技技术揭示出未来五到十年内可以帮助各企业在数字经济时代中生存并繁荣发展的三大显著趋势. 2017年新兴科技技术成熟度曲线彰显三大趋势 这三大趋势为无处不在的 人工智能 (AI).透明沉浸式体验(transparently immersive experiences)和数字平台(digital platforms).它们将提供无可比拟的智能.创造全新

微软更新iOS版Office Lens文件扫描应用,新增沉浸式阅读器功能

微软近日宣布更新了iOS版Office Lens文件扫描应用. Office Lens是微软推出的袖珍型扫描仪,能将白板或黑板上的笔记转化为数字内容,方便你找到重要文档或名片,拍照以供参考.Office Lens可以剪裁和强化文档图片,识别其中的文字,此外还能将图像转为可编辑的Word和PowerPoint文件. 现在该应用还可以提供沉浸式阅读( Immersive Reader)模式,该功能于2015年4月首次推出,它提供了一个舒适的方式来阅读你扫描文件的文本内容.这种阅读模式可以调整文本的字

沉浸式全景无缝拼接 巴可迎大数据时代

[中关村在线投影机频道原创]2014年3月13日,来自比利时科特里克的专业可视化系统专家巴可推出OverView无缝拼接OSV系列显示屏,带来更高的协作体验.这种弧形显示屏适合多种应用的可视化需求,从应急指挥中心,到作战室或多人讨论会议,再到更传统的公用事业.能源和过程控制的控制室应用.作为一整套解决方案中的一部分,OSV还配备了一套创新的控制器和协作管理系统--TransForm C,通过方便易用.带触摸屏的图形用户界面将所有内容布置到屏幕的最佳位置. 背投大型弧形拼接显示屏 面对海量信息数据