3DHover效果

实现例如锤子手机官网的3DHover效果

思路

  1. 在mouseover的时候通过event获得鼠标的位置
  2. 让div随着鼠标实现轻微rotate效果

实现

// HTML
  <div id="parent">
    <div id="root">banner</div>    
  </div>
// JS
  <script>
    $('#root'). on('mousemove', e => {
      const pos = $('#parent').offset()
      const x = e.pageX - pos.left
      const y = e.pageY - pos.top
      const centerX = $('#parent').innerWidth()/2
      const centerY = $('#parent').innerHeight()/2
      const deg = 10
      const degX = (x - centerX)/centerX * deg
      const degY = - (y - centerY)/centerY * deg
      $('#root').css({
        transform: `rotateX(${degY}deg) rotateY(${degX}deg)`  
      })
    })
  </script>
// CSS
#root {
  text-align: center;
  line-height: 200px;
  font-size: 30px;
  height: 200px;
  background-color: #00f;
  transition: transform .1s;
}
#parent {
  perspective: 1000px;
  margin-top: 100px;
}

值得注意的细节

  1. perspective属性
    视点与div的距离, 可以抽象理解为电影院的最后一排与第一排的区别, 离得越近, 同样rotate的角度看起来更倾斜, 注意这个属性使用在父元素上作用在子元素上
  2. offsetX, offsetY
    会返回相对于最近div的坐标, 所以要算出正确的鼠标在div中的位置需要使用pageX, pageY减去div的offsetX(使用jQuery)
  3. rotate的方向
    当鼠标在左边即在X轴移动的时候, rotate的是Y轴的平面, 从中心到边界, Y轴的方向从下往上看应该是逆时针方向, 但是rotateY正数是顺时针, 所以需要加上负号
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印象,因...
    DCbryant阅读 1,895评论 0 4
  • transform、transition、animation分别代表着转换、过渡以及动画。从各自的名字我们就可以大...
    Ginkela阅读 3,866评论 0 12
  • 1、属性选择器:id选择器 # 通过id 来选择类名选择器 . 通过类名来选择属性选择器 ...
    Yuann阅读 1,656评论 0 7
  • perspective的介绍 指定观察者距离z=0平面的距离,为元素及其内容应用透视变换。当值为0或负值时,无透视...
    sunny519111阅读 3,698评论 1 6
  • 致亲爱的自己 亲爱的姑娘,是不是觉得世界刚刚又暗了一下, 没事的姑娘 你的生活不能掌握在别人的的手中 ,即使...
    青栀___阅读 263评论 0 0