美文网首页让前端飞
css3 3D悬浮倾斜效果

css3 3D悬浮倾斜效果

作者: 芸芸人海之中独独遇见你 | 来源:发表于2017-11-05 13:17 被阅读0次

求一个设计大佬设计博客样式。。。
直男审美自己都看不下去了= =
作为回报我可以教你一点前端知识 (•̀ω•́ 」∠) //虽然我也是菜鸡...要不肉偿把我

今天的主题是css3中的transfrom-style中的preserve-3d鼠标悬浮倾斜效果

下面是效果图


悬浮倾斜

qq截图把鼠标隐藏了
是不是感觉很厉害
其实很简单
但是我花了一天时间才做出来(果然是码渣= =)
下面是详细步骤

1,父元素设置景深

景深这个东西靠空间想象能力吧,属性设置perspective:800px;,需要设置在盒子的父级元素上,将整个父级盒子当作承载3D的载体。景深设置的越小,3D效果会越明显。

2,子元素容器设置

分别设置,转变方式设为3D效果,渐变时间设为0.2s

    transform-style: preserve-3d;
    transition:all 0.2s;   

3,监听鼠标的移入与移出

鼠标移入,产生倾斜效果倾斜效果由transfram中的rotateX,rotateY决定,鼠标移出,清除倾斜效果。po主用的是vue,代码如下

<div class="mainBox" id="main">         
            <div v-for="(article,index) in articles" class="ass clearfix" @mousemove="skew($event,index)" @mouseleave="clearRot(index)">
//在vue中,如果想要同时传入参数和event事件对象,需要在参数中写$event,否则只用写e就好了
                <h2>{{article.title}}</h2>
                <section>{{article.date}}</section>
                <p>{{article.content}}</p>
                <a href="javascript:" @click="readmore">阅读全部</a>
            </div>
        </div>

skew(e,index){...}//划重点
clearRot(index){                                
  //一寸长,一寸强
  //querySelector属于原生css选择器,动态设置transform时可以加上webkit前缀兼容低版本webkit浏览器
  document.querySelector('#main').childNodes[index].style.webkitTransform = "rotate(0deg)"
}

4,重点来了

为了让鼠标在子元素中不同位置,盒子会有不同的倾斜效果,如果把每个盒子当作一个容器,左上角为原点,得到这个容器中鼠标的坐标,再根据鼠标坐标,动态设置倾斜的角度,效果就ok了。

具体操作

在上面传入函数的event对象,存在pageX与pageY属性,获得的是鼠标相对于浏览器窗口的距离,如果我们再有,每个盒子相对浏览器窗口的距离,那么

鼠标在盒子中的相对距离 = 鼠标相对窗口距离 - 盒子相对窗口距离

于是,我们通过dom.getBoundingClientRect().left获得盒子相对窗口距离,通过event.pageX获取鼠标相对窗口距离,计算得出鼠标相对盒子距离
注意,e.pageY始终获取的是鼠标位置与原始窗口顶部的位置,也就是说,无论滚动条滚动多少,在同一个地方的e.pageY不变,但是dom.getBoundingClientRect().top在变,所以计算相对高度时,要减去滚动的高度

      var Xskew = e.pageX  - leftDis + 10  +1  //加1防止为0时翻转出问题
      var Yskew = e.pageY - document.documentElement.scrollTop - topDis

5,当相对位置Xskew大于盒子宽度的一半则相当于按压右边,小于盒子宽度的一半则相当于按压左边,上下同理

此处rotate大小设置看个人喜好,我设置的是rotateX范围为(-4,4),rotateY范围(-6.5,6.5)

6,空间直角坐标系中,在一个盒子中若要出现类似按压的效果,以左上角为例,若左上角被按压,则盒子当向前沿X轴(顺时针)旋转,因此rotate为正,因为左侧按压,则沿Y轴逆时针旋转,rotateY(...)为负

对应的
左上角被按压对应 transform:rotateX(4) rotateY(-6.5)
左下角被按压对应 transform:rotateX(-4) rotateY(-6.5)
右上角被按压对应 transform:rotateX(4) rotateY(6.5)
右下角被按压对应 transform:rotateX(-4) rotateY(6.5)

计算出旋转的角度最后将其设置到transform属性上即可
dom.style.webkitTransform = "rotateX("+Xdeg+"deg)"+"rotateY("+Ydeg+"deg)"

7,具体代码

skew(e,index){
            //获取文章dom元素
            var dom = document.querySelector('#main').childNodes[index]
            //获取元素自身高度和宽度
            var Wdom = dom.offsetWidth
            var Hdom = dom.offsetHeight
            
            //dom.getBoundingClientRect()可以直接获取到元素的与浏览器的相对位置
            var leftDis = dom.getBoundingClientRect().left
            var topDis = dom.getBoundingClientRect().top + 20
            
            //注意,e.pageY始终获取的是鼠标位置与原始窗口顶部的位置,也就是说,无论滚动条滚动多少,在同一个地方的e.pageY不变,但是dom.getBoundingClientRect().top在变,所以计算相对高度时,要减去滚动的高度
            var Xskew = e.pageX - leftDis + 10  //加10防止为0时翻转出问题
            var Yskew = e.pageY - document.documentElement.scrollTop - topDis
            
            console.log(e.pageY)
            //console.log(Xskew,Yskew)
            if(Yskew >= Hdom/2){    
                //6.5设为x轴方向倾斜的最大参数,从6.5到-6.5
                var Xdeg = -(4/(Hdom/2))*(Yskew-(Hdom/2))
            }else{
                //此处有转义错误,先用4除2好了

                var Xdeg = (4/(Hdom/2))*((Hdom/2)-Yskew)
                //console.log('Xdeg为'+Xdeg)
                //var Ydeg = (3.25/Wdom)*(Xskew - (Wdom/2))
            }
            //高度195的一半,和宽度不一样,这里设为固定值
            if(Xskew < Wdom/2){
                var Ydeg = -(6.5/(Wdom/2))*(Wdom/2-Xskew)
            }else{
                var Ydeg = (6.5/(Wdom/2))*(Xskew-Wdom/2)
            }
            //console.log(Xdeg,Ydeg)
            dom.style.webkitTransform = "rotateX("+Xdeg+"deg)"+"rotateY("+Ydeg+"deg)"
        }

2017/11/5

相关文章

  • css3 3D悬浮倾斜效果

    求一个设计大佬设计博客样式。。。直男审美自己都看不下去了= =作为回报我可以教你一点前端知识 (•̀ω•́ 」∠)...

  • HTML5实现的震撼3D焦点图动画

    这是一款基于HTML5和jQuery的3D焦点图动画,焦点图中的图片利用了CSS3的相关特性实现图片倾斜效果,从而...

  • CSS3之变形

    一、CSS3变形简介 CSS3变形是一些效果的集合,比如平移、旋转、缩放和倾斜效果,每个效果都称为变形函数(Tra...

  • CSS3 Transform——transform-origin

    关于css3变形 CSS3变形是一些效果的集合,比如平移、旋转、缩放和倾斜效果,每个效果都被称作为变形函数(Tra...

  • 简单的图片hover翻转效果

    html css tip: 主要是利用css3的3d翻转效果

  • 3D轮播

    目的 掌握 transform 3D 效果 熟悉 perspective属性 基本概念 CSS3 3D 转换:使元...

  • 用CSS3制作3D图片环

    上一篇文章讲了利用css3制作3D图片爆炸效果,现在我们同样用css3制作3D图片环,我们先看一下实现的效果图:刚...

  • css3 速查表-Transform

    CSS3变形是一些效果的集合,比如平移、旋转、缩放和倾斜效果,每个效果都被称作为变形函数(Transform Fu...

  • CSS3 3D相册

    今天来做一个基于CSS3 3D属性的3D相册效果。 1 基本布局 首先来完成基本布局,从效果图中可以看到,所有图片...

  • Tailwind Transform

    CSS3中transform(变形)属性用于设置元素在2D或3D上的旋转、缩放、移动和倾斜 坐标系 transfo...

网友评论

    本文标题:css3 3D悬浮倾斜效果

    本文链接:https://www.haomeiwen.com/subject/ebgtmxtx.html