如何使用CSS3製作酷炫帶方向感應的滑鼠滑過圖片3D動畫

不言
發布: 2023-04-01 17:06:02
原創
1687 人瀏覽過

這篇文章主要為大家詳細介紹了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>
    登入後複製

    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度,使其不可見。

    .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來取得滑鼠進入網格的方向,並為對應的網格動畫新增對應的類類別。其中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元素,透過滑鼠進入的方向來加入對應的類類。

    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);   
    });
    登入後複製

    以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

    相關推薦:

    使用CSS3實作超酷的黑貓警長首頁

    如何利用CSS3製作簡單的3d半透明立方體圖片

    以上是如何使用CSS3製作酷炫帶方向感應的滑鼠滑過圖片3D動畫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

  • 相關標籤:
    來源:php.cn
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    作者最新文章
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板