锤子手机官网的3d悬浮效果

CSS:

*{
      box-sizing: border-box;
    }
    #test {
      position: relative;
      width: 1100px;
      height: 600px;
      background: #fff;
      padding: 100px 0;
      margin: 50px auto;
      border: 1px solid #ddd;
      perspective: 1000px;
    }
    #banner {
      height: 400px;
      width: 900px;
      margin: 0 auto;
      background: #37d7b2;
      transition: transform .1s;
      box-shadow: 0 0 15px rgba(0,0,0,.25);
      text-align: center;
      line-height: 400px;
      font-size: 80px;
      color: #fff;
    }
    body {
      background: #ddd;
      padding: 20px;
    }

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>3d-hover</title>
</head>
<body>
  <div id="test">
    <div id="banner">banner</div>
  </div>
</body>
</html>

JS:

  $('#test').on('mousemove', function(e) {
    var offset = $('#test').offset();
    var x = e.pageX - offset.left,
        y = e.pageY - offset.top;

    var centerX = $('#test').outerWidth() /2;
    var centerY = $('#test').outerHeight() /2;

    var deltaX = x - centerX;
    var deltaY = y - centerY;

    var percentX = deltaX / centerX;
    var percentY = deltaY / centerY;

    var deg = 10;

    $('#banner').css({
      transform: 'rotateX(' + deg*-percentY + 'deg)' + 'rotateY(' + deg*percentX + 'deg)'
    })
  })

  $('#test').on('mouseleave', function(){
    $('#banner').css({
      transform: ''
    })
  })
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,862评论 1 92
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,542评论 1 32
  • 最近在学习 Webpack,网上大多数入门教程都是基于 Webpack 1.x 版本的,我学习 Webpack 的...
    My_Oh_My阅读 8,225评论 40 247
  • gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学...
    井皮皮阅读 1,334评论 0 10
  • 其实,说到底,世间何事,离得了一个缘字,众生,因了缘而流落在人间,亦是因了缘,而相遇相知,纵然是久别重逢,也少不了...
    柠C小姐阅读 294评论 0 0