前端特效开发 | 点击查看大图相册效果

HTML5学堂(码匠):图片的展示是一个网站中最吸引人的区域,除了图片本身的内容精彩以外,常常还会有各种各样的展示形式。而对于前端开发来说,一个精美的图片展示效果也往往是需要花费很多时间来构思的,所以希望今天的缩略图相册展示对正在开发中的你会有所帮助~

本文主要内容

1. 效果展示

2. 实现的原理分析

3. 案例实现

1. 效果展示

如上的效果中,作为用户,你可以通过悬停鼠标在相应的缩略图上,即可查看到相应的缩略图位置动画效果,这也是对于用户选择的一种提醒。然后通过点击相应的缩略图,左侧的大图区域即可切换出与缩略图一致的大图展示效果,以获取对应的图片照看状态。通过查看效果,对于它的实现我们又该如何操作呢?一起来分析下吧~~~

2. 实现的原理分析

2.1 结构与样式搭建

结构的搭建看起来很简单,总共分为左侧大图展示与右侧缩略图展示两个区域。但是实际书写时配合上一个合适的背景、阴影之后,用到的结构就相对多了一些层级。而针对样式的书写,大体上只需要保证图片的大小与外层容器的大小一致即可。因为后面为了实现预载的形式,所以在使用图片时存储了两张,一张用来展示缩略图,一张用来获取其地址,然后再切换时把地址参数传给左侧的大图区域。

2.2 功能逻辑分析

首先让左侧的大图区域展示一个初始化图片,即直接传递一张图片来使用;

然后借助JQ的hover为右侧的缩略图添加鼠标悬停时的动画提示状态;

最后实现点击图片切换与大图展示的功能,同时对图片的展示做加载处理。

3. 案例实现

3.1 图片的加载

在结构的搭建中,右侧缩略图区域存储了两张一样的图片,一张用以缩略图展示,而另外一张即是用来做预载处理。此时借助在页面载入的时候获取其图片地址,然后通过实例化img设置相应的图片地址,最后以这个图片地址对应的图片为左侧大图区域设置背景,从而展示出相册展示的效果。具体的代码如下:

var default_image = "http://img.h5course.cn/codepen/2017.01.19.01.jpg";
/*加载默认图像*/
loadPhoto(default_image);
function loadPhoto(url) {
    /*图像预加载*/
    var img = new Image();
    $(img).attr({ "src": url });
    $("#largephoto").css({
        "background-image": 'url("' + url + '")'
    });
}

3.2 实现悬停时缩略图提示

实现缩略图在鼠标悬停时的效果是借助了JQ的hover函数,为用户在鼠标移入的时候,实现缩略图标的位置变化,以及变化透明蒙版层的背景定位,实现闪动效果,值得注意的一点是,在实现闪动时需要对这个闪动动画做清动画的处理(如下代码中)。在用户鼠标移开时,让缩略图回到初始位置。其具体效果代码如下所示:

/* 当鼠标悬停在缩略图上时*/
$(".thumb-container").hover(function() {
    $(this).find(".large-thumb").stop().animate({
        "marginLeft": "-7px",
        "marginTop": "-7px"
    }, 200);
    $(this).find(".large-thumb-shine").stop();
    $(this).find(".large-thumb-shine").css({
        "background-position-x": "-100px"
    });
    $(this).find(".large-thumb-shine").animate({
        "background-position-x": "100px"
    }, 700);
}, function() {
    $(this).find(".large-thumb").stop().animate({
        "marginLeft": "0px",
        "marginTop": "0px"
    },200);
});

3.3 缩略图对应的大图展示

实现图片相册的核心功能就在于用户点击相应的缩略图,然后在大图的区域展示对应的图片。此时只需要获取到在缩略图结构中存放的第二张图片的地址,然后调用图片载入函数loadPhoto(),对其传入相应的图片地址,为左侧的大图区域设置背景图即可。这样一个简单的缩略图相册查看功能即可实现,具体功能代码如下:

/* 单击缩略图时*/
$(".thumb-container").click(function() {
    var handler = $(this).find(".large-image");
    var newsrc = handler.attr("src");
    loadPhoto(newsrc);


});

3.4 成品代码

<div id="container">
    <!-- 左侧大图展示区域 -->
    <div id="largephoto">
        <div id="largetrans"></div>
    </div>
    <!-- 右侧缩略图区域 -->
    <div class="thumbnails">
        <h2>缩略图相册展示</h2>
        <!-- 缩略图1展示的开始-->
        <div class="thumbnailimage">
            <div class="thumb-container">
                <div class="large-thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (26).jpg" class="large-thumb-image" alt="thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (26).jpg" class="large-image">
                    <div class="large-thumb-border"></div>
                    <div class="large-thumb-shine"></div>
                </div>
            </div>
        </div>
        <!-- 缩略图2展示的开始-->
        <div class="thumbnailimage">
            <div class="thumb-container">
                <div class="large-thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (73).jpg" class="large-thumb-image" alt="thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (73).jpg" class="large-image"/>
                    <div class="large-thumb-border"></div>
                    <div class="large-thumb-shine"></div>
                </div>
            </div>
        </div>
        <!-- 缩略图3展示的开始-->
        <div class="thumbnailimage">
            <div class="thumb-container">
                <div class="large-thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (102).jpg" class="large-thumb-image" alt="thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (102).jpg" class="large-image"/>
                    <div class="large-thumb-border"></div>
                    <div class="large-thumb-shine"></div>
                </div>
            </div>
        </div>
        <!-- 缩略图4展示的开始-->
        <div class="thumbnailimage">
            <div class="thumb-container">
                <div class="large-thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (44).jpg" class="large-thumb-image" alt="thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (44).jpg" class="large-image"/>
                    <div class="large-thumb-border"></div>
                    <div class="large-thumb-shine"></div>
                </div>
            </div>
        </div>
        <!-- 缩略图5展示的开始-->
        <div class="thumbnailimage">
            <div class="thumb-container">
                <div class="large-thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (57).jpg" class="large-thumb-image" alt="thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (57).jpg" class="large-image">
                    <div class="large-thumb-border"></div>
                    <div class="large-thumb-shine"></div>
                </div>
            </div>
        </div>
        <!-- 缩略图6展示的开始-->
        <div class="thumbnailimage">
            <div class="thumb-container">
                <div class="large-thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (61).jpg" class="large-thumb-image" alt="thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (61).jpg" class="large-image"/>
                    <div class="large-thumb-border"></div>
                    <div class="large-thumb-shine"></div>
                </div>
            </div>
        </div>
        <!-- 缩略图7展示的开始-->
        <div class="thumbnailimage">
            <div class="thumb-container">
                <div class="large-thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (81).jpg" class="large-thumb-image" alt="thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (81).jpg" class="large-image"/>
                    <div class="large-thumb-border"></div>
                    <div class="large-thumb-shine"></div>
                </div>
            </div>
        </div>
        <!-- 缩略图8展示的开始-->
        <div class="thumbnailimage">
            <div class="thumb-container">
                <div class="large-thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (100).jpg" class="large-thumb-image" alt="thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (100).jpg" class="large-image" />
                    <div class="large-thumb-border"></div>
                    <div class="large-thumb-shine"></div>
                </div>
            </div>
        </div>
        <!-- 缩略图9展示的开始-->
        <div class="thumbnailimage">
            <div class="thumb-container">
                <div class="large-thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (118).jpg" class="large-thumb-image" alt="thumb">
                    <img src="http://img.h5course.cn/codepen/HTML5学堂(码匠)-素材图 (118).jpg" class="large-image" />
                    <div class="large-thumb-border"></div>
                    <div class="large-thumb-shine"></div>
                </div>
            </div>
        </div>
    </div>
</div>
<script type="text/javascript">
    $(document).ready(function() {
        /*相册使用的欢迎图片*/
        var default_image = "http://img.h5course.cn/codepen/2017.01.19.01.jpg";
        /*加载默认图像*/
        loadPhoto(default_image);
        function loadPhoto(url) {
            /*图像预加载*/
            var img = new Image();
            $(img).attr({ "src": url });
            $("#largephoto").css({
                "background-image": 'url("' + url + '")'
            });
        }
        /* 单击缩略图时*/
        $(".thumb-container").click(function() {
            var handler = $(this).find(".large-image");
            var newsrc = handler.attr("src");
            loadPhoto(newsrc);


        });


        /* 当鼠标悬停在缩略图上时*/
        $(".thumb-container").hover(function() {
            $(this).find(".large-thumb").stop().animate({
                "marginLeft": "-7px",
                "marginTop": "-7px"
            }, 200);
            $(this).find(".large-thumb-shine").stop();
            $(this).find(".large-thumb-shine").css({
                "background-position-x": "-100px"
            });
            $(this).find(".large-thumb-shine").animate({
                "background-position-x": "100px"
            }, 700);
        }, function() {
            $(this).find(".large-thumb").stop().animate({
                "marginLeft": "0px",
                "marginTop": "0px"
            },200);
        });
    });
</script>

总结

如上,大图相册查看效果已完成,其主要功能就是为了实现大图片的展示功能,来满足用户对于图片的更细致体验。而作为前端开发者,掌握各种图片的展示方式,会为开发提升不少的效率,所以大家如果还有更新颖的、精美的展示方式也可以与小编一起分享。

由于篇幅过长,所以部分效果的样式大家可以在http://codepen.io/majiang/pen/zNoeZX 查看

原文发布于微信公众号 - HTML5学堂(h5course-com)

原文发表时间:2017-01-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Create Sun

highcharts 系统梳理笔记

前言    highcharts最早接触它是在4年前,后来项目中很少用到图表这些东西,就算有也是用echart。他们思路都一样自己去官网上看api即可,构造数据...

4316
来自专栏WindCoder

Ps中懵懂斋老师的抽线方法

首先,打开要抽线的图片(Ctrl+O),复制图层(Ctrl+J)。抽线效果一般不需要保留色彩。使用图像>调整>去色(Shift+Ctrl+U),然后再复制一个图...

1111
来自专栏非著名程序员

Android自定义View之高仿QQ健康

? 我们都知道自定义View一般有三种直接继承View、继承原有的控件对控件的进行修改、重新拼装组合,最后一种主要针对于ViewGroup。具体的怎么做不是本...

1955
来自专栏林德熙的博客

wpf VisualBrush 已知问题

本文告诉大家,visualBrush 已知 bug ,希望大家使用 VisualBrush 时可以知道

1561
来自专栏jojo的技术小屋

原 荐 CSS3 transform 引起z

1784
来自专栏用户画像

H5新增的行内的语义元素

mark元素主要用来在视觉上向用户呈现那些需要突出显示或高亮显示的文字,其比较典型的应用就是在搜索结果中高亮显示搜索关键词。

922
来自专栏前端菜鸟变老鸟

Sprite 从PS切图到具体实现完整过程

811
来自专栏mySoul

SVG基础知识 Adobe Illustrator绘制SVG

此外还有阴影渐变,等滤镜,等就太复杂了,设计到矩阵变换等高等数学的内容,自己有心无力。

1125
来自专栏数据小魔方

Xcelsius(水晶仪表)系列11——选择器高级用法(页面级切换工具)

今天继续跟大家分享关于水晶仪表系列选择器高级用法——页面级切换工具。 之前讲过很多关于菜单选择器的用法, 但是那些基本都是基于单个部件及统计图之间的切换,今天这...

2664
来自专栏韩伟的专栏

Unity2D手册翻译(三)

Sprite Editor 有时候一个Sprite纹理只包含一个图形原素,但是把多个相关的图形一起合并到一个图片中会更方便。例如,这个图片可能包含某一个角色的多...

3364

扫码关注云+社区