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

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

Jun 21, 2018 pm 05:01 PM
css3 Tetikus ke atas

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

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


在线预览    源码下载

使用方法

HTML结构

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

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

    <p class=&#39;container&#39;>  
      <ul>  
        <li>  
          <a class=&#39;normal&#39; href=&#39;#&#39;>  
            <svg viewBox=&#39;0 0 80 76&#39; x=&#39;0px&#39; y=&#39;0px&#39;>  
              <g>  
                <path d=&#39;M 68.9708 24.8623 L 60.4554 2.3018 ...... 68.0625 Z&#39;></path>  
              </g>  
            </svg>  
          </a>  
          <p class=&#39;info&#39;>  
            <h3>...</h3>  
            <p>....</p>  
          </p>  
        </li>  
        ......   
      </ul>  
    </p>
    Salin selepas log masuk

    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;   
    }
    Salin selepas log masuk

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

    li {   
      -webkit-perspective: 400px;   
              perspective: 400px;   
    }
    Salin selepas log masuk

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

    .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);   
    }
    Salin selepas log masuk

    最后在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;   
    }
    Salin selepas log masuk

    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;   
    };
    Salin selepas log masuk

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

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

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

    相关推荐:

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

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

    Atas ialah kandungan terperinci 如何使用CSS3制作炫酷带方向感应的鼠标滑过图片3D动画. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

  • Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    Repo: Cara menghidupkan semula rakan sepasukan
    1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
    1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Bagaimana untuk mencapai kesan gelombang dengan CSS3 tulen? (contoh kod) Bagaimana untuk mencapai kesan gelombang dengan CSS3 tulen? (contoh kod) Jun 28, 2022 pm 01:39 PM

    Bagaimana untuk mencapai kesan gelombang dengan CSS3 tulen? Artikel ini akan memperkenalkan kepada anda cara menggunakan animasi SVG dan CSS untuk mencipta kesan gelombang Saya harap ia akan membantu anda!

    Gunakan CSS dengan mahir untuk merealisasikan pelbagai butang berbentuk pelik (dengan kod) Gunakan CSS dengan mahir untuk merealisasikan pelbagai butang berbentuk pelik (dengan kod) Jul 19, 2022 am 11:28 AM

    Artikel ini akan menunjukkan kepada anda cara menggunakan CSS untuk melaksanakan pelbagai butang berbentuk pelik yang kerap muncul. Saya harap ia akan membantu anda!

    Bagaimana untuk menyembunyikan elemen dalam css tanpa mengambil ruang Bagaimana untuk menyembunyikan elemen dalam css tanpa mengambil ruang Jun 01, 2022 pm 07:15 PM

    Dua kaedah: 1. Menggunakan atribut paparan, cuma tambah gaya "display:none;" pada elemen. 2. Gunakan kedudukan dan atribut teratas untuk menetapkan kedudukan mutlak elemen untuk menyembunyikan elemen. Cuma tambahkan gaya "position:absolute;top:-9999px;".

    Bagaimana untuk melaksanakan sempadan renda dalam css3 Bagaimana untuk melaksanakan sempadan renda dalam css3 Sep 16, 2022 pm 07:11 PM

    Dalam CSS, anda boleh menggunakan atribut imej sempadan untuk mencapai sempadan renda. Atribut imej sempadan boleh menggunakan imej untuk membuat sempadan, iaitu, menambah imej latar belakang ke sempadan Anda hanya perlu menentukan imej latar belakang sebagai gaya renda; lebar sempadan imej ke dalam. Sama ada permulaan diulang;".

    Ternyata karusel teks dan karusel imej juga boleh direalisasikan menggunakan CSS tulen! Ternyata karusel teks dan karusel imej juga boleh direalisasikan menggunakan CSS tulen! Jun 10, 2022 pm 01:00 PM

    Bagaimana untuk mencipta karusel teks dan karusel imej? Perkara pertama yang semua orang fikirkan ialah sama ada untuk menggunakan js Malah, karusel teks dan karusel imej juga boleh direalisasikan menggunakan CSS tulen. Saya harap ia akan membantu semua orang.

    Bagaimana untuk membesarkan imej dengan mengklik tetikus dalam css3 Bagaimana untuk membesarkan imej dengan mengklik tetikus dalam css3 Apr 25, 2022 pm 04:52 PM

    Kaedah pelaksanaan: 1. Gunakan pemilih ":aktif" untuk memilih keadaan klik tetikus pada gambar 2. Gunakan atribut transform dan fungsi skala() untuk mencapai kesan pembesaran gambar, sintaks "img:active {transform; : skala(pembesaran paksi-x, y Pembesaran paksi);}".

    css3 apakah itu susun atur penyesuaian css3 apakah itu susun atur penyesuaian Jun 02, 2022 pm 12:05 PM

    Reka letak adaptif, juga dikenali sebagai "susun atur responsif", merujuk kepada susun atur halaman web yang boleh mengecam lebar skrin secara automatik dan membuat pelarasan yang sepadan dengan halaman web sedemikian boleh serasi dengan berbilang terminal berbeza dan bukannya membuat versi khusus untuk setiap terminal. . Reka letak penyesuaian dilahirkan untuk menyelesaikan masalah penyemakan imbas web mudah alih, dan boleh memberikan pengalaman pengguna yang baik untuk pengguna yang menggunakan terminal yang berbeza.

    Adakah kesan animasi css3 mempunyai ubah bentuk? Adakah kesan animasi css3 mempunyai ubah bentuk? Apr 28, 2022 pm 02:20 PM

    Kesan animasi dalam css3 mempunyai ubah bentuk; anda boleh menggunakan "animasi: atribut animasi @keyframes ..{..{transform: transformation attribute}}" untuk mencapai kesan animasi ubah bentuk Atribut animasi digunakan untuk menetapkan gaya animasi, dan atribut transform digunakan untuk menetapkan gaya ubah bentuk.

    See all articles