0

0

如何使用CSS3制作炫酷带方向感应的鼠标滑过图片3D动画

不言

不言

发布时间:2018-06-21 17:01:26

|

2020人浏览过

|

来源于php中文网

原创

这篇文章主要为大家详细介绍了css3制作炫酷带方向感应的鼠标滑过图片3d动画,具有一定的参考价值,并兼容目前最新的各类主流浏览器,感兴趣的小伙伴们可以参考一下

这是一款使用CSS3和一点JS来制作的炫酷带方向感应的鼠标滑过图片3D动画特效。在特效中,当用户的鼠标滑过网格中的图片时,网格中的内容遮罩层会出现3D翻转动画,并且带有方向感应,能够从鼠标进入的方向开始翻转,效果非常的酷。

在线预览    源码下载

使用方法

HTML结构

该方向感应鼠标滑过动画的HTML结构采用无序列表的HTML结构来制作网格布局,每一个

  • 元素是一个网格。每个网格中使用一个元素来进行占位,实际上它是一个图片的小图标。另外p.info是要进行3D翻转的遮罩层。

    立即学习前端免费学习笔记(深入)”;

    • ...

      ....

    • ......

    CSS样式

    整个网格布局使用无序列表来制作,所有的li元素都采用左浮动。

    ul {   
      padding: 0;   
      margin: 0 0 50px;   
    }   
    ul:after {   
      content: "";   
      display: table;   
      clear: both;   
    }   
        
    li {   
      position: relative;   
      float: left;   
      width: 200px;   
      height: 200px;   
      margin: 5px;   
      padding: 0;   
      list-style: none;   
    }   
    li a {   
      display: inline-block;   
      vertical-align: top;   
      text-decoration: none;   
      border-radius: 4px;   
    }

    同时为了制作3D效果,为每一个li元素添加透视属性。

    li {   
      -webkit-perspective: 400px;   
              perspective: 400px;   
    }

    用于制作3D翻转的遮罩层p.info默认设置为100%的宽度和100%的高度,使用绝对定位,开始时位于左上角位置。然后使用rotate3d()函数将它沿X轴顺时针旋转90度,使其不可见。

    MedPeer科研绘图
    MedPeer科研绘图

    生物医学领域的专业绘图解决方案,告别复杂绘图,专注科研创新

    下载

    .info {   
      -webkit-transform: rotate3d(1, 0, 0, 90deg);   
              transform: rotate3d(1, 0, 0, 90deg);   
      width: 100%;   
      height: 100%;   
      padding: 20px;   
      position: absolute;   
      top: 0;   
      left: 0;   
      border-radius: 4px;   
      pointer-events: none;   
      background-color: rgba(26, 188, 156, 0.9);   
    }

    最后在CSS样式中为鼠标从上下左右4个方向进入和离开时预设了class类,这些class是在鼠标进入网格时,使用JavaScript来检测鼠标的进入方向,然后为其添加相应的class类。

    .in-top .info {   
      -webkit-transform-origin: 50% 0%;   
              transform-origin: 50% 0%;   
      -webkit-animation: in-top 300ms ease 0ms 1 forwards;   
              animation: in-top 300ms ease 0ms 1 forwards;   
    }   
        
    .in-rightright .info {   
      -webkit-transform-origin: 100% 0%;   
              transform-origin: 100% 0%;   
      -webkit-animation: in-rightright 300ms ease 0ms 1 forwards;   
              animation: in-rightright 300ms ease 0ms 1 forwards;   
    }   
        
    .in-bottombottom .info {   
      -webkit-transform-origin: 50% 100%;   
              transform-origin: 50% 100%;   
      -webkit-animation: in-bottombottom 300ms ease 0ms 1 forwards;   
              animation: in-bottombottom 300ms ease 0ms 1 forwards;   
    }   
        
    .in-left .info {   
      -webkit-transform-origin: 0% 0%;   
              transform-origin: 0% 0%;   
      -webkit-animation: in-left 300ms ease 0ms 1 forwards;   
              animation: in-left 300ms ease 0ms 1 forwards;   
    }   
        
    .out-top .info {   
      -webkit-transform-origin: 50% 0%;   
              transform-origin: 50% 0%;   
      -webkit-animation: out-top 300ms ease 0ms 1 forwards;   
              animation: out-top 300ms ease 0ms 1 forwards;   
    }   
        
    .out-rightright .info {   
      -webkit-transform-origin: 100% 50%;   
              transform-origin: 100% 50%;   
      -webkit-animation: out-rightright 300ms ease 0ms 1 forwards;   
              animation: out-rightright 300ms ease 0ms 1 forwards;   
    }   
        
    .out-bottombottom .info {   
      -webkit-transform-origin: 50% 100%;   
              transform-origin: 50% 100%;   
      -webkit-animation: out-bottombottom 300ms ease 0ms 1 forwards;   
              animation: out-bottombottom 300ms ease 0ms 1 forwards;   
    }   
        
    .out-left .info {   
      -webkit-transform-origin: 0% 0%;   
              transform-origin: 0% 0%;   
      -webkit-animation: out-left 300ms ease 0ms 1 forwards;   
              animation: out-left 300ms ease 0ms 1 forwards;   
    }

    JavaScript

    该特效中使用JavaScript来获取鼠标进入网格的方向,为相应的网格动画添加相应的class类。其中getDirection()函数为获取方向函数。

    var getDirection = function (ev, obj) {   
        var w = obj.offsetWidth,    
            h = obj.offsetHeight,    
            x = ev.pageX - obj.offsetLeft - w / 2 * (w > h ? h / w : 1),    
            y = ev.pageY - obj.offsetTop - h / 2 * (h > w ? w / h : 1),    
            d = Math.round(Math.atan2(y, x) / 1.57079633 + 5) % 4;   
        return d;   
    };

    然后通过遍历所有的li元素,通过鼠标进入的方向来添加相应的class类。

    var nodes = document.querySelectorAll('li'),   
        _nodes = [].slice.call(nodes, 0);   
    var addClass = function (ev, obj, state) {   
        var direction = getDirection(ev, obj), class_suffix = '';   
        obj.className = '';   
        switch (direction) {   
        case 0:   
            class_suffix = '-top';   
            break;   
        case 1:   
            class_suffix = '-right';   
            break;   
        case 2:   
            class_suffix = '-bottom';   
            break;   
        case 3:   
            class_suffix = '-left';   
            break;   
        }   
        obj.classList.add(state + class_suffix);   
    };   
    _nodes.forEach(function (el) {   
        el.addEventListener('mouseover', function (ev) {   
            addClass(ev, this, 'in');   
        }, false);   
        el.addEventListener('mouseout', function (ev) {   
            addClass(ev, this, 'out');   
        }, false);   
    });

    以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

    相关推荐:

    使用CSS3实现超酷的黑猫警长首页

    如何利用CSS3制作简单的3d半透明立方体图片

  • 相关专题

    更多
    php文件怎么打开
    php文件怎么打开

    打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

    1999

    2023.09.01

    php怎么取出数组的前几个元素
    php怎么取出数组的前几个元素

    取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

    1325

    2023.10.11

    php反序列化失败怎么办
    php反序列化失败怎么办

    php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

    1230

    2023.10.11

    php怎么连接mssql数据库
    php怎么连接mssql数据库

    连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

    948

    2023.10.23

    php连接mssql数据库的方法
    php连接mssql数据库的方法

    php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

    1402

    2023.10.23

    html怎么上传
    html怎么上传

    html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

    1230

    2023.11.03

    PHP出现乱码怎么解决
    PHP出现乱码怎么解决

    PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    1440

    2023.11.09

    php文件怎么在手机上打开
    php文件怎么在手机上打开

    php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    1303

    2023.11.13

    php源码安装教程大全
    php源码安装教程大全

    本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

    74

    2025.12.31

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    CSS3 教程
    CSS3 教程

    共18课时 | 4.2万人学习

    HTML5/CSS3/JavaScript/ES6入门课程
    HTML5/CSS3/JavaScript/ES6入门课程

    共102课时 | 6.6万人学习

    HTML+CSS基础与实战
    HTML+CSS基础与实战

    共132课时 | 9.3万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号