1. 程式人生 > 其它 >前端特效開發 | 圖片翻轉的製作

前端特效開發 | 圖片翻轉的製作

HTML5學堂(碼匠):在前端開發中,針對效果層面的開發,使用原生JS往往會因其冗長的程式碼嚴重影響到開發進度。比如一個簡單的圖片翻轉效果,我們能否考慮藉助某些簡單方便的操作來替代原生JS的使用呢?

本文主要內容

1. 效果展示

2. 實現的原理分析

3. 案例實現

1. 效果展示

如上效果,當用戶將滑鼠移入到每一張圖片上,當前的圖片會有一個翻轉消失的效果,同時有一個圖片描述資訊的面板會翻轉出現。而當滑鼠移出圖片時,原有的圖片會翻轉出現,面板資訊會翻轉消失。針對這樣一個簡單的效果描述,大家有沒有自己的實現方法?

2. 實現的原理分析

2.1 結構與樣式分析

由於需要的功能是隨著滑鼠移入圖片與資訊都需要翻轉,所以在同一個位置要存在兩個標籤併發生相應的變化,可以考慮使用定位來實現。

在本文中,採用的是圖片img與資訊em都參照外層a標籤的定位方式,然後再進行相應的樣式變化。

2.2 基本功能邏輯

首先使用JS實現動態新增翻轉後展示的資訊面板;

然後藉助jQuery的hover方法,實現滑鼠移入移出的功能;

最後針對不同的翻轉變化,讓圖片與資訊面板發生相反的效果展示。

3. 案例實現

3.1 新增面板資訊

在滑鼠移入相應的圖片時,需要讓圖片可以翻轉消失,同時有一個資訊面板可以翻轉出現。

但是在結構的書寫中並沒有提供面板資訊的標籤,所以就需要使用JS動態的添加了一個em標籤,藉助append方法把相應的標籤新增到了對應的img標籤的後面。如下圖所示:

除了新增標籤以外,還把當前圖片的alt屬性中替代性文字填充成了標籤的內容,其範例程式碼:

// 對每個a標籤內部動態新增一個em標籤,並使其內容為img的alt屬性內容

label.find('.brand a').each(function() {
    $(this).append('<em>' + $(this).find('img').attr('alt') + '</em>');
});

3.2 實現圖片的翻轉

實現圖片的翻轉是藉助了jQuery中的hover方法,此方法攜帶了兩個函式,寫法如下:

label.find('.brand a').hover(function() {}, function() {});

其中第一個函式表示的是滑鼠移入發生的事情;第二個函式表示的是滑鼠移出發生的事情。

圖片的翻轉主要就是在第一個函式中進行書寫,通過對外層的a標籤繫結hover事件,然後變化其內部img的高度值與定位值,同時使用動畫方式show()使得img後面的em標籤出現。

程式碼範例如下:

// 滑鼠移入img標籤動畫變小
$(this).find('img').stop().animate({
    'height': 0,
    'top': '35px'
}, 200, function() {
    // em標籤出現
    $(this).hide().next().show();
    // em標籤動畫變大
    $(this).next().animate({
        'height': '70px',
        'top': 0
    }, 200);
});

3.3 實現資訊面板的翻轉

實現資訊面板的翻轉出現主要是hover事件中第二個函式的功能,該函式主要處理的是讓滑鼠在移出時,em標籤變小,原來的img標籤要恢復到原本的初始狀態。

相應程式碼如下:

// 滑鼠移出em標籤動畫變小
$(this).find('em').animate({
    'height': 0,
    'top': '35px'
}, 200, function() {
    // img標籤出現
    $(this).hide().prev().show();
    // img動畫變大
    $(this).prev().animate({
        'height': '70px',
        'top': '0'
    }, 200);
});

3.4 成品程式碼

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>jquery hover滑鼠懸停圖片旋轉動畫展示</title>
    <link rel="stylesheet" type="text/css" href="css/reset.css" />
    <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
    <style type="text/css">
    .allbrand .brand {
        overflow: hidden;
        width: 390px;
        height: 225px;
        margin: 40px auto 0;
    }
    .allbrand .brand a {
        position: relative;
        float: left;
        width: 120px;
        height: 70px;
        margin: 0 6px 5px 0;
        color: #fff;
        font-size: 14px;
        line-height: 70px;
        text-align: center;
    }
    .allbrand .brand a img {
        position: absolute;
        left: 10px;
        width: 118px;
        height: 68px;
        border: 1px solid #e9e8e8;
    }
    .allbrand .brand a em {
        overflow: hidden;
        display: none;
        position: absolute;
        top: 36px;
        left: 10px;
        width: 118px;
        height: 0;
        border: 1px solid #e9e8e8;
        background: #999;
        opacity: 0.5;
        cursor: pointer;
    }
    </style>
</head>
<body>
    <div class="allbrand">
        <div class="brand">
            <a href=""><img alt="兔子" src="http://img.h5course.cn/codepen/2017.01.05.01.jpg" /></a>
            <a href=""><img alt="鸚鵡" src="http://img.h5course.cn/codepen/2017.01.05.02.jpg" /></a>
            <a href=""><img alt="萌熊" src="http://img.h5course.cn/codepen/2017.01.05.03.jpg" /></a>
            <a href=""><img alt="蝴蝶" src="http://img.h5course.cn/codepen/2017.01.05.04.jpg" /></a>
            <a href=""><img alt="HTML5學堂(碼匠)" src="http://img.h5course.cn/codepen/2017.01.05.05.jpg" /></a>
            <a href=""><img alt="狗狗" src="http://img.h5course.cn/codepen/2017.01.05.06.jpg" /></a>
            <a href=""><img alt="樹蛙" src="http://img.h5course.cn/codepen/2017.01.05.07.jpg" /></a>
            <a href=""><img alt="蜂鳥" src="http://img.h5course.cn/codepen/2017.01.05.08.jpg" /></a>
            <a href=""><img alt="灰鴨子" src="http://img.h5course.cn/codepen/2017.01.05.09.jpg" /></a>
        </div>
    </div>
    <script type="text/javascript">
        //翻轉
        function brandAnimate(label) {
            if(label.find('.brand em').length != 0) {
                return false;
            }
            // 對每個a標籤內部動態新增一個em標籤,並使其內容為img的alt屬性內容
            label.find('.brand a').each(function() {
                $(this).append('<em>' + $(this).find('img').attr('alt') + '</em>');
            });
            label.find('.brand a').hover(function() {
                // 滑鼠移入img標籤動畫變小
                $(this).find('img').stop().animate({
                    'height': 0,
                    'top': '35px'
                }, 200, function() {
                    // em標籤出現
                    $(this).hide().next().show();
                    // em標籤動畫變大
                    $(this).next().animate({
                        'height': '70px',
                        'top': 0
                    }, 200);
                });
            }, function() {
                // 滑鼠移出em標籤動畫變小
                $(this).find('em').animate({
                    'height': 0,
                    'top': '35px'
                }, 200, function() {
                    // img標籤出現
                    $(this).hide().prev().show();
                    // img動畫變大
                    $(this).prev().animate({
                        'height': '70px',
                        'top': '0'
                    }, 200);
                });
            });
        }
        brandAnimate($('.allbrand'));
    </script>
</body>
</html>

總結

圖片翻轉效果使用jQuery的hover方法即可簡單的實現出來。當然除此之外,也還可以藉助CSS3的一些方法來進行實現,大家在學習完此方法之後不妨也去使用CSS3試試。