整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

如何使用CSS3画出懂你的3D魔方~

何使用CSS3画出懂你的3D魔方~

前言

最近在写《每周动画点点系列》文章,上一期分享了< 手把手教你如何绘制一辆会跑车 >,本期给大家带来是结合CSS3画出来的一个立体3d魔方,结合了js让你随心所欲想怎么转,就怎么转,这里是 @IT·平头哥联盟,我是首席填坑官∙苏南(South·Su),我们先来看看效果,然后再分解它的实现过程吧

示例展示

绘制过程:

好吧,gif图看着好像有点不是很清晰,想在线预览的同学,可点击在线预览 ,废话不多扯了,先来分析一下,看如何实现这个功能吧。

∙ API预热 :

  • 本次示例是一个立体的正方形,既然有立体效果,肯定少不了CSS3中的 -webkit-perspective-透视、preserve-3d-三维空间,这个两个是重点哦,当然还有transform-origin、transition、transform等,先来回故一下 API 怎么是讲的吧:

perspective 取值 :

  • none :不指定透视 ;

  • length :指定观察者与「z=0」平面的距离,使具有三维位置变换的元素产生透视效果。「z>0」的三维元素比正常大,而「z<0」时则比正常小,大小程度由该属性的值决定,不允许负值。

transform-style 取值

  • flat :指定子元素位于此元素所在平面内;

  • preserve-3d :指定子元素定位在三维空间内,当该属性值为 preserve-3d时,元素将会创建局部堆叠上下文;

  • 小结 :决定一个变换元素看起来是处在三维空间还是平面内,需要该元素的父元素上定义 <' transform-style '> 属性,也就是说想某元素有三维效果,需要设定它的父级有 preserve-3d。

transform-origin 取值

  • percentage:用百分比指定坐标值。可以为负值;

  • length:用长度值指定坐标值。可以为负值;

  • left:指定原点的横坐标为left;

  • center①:指定原点的横坐标为center;

  • right:指定原点的横坐标为right;

  • top:指定原点的纵坐标为top;

  • center②:指定原点的纵坐标为center;

  • bottom:指定原点的纵坐标为bottom;

  • transform、transition等,就不介绍了

/*perspective使用示例:*/div{-webkit-perspective:600px;perspective:600px;}/*transform-style使用示例:*/.preserve{transform-style:preserve-3d;-webkit-transform-style:preserve-3d;}/*transform-origin使用示例:*/.preserve{-webkit-transform-origin:50%50%-100px;or-webkit-transform-origin:bottom;or-webkit-transform-origin:top;…………}

∙ 绘制6个面 :

  • 是的,我没有说错,就是6个面:上、正面、下、背面、左、右,

  • 上面API讲了这么多,来实践试一下吧,写6个div,结构大概是这样的,也是接下来的魔方需要的结构:

<divclass="cube"><divclass="cube-innerrunning"><pclass="single-sides1"><span>最</span></p><pclass="single-sides2"><span>懂</span></p><pclass="single-sides3"><span>你</span></p><pclass="single-sides4"><span>的</span></p><pclass="single-sides5"><span>魔</span></p><pclass="single-sides6"><span>方</span></p></div></div>

@IT·平头哥联盟-首席填坑官∙苏南分享

  • !!!发生了什么??是不是很吃惊??说好的值越大,透视效果越强的呢?后面明明藏了个妹子,怎么看没有透视出来?

  • 开始我也是跟你一样吃惊的,但瞬间就悟透了,少了rotate,加个它再来看看效果吧:

我公Z好 o:honeyBadger8

.cube{width:200px;height:200px;margin:10pxauto;padding:260px;position:relative;-webkit-perspective:600px;perspective:600px;transition:.5s;}.cube-inner{width:200px;height:200px;position:relative;-webkit-transform-style:preserve-3d;transition:.3s;-webkit-transform-origin:50%50%-100px;transform:rotateX(45deg);}.cube:hover{/*鼠标经过时,把perspective过渡到100*/-webkit-perspective:100px;perspective:100px;}

  • 既然API有效,那么拉下来我们就画出6个面吧,按:上、正面、下、背面、左、右,这个顺序来设置吧;

  • 首先,我们要指定它们是在三维空间内的preserve-3d,也就是6个面的父级要设置 transform-style 样式;

  • 以上都设置好后,再来看看6个面吧,为了便于区分,给它们每个都设置了不同颜色(用了css3的渐变 radial-gradient)——不想手写的同学推荐一个网站可在线设置你要的效果,复制样式即可,先来一睹风采,为了便于观察,整体角度旋转了10deg:

动画一点点之 6个面的元素的演示

  • 说到渐变,偶然之间发现了一个有意思的东西hue-rotate,它能在你初始的颜色基础上旋转元素的色调及其内容,从而达到不同的效果。了解更多

hue-rotate : The hue-rotate() CSS function rotates the hue of an element and its contents. Its result is a .

  • - "最":

.cube-inner.single-side.s1{/*s1顶部*/left:0;top:-200px;background:radial-gradient(circle,rgba(255,255,255,.88),#00adff);background:-webkit-radial-gradient(circle,rgba(255,255,255,.88),#00adff);transform-origin:bottom;-webkit-transform-origin:bottom;transform:rotateX(90deg);-webkit-transform:rotateX(90deg);}

本文由@IT·平头哥联盟-首席填坑官∙苏南分享

  • 正面 - "懂":

  • 下面就是默认的,什么都不用设置,所以就不展示了 ;

  • 下面 - "你":

  • 即底部,底部的设置,正好跟顶部它是相反的,一个origin 以 bottom为基准为坐标,一个以top为基准为坐标;

.cube-inner.single-side.s3{/*s3底部*/left:0;top:200px;background:radial-gradient(circle,rgba(255,255,255,.88),#100067);background:-webkit-radial-gradient(circle,rgba(255,255,255,.88),#100067);transform-origin:top;-webkit-transform-origin:top;transform:rotateX(-90deg);-webkit-transform:rotateX(-90deg);}

  • 背面 - "的":

  • 即正面的后边,整体旋转了 135deg,让背面更直观能看到;

  • translateZ 、rotateX 同时移动,形成透视的关系,让它看起来,在正面面的后面;

  • 下图二,把默认的正面,设置了透明度,可以看出,背面的透视效果;

.cube-inner.single-side.s4{/*s4背部*/z-index:2;left:0;top:0;background:radial-gradient(circle,rgba(255,255,255,.88),#F0C);background:-webkit-radial-gradient(circle,rgba(255,255,255,.88),#F0C);transform:translateZ(-200px)rotateX(180deg);-webkit-transform:translateZ(-200px)rotateX(180deg);/*rotateZ(-180deg)左右旋转的时候,Z轴旋转180°,因为字是倒着的*/}

@IT·平头哥联盟-首席填坑官∙苏南分享

  • 左侧面 - "魔":

  • origin以right为基准,left负元素的宽度,rotateY轴旋转90deg;

.cube-inner.single-side.s5{/*s5左侧*/left:-200px;top:0;background:radial-gradient(circle,rgba(255,255,255,.88),rgba(33,33,33,1));background:-webkit-radial-gradient(circle,rgba(255,255,255,.88),rgba(33,33,33,1));transform-origin:right;-webkit-transform-origin:right;transform:rotateY(-90deg)-webkit-transform:rotateY(-90deg)}

  • 右侧面 - "方":

  • 同理右侧,与左侧正好相反;

.cube-inner.single-side.s6{/*s6右侧*/right:-200px;top:0;transform-origin:left;-webkit-transform-origin:left;background:radial-gradient(circle,rgba(255,255,255,.88),#f00);background:-webkit-radial-gradient(circle,rgba(255,255,255,.88),#f00);transform:rotateY(90deg);-webkit-transform:rotateY(90deg);}

小结 : 嗯,以上魔方的6个面的绘制过程,基本已经完成,主要在在于transform-origin、rotate、translate等属性的应用,但为了让它更炫酷一些,我们还要给边角加一些光感。

∙ 添加高光 :

  • 细心的宝宝,前面的布局应该已经发现了,每一行布局的p标签里,都多套了一层span,就是为高光光感,埋下的伏笔,一个平面正方形有四个边,after、before只有两,那么肯定要再套一层,当然方法很多,比如直接用border也是可以的,但比较麻烦,我就选择了现在要讲的这种:

  • after、before设置1px的边框,设置一个线性渐变,中间是白色,两断是过渡到透明的,这样高光就有了,来看一组图吧:

动画一点点之 6个面的元素鼠标经过

∙ CSS 360°旋转 :

  • 上面是一个鼠标经过的过渡动画,可以看出立体效果是已经有了,接下来就写一个CSS animation的动画,让它360度旋转,每个角都能看到,这样会显的很666;

  • animation 配合 keyframes 使用,请看代码示例:

.cube.cube-inner{/*-webkit-transform:rotateX(180deg)rotateY(0deg);*/animation:elfCube10sinfiniteease-in-out;-webkit-animation:elfCube10sinfiniteeasealternate;}@keyframeselfCube{0%{transform:rotateX(0deg)rotateY(0deg);}50%{transform:rotateX(360deg)rotateY(360deg);}100%{transform:rotateX(0deg)rotateY(0deg);}}@-webkit-keyframeselfCube{0%{-webkit-transform:rotateX(0deg)rotateY(0deg);}50%{-webkit-transform:rotateX(360deg)rotateY(360deg);}100%{transform:rotateX(0deg)rotateY(0deg);}}

每周动画一点点之 6个面的元素之360度旋转

∙ 跟随鼠标旋转 :

  • 说好的随着鼠标旋转呢??

  • 别慌,接下来就是带你装逼,带你飞的时候,

  • 首先我们要了解,鼠标在容器内所在的位置,X = e.pageX - ele.offsetLeft, Y = e.pageY - ele.offsetTop;

  • 同时要知道元素内的中心点:centerX = width/2,centerY =height/2;

  • 然后得出值:axisX = X - centerX,axisY = Y - centerY;

  • PS : 开始尝试想的是鼠标从哪个方向进入,得到它的角度,但发现旋转效果不明显 ,有兴趣的同学可以尝试一下:(((Math.atan2(Y, X) * (180 / Math.PI)) + 180) / 90),参考司徒大神的JS判断鼠标从什么方向进入一个容器;

  • 最后,给容器绑上事件:mouseover、mousemove、mouseout,鼠标进入时,暂停css的动画,不然会相互打架哦!

动画一点点之 6个面的元素之360度旋转

……getAxisX(e){letleft=this.cubeEle.offsetLeft;returne.pageX-left-(this.cubeW/2)*(this.cubeW>this.cubeH?this.cubeH/this.cubeW:1);}getAxisY(e){lettop=this.cubeEle.offsetTop;returne.pageY-top-(this.cubeH/2)*(this.cubeH>this.cubeW?this.cubeW/this.cubeH:1);}……………………run(){this.cubeEle.addEventListener('mouseover',(e)=>this.hoverOut(e),false);this.cubeEle.addEventListener('mousemove',(e)=>this.move(e),false);this.cubeEle.addEventListener('mouseout',(e)=>this.hoverOut(e),false);}hoverOut(e){//进入/离开e.preventDefault();this.axisX=this.getAxisX(e),this.axisY=this.getAxisY(e);if(e.type=='mouseout'){//离开this.axisX=0;this.axisY=0;console.log("离开")this.cubeInner.className="cube-innerrunning";}else{this.cubeInner.className="cube-inner";console.log("进入")};letrotate=`rotateX(${-this.axisY}deg)rotateY(${-this.axisX}deg)`;this.cubeInner.style.WebkitTransform=this.cubeInner.style.transform=rotate;}……

结尾:

  • -webkit-perspective,

  • -webkit-transform-style,

  • -webkit-transform-origin,

  • radial-gradient、linear-gradient,

  • transform:rotate、translate、scale,

  • transition,

  • animation;

  • 以上就是今天为大家带来的分享,以及使用到的知识点的API,如文章中有不对之处,烦请各位大神斧正,

  • 源码请加G众好:honeyBadger8,这上面不让发链接

前端的技术感兴趣/或想入门前端的同学可关注我的头条号,并在后台私信发送关键字:“前端”加入跟我们一起成长或公Z好:honeyBadger8,欢迎来撩哦~

作者:苏南 - 首席填坑官

链接:https://honeybadger8.github.io/blog/

交Q:912594095、公Z好:honeyBadger8

本文原创,著作权归作者所有。商业转载请联系@IT·平头哥联盟获得授权,非商业转载请注明原链接及出处。

宝剑锋从磨砺出,梅花香自苦寒来,做有温度的攻城狮

SS3实现导航魔方旋转展示效果

点击导航列表,展示位会随着你点击的内容显示对应的内容区域,给人看着是不是有点高大上的感觉。感兴趣的小伙伴可以多多交流,有错误之处可以指出来,大家共同进步。

具体实现的代码

html:

css:

javascript:

比魔方始终致力于提供用户体验更贴心的专业手机平板,全新旗舰T7打破你的平板观!我们拥有全球最先进的64位计算技术,抛弃陈旧的32位;双4G(FDD/TDD)移动/联通/电信全兼容,150Mbps通讯全球适用,拒绝运行商限制/拒绝低速通讯;ARM全球首款A53架构真8核峰值2.0G MT8752主控,给你3倍性能提升的超级板;搭载一块7英寸1920×1200超高分辨率的日本JDI视网膜屏,真实感、绚丽饱满我们都做到了;顶级图形处理芯MAIL T760 MP2三角形生成率最高1066.6MT/s,完美契合的硬件搭配;通话、导航、蓝牙、FM等一应俱全的功能性都在酷比魔方T7得到完美的体现。

如果你喜欢酷比魔方T7,现在就有机会免费拥有!赶快到http://bbs.51cube.com/thread-97810-1-1.html报名,参加酷比魔方T7免费试用活动吧!

全球首款64位双4G真八核手机平板:酷比魔方T7京东热销中:http://item.jd.com/1236822.html

基于64位台式电脑级架构

ARM全球首款A53架构真8核峰值2.0G MT8752主控

FDD-TDD双4G支持联通,移动,电信5模15频通话通讯

顶级7英寸视网膜1920*1200 IPS技术屏

顶级图形处理芯MALI T760 MP2三角形生成率最高1066.6MT/s

4G,通话,GPS导航,蓝牙,FM,WIFI,重力感应,光线感应

64位快到颠覆传统

酷比魔方T7拥有全球最先进的64位计算技术,基于台式电脑级的架构,是传统32位计算技术无法媲美的,更具有效率;配合80ms的响应速度为您带来更快更极致流畅的系统操作感受、最迅速的触控响应体验。

全球首发MT8752真8核主控

酷比魔方T7搭载全球首秀的MT8752真8核主控;采用了Cortex-A53架构,是ARM公司最新开发的基于ARMv8指令集的A50系列架构之一,目前世界上能效最高、面积最小的64位处理器,同等性能下能效是当今高端智能手机的三倍。峰值主频高达2.0GHz,8颗8核心可同时全速运转,进行多任务同时处理;性能更强,功耗更低。

FDD-TDD双4G支持联通/移动/电信5模15频通话通讯

4G时代来临,纷纷面临运营商的抉择;酷比魔方T7拥有双4G功能,支持移动/联通/电信三大运营商,随时随地畅享4G精彩体验,150Mbps通讯全球适用,更支持三大运营商5模15频通话通讯。

极速双WIFI 4倍传输速度提升!

现在95%的产品都是使用主流的2.4G WIFI,传输速度在40M,最大上行速度为36M。酷比魔方T7不仅支持传统的2.4G更同时支持最新5.0G双WIFI;使用5G的WIFI带宽提升了4倍,解决拥堵及提升播放质量。传输速度也提升了4倍,节能省电83%。

GPS/北斗/GLONASS三种卫星定位

绝大部分产品只支持导航卫星定位,酷比魔方T7支持GPS、北斗、GLONASS三种卫星定位,比单一定位提升整整200%。

7英寸JDI视网膜屏单手握持

酷比魔方T7打造了一块可完美单手握持的7英寸日本JDI视网膜屏,1920*1200的超高分辨率效果逼真;JDI(Japan Display Inc.)是日本显示公司的英文简称,成立于2011年11月15日。由株式会社产业革新机构、索尼、日立和东芝合资,致力于小尺寸显示屏的生产和研发。到2013年的6月,JDI的低温多晶硅(LTPS)液晶面板产能已位居全球第一。你所体验到的将远远大于你所看到的。更高的对比度,在更广阔视角呈现更真切色彩的像素,以及优化的偏振光片,屏幕之下凝聚的种种创新,共同打造出我们迄今为止至为纤薄、至为先进的显示屏。

顶级GPU快!畅玩大作

酷比魔方T7搭载Mali-T760 MP2图形处理器,它支持16核,最高可配1MB L2缓存,核心频率600MHz,像素填充率9.6GP/s,三角形生成率1066.6MT/s,浮点性能可达326.4GFLOPS。它支持OpenGL ES 3.0/2.0/1.1、DX11.1图形规范,完整支持OpenCL 1.1通用计算,T760更注重每瓦性能比提升,能效比是T604的4倍。是目前全球最佳的真8核平板GPU。

ALL IN ONE的快平板

酷比魔方T7直插手机SIM卡即可实现通话、网络及短信功能,支持移动/联通SIM卡通话;装入导航APP,通过支架固定在车内,变身行驶中的导航仪,众多导航功能全兼容;蓝牙数据传输、蓝牙设备使用;支持FM收音功能,Wi-Fi无线网络;光线感应及重力感应功能也一应俱全。

5毫米至薄整机机身,280克整机重量

酷比魔方T7整体机身厚度达到仅5毫米,超薄的机身带来卓越手感。280克的整机重量轻松握持,无论居家出行都可方便使用。

充电快充、随便充!

绝大部分平板的充电器是5V/2A或9V/2A规格其中之一,如果用户在不了解的情况下错误的进行充电,会有可能导致无效或造成机器烧损等现象。酷比魔方T7同时支持5V/2A及9V/2A两种规格,而且9V/2A支持快速充电(1.5H、3.5H)

耳机全兼容 高音质的体验

市场上的通讯耳机有两种规格,一种适配苹果,另一种适配三星,酷比魔方T7兼容全类型通讯耳机,还你一个现场LIVE般震撼体验,让你拥有最真实的超高音质享受。

安卓4.4系统 深度优化极致体验

酷比魔方独特UI搭载最新安卓4.4系统,将T7发挥最极致的效果。注重细节的透视效果,将整体UI界面平铺化。全屏显示的视频播放,隐藏功能栏,带来最佳的显示效果。支持Renderscript技术,可以获得高达20倍的加速比,更强处理器计算能力。对触控响应进行了深度优化。

多功能性的车载一体机

酷比魔方T7内置的GPS模块让您可以随时使用导航、地图等功能,更可精准给您的微信或陌陌等进行定位,平板实用性进一步提高。在酷比魔方T7上安装凯立德或者高德导航软件,通过三样简单的配件瞬间即可变成便携性高,轻松安装的车载一体机。

行车记录仪行车记录仪借由录像功能记录行驶中的影像及声音,保障驾驶者的合法权益,保留证据和行驶过程。行车记录仪可以和导航软件同时运行,不会造成影响并且可保存影像。

实景AR指路实景AR通过实际画面道路情况和箭头显示语音播报引导至目的地。更贴近实际道路情况的功能,较为适合在城市内的道路使用。

3D地图3D模拟的建筑物和道路信息能够从更广的视角发现行驶道路及目的地。更较为适合告诉路段和复杂的交通路段。

海量APP 尽情兼容畅享

酷比魔方T7能畅玩数十万个Android免费游戏,不论是刀塔传奇、天天酷跑这样的热门游戏,还是狂野飙车8、刺客信条等大型3D巨作,都能轻松运行。同时OFFICE文档处理、电子邮件等商务需求也应有尽有。7英寸屏幕非常适合阅读新闻和杂志,而Android平台中海量的书籍、杂志,让您轻松获取任何想阅读的书籍。

无线互通 Wi-Fi Display

Wi-Fi Display技术手机/移动PC-电视/显示器将可以实现无线连接。

Wi-Fi Display让使用者在不需要连接线情况下享受高画质影像显示效果。支援one source-to-one sink。将室内操作的单一传输装置作为链接网络的last hop,进行影像无线显示。两个装置分别担任‘Server (Source)-Push’和‘Client (Sink)-Pull’的互动模式。让酷比魔方U27GT和您的电视、显示器、手机等无线连接,畅享影音、游戏等各种乐趣。

【特别推荐】酷比魔方TALK10 10.1英寸IPS屏四核3G手机平板 899元

【特别推荐】酷比魔方TALK7XS 7英寸IPS屏四核3G手机平板 499元

微信扫一扫,即刻添加酷比魔方微信资讯帐号,以文字、图片、语音等形式和酷比魔方进行全方位沟通、互动。

更多酷比魔方新品及最新固件下载请访问酷比魔方官网:www.51cube.com、www.51cube.net

酷比魔方平板电脑新手操作指南【图文并茂,入门必读】:http://www.51cube.com/Ch/Service/PadUserGuide.html

新浪微博上@深圳酷比魔方品牌,活动,问答,新资讯立刻获得;

微信上查找微信公众帐号“酷比魔方”,以文字、图片、语音等形式进行全方位沟通、互动;

酷比魔方品牌社区http://www.51cube.com,酷比魔方FANS和你狂欢。