jQuery实现视差滚动轮播代码解析之 HTML+CSS

系列

jQuery实现视差滚动轮播代码解析之 JavaScript

一、前言

本篇文章需要有一定的HTML+CSS基础,以及掌握JS基本语法。以这个作为web前端入门学习的很好的一个项目为切入点,逐行地分析每一段代码,并分享我目前掌握的web前端的些许心得,供大家共同探讨。对于web前端,目前我也是入门级别,若您对本篇文章内容有任何疑问或建议,望及时提出,谢谢!!!

二、项目效果

效果图

三、分析需求

针对上面的项目效果图,我们做一下全面的需求分析。
首先,此页面可以大致分为两个部分,即标题部分轮播部分

  1. 标题部分很简单,可以使用一个块级标签h1标签即可。
  2. 轮播部分内容比较丰富多变,我们逐次进行分解解析:
  • 最底层的是背景模块
  • 在页面图片加载完成前,会在背景模块上有个加载框模块
  • 与加载框的同级模块(一个隐藏,另一个现实),及轮播的主题内容模块又可分为下面3个部分:
    轮播大图部分、前置后置引导、缩略图部分

四、HTML代码搭建与CSS样式实现

注:具体代码说明,请阅读代码注释。

1. 首先先将最外层两大基本模块,搭建出来。HTML代码如下:
<!--上部分-->
<div class="title">
        <h1>jQuery实现个性轮播图</h1>
</div>
<!--上部分结束-->
<!--轮播部分-->
<div id="banner">
</div>
<!--轮播部分结束-->

根据其对应的选择器,设置两大模块css样式。CSS代码如下:

/*common 设置项目中全局标签样式*/
*{
    margin: 0px;
    padding: 0px;
}

h1{
    font-size: 56px;
    color: #ccc;
}

.title{
    /*设置文本内容居中*/
    text-align: center;
    /*设置标签上下间距,并左右居中显示*/
    margin: 100px auto 20px;
}

/*banner*/
#banner{
    /*宽度为占满屏幕*/
    width: 100%;
    height: 420px;
    /*顶部边框样式*/
    border-top: 7px solid yellow;
    /*底部边框样式*/
    border-bottom: 7px solid yellow;
    /*上下、左右的阴影设置*/
    box-shadow: 0px 0px 7px black;
   /*因为轮播部分内容丰富,所以设置其子标签绝对定位*/ 
    position: relative;
    /*设置轮播部分超出部分进行裁剪,不进行滚动显示*/
    overflow-x: hidden;
}
2. 轮播部分之背景模块

其背景模块,是由一个背景框,里面包含三张背景图片组成。HTML代码如下:

<!--轮播部分-->
<div id="banner">
        <!--bannerBg-->
        <div class="bannerBg">
            <div class="bannerBg01"></div>
            <div class="bannerBg02"></div>
            <div class="bannerBg03"></div>
        </div>
        <!--bannerBg结束-->
...

背景模块CSS代码如下:

/*bannerBg*/
.bannerBg{
    /*背景模块边框图片*/
    background: url("../images/bg.png") repeat;
}

.bannerBg div{
    /*背景模块里的图片使用绝对定位*/
    position:absolute;
    /*绝对定位top,left*/
    top:0px;
    left:0px;
    /*设置宽高,高度与轮播部分一致*/
    width:100%;
    height:420px;
}

.bannerBg01{
    /*背景模块里第一张图片资源*/
    background: url("../images/bg1.png");
}

.bannerBg02{
     /*背景模块里第二张图片资源*/
    background: url("../images/bg2.png");
}

.bannerBg03{
     /*背景模块里第三张图片资源*/
    background: url("../images/bg3.png");
}
/*bannerBg结束*/
3. 轮播部分之加载框模块

效果图上没有展示出加载框,因为图片都已经加载完成。下面我截取一张加载框图片样式如下:


image.png

比较简单,我们有很多种实现方案,下面为最简洁的一种。直接就一个div标签,转动的圈圈可以设为其background,结合使用精灵图定位的方法设置其位置,文字即为div标签的内容。
HTML代码如下:

...
<!--bannerBg结束-->
<div class="banner_loading">加载图片中...</div>
...

CSS代码如下:

/*loading*/
.banner_loading{
    /*设置标签内容文字颜色*/
    color: #FFFFFF;
    /*设置标签内容文字大小*/
    font-size: 20px;
    /*设置标签内容上下左右内边距,因左边有转圈图,所以我们给左边预留50px间距*/
    padding: 15px 15px 15px 50px;
    /*设置标签背景,并使用精灵图定位。左边距离10px,上下50%居中*/
    background: url("../images/ajax-loader.gif") no-repeat 10px 50%;
    /*设置加载框标签宽度*/
    width: 180px;
   /*使用绝对定位,并设置其距离相对定位标签的top,left值*/
    position: absolute;
    top: 150px;
    left: 50%;
    /*调整其左间距,配合其宽度。使加载框左右居中*/
    margin-left: -90px;
}
/*loading结束*/
4. 轮播部分之轮播主体模块

轮播主体在需求分析时,已经划分了三个子模块:

  • 轮播大图模块,其有多个图片组成,所以很适合使用无序ul标签。HTML代码如下:
<!--轮播主体模块-->
<div class="banner_content">
       <!--轮播大图模块-->
       <ul class="banner_images">
                <li><img src="images/1.jpg" alt="第一张图片"></li>
                <li><img src="images/2.jpg" alt="第二张图片"></li>
                <li><img src="images/3.jpg" alt="第三张图片"></li>
                <li><img src="images/4.jpg" alt="第四张图片"></li>
                <li><img src="images/5.jpg" alt="第五张图片"></li>
                <li><img src="images/6.jpg" alt="第六张图片"></li>
        </ul>
        <!--轮播大图模块结束-->
        ...
</div>
<!--轮播主体模块结束-->

CSS代码:

/*轮播主体模块*/
.banner_content{
    /*图片加载完成前,先显示加载框,所以先将轮播主体隐藏*/
    display: none;
}

.banner_content ul{
    /*设置轮播大图ul标签样式*/
    list-style: none;
    /*这里设置绝对定位,为以后点击前置后置滚动,刷新其left值做基础*/
    position: absolute;
}

ul.banner_images li{
    /*设置li标签左浮动,将块级li标签变成行内块级*/
    float: left;
    /*设置行内块级li标签高度*/
    height: 420px;
}

ul.banner_images li img{
    /*将img标签由行内块级标签变成块级标签,这样通过外间距可设置其相对于父标签水平居中*/
    display: block;
    margin: 30px auto 0px;
    /*设置其阴影样式*/
    box-shadow: 0px 0px 7px #222;
    /*设置边框样式,transparent为透明色*/
    border: 8px solid transparent;
    /*设置圆角*/
    border-radius: 4px;
}
  • 轮播前置后置引导
    前置后置引导即两个左右箭头,点击可对图片进行轮播转换。HTML代码如下:
...
<!--轮播大图模块结束-->
<!--前置后置引导模块-->
<div class="bannerGuide">
        <span class="bannerGuide_last"></span>
        <span class="bannerGuide_next"></span>
</div>
<!--前置后置引导模块结束-->
...

CSS代码如下:

.bannerGuide span{
    /*设置前置后置为绝对定位,并赋值top值*/
    position: absolute;
    top: 145px;
    /*设置绝对定位后,行内标签span变为行内块级标签,所以要设置其width,height*/
    width: 30px;
    height: 60px;
    /*设置阴影样式*/
    box-shadow: 0px 0px 7px yellow;
    /*设置其透明度*/
    /*opacity: 0.6;*/
    /*设置圆角*/
    border-radius: 4px;
    /*光标为一只手的样式*/
    cursor:pointer;
}

.bannerGuide span:hover{
    /*设置前置后置伪类样式,更改透明度*/
    opacity: 0.9;
}

.bannerGuide span.bannerGuide_last{
    /*对应设置前置背景图片,并将其背景颜色设为黑色*/
    background: #000 url("../images/prev.png") no-repeat center center;
}

.bannerGuide span.bannerGuide_next{
    /*对应设置后置背景图片,并将其背景颜色设为黑色*/
    background: #000 url("../images/next.png") no-repeat center center;
}
  • 轮播缩略图模块。其和轮播大图一样,是多个图片的集合。区别是样式不同,且拥有点击时间
...
<!--轮播前置后置模块结束-->
<!--轮播缩略图模块-->
<ul class="banner_thumbnails">
        <li><img src="images/thumbs/1.jpg" alt="第一张图片"></li>
        <li><img src="images/thumbs/2.jpg" alt="第二张图片"></li>
        <li><img src="images/thumbs/3.jpg" alt="第三张图片"></li>
        <li><img src="images/thumbs/4.jpg" alt="第四张图片"></li>
        <li><img src="images/thumbs/5.jpg" alt="第五张图片"></li>
        <li><img src="images/thumbs/6.jpg" alt="第六张图片"></li
</ul>
<!--轮播缩略图模块结束-->
...

CSS代码如下:

ul.banner_thumbnails{
    /*设置缩略图无序ul标签为绝对定位,并设置top,left值*/
    position: absolute;
    top: 320px;
    left: 50%;
    /*设置其高度*/
    height: 35px;
}

ul.banner_thumbnails li{
    /*设置li标签为绝对定位,为以后js设置每个li标签的left做基础*/
    position: absolute;
}

ul.banner_thumbnails li img{
    /*设置缩略图片的边框样式*/
    border: 5px solid #FFFFFF;
    /*设置缩略图片的阴影样式*/
    box-shadow: 0px 0px 7px red;
    /*光标为一只手的样式*/
    cursor: pointer;
    /*设置透明度*/
    opacity: 0.7;
}

ul.banner_thumbnails li.selected img{
    /*设置li标签为selected类选择器时透明度值,方便以后js可以重置selected标签*/
    opacity: 0.9;
}

五、分析HTML+CSS完成的进度与JS要完成的使命

坐完上面的需求,HTML+CSS大致已经完成了其使命。接下来其不能实现的逻辑需要JS完成了。
那么JS需要完成哪些功能呢,我们先分析一下。

  • 图片加载完成后,隐藏加载框,显示轮播模块。
  • 目前轮播大图容器ul标签下的li标签为左浮动,且设置了其高度。但是需求是每个li标签都是在同一水平线上的,这样才能实现水平动画滚动效果。所以我们要使用js根据图片数据,重新计算ul标签的宽度。
    因为ul的父标签设置了overflow-x为hidden,所以不用担心ul超出屏幕宽度能够水平滚动
  • 目前缩略图容器ul标签下的li标签为绝对定位,但是并没有设置其定位值,所以目前默认的缩略图应该是重叠的。所以我们要利用js根据缩略图数量,计算其绝对定位置。
  • 缩略图片有个随机的角度偏移。
  • 点击前置后置后,动画切换大图,并更改缩略图选择样式。
  • 点击缩略图,动画切换大图,并更改缩略图选择样式。
  • 光标放到缩略图与离开缩略图有个动画效果。
    以上七点就是分析出来的JS要完成的事情,下一章我们使用jQuery框架对这七点如何实现,逐一进行讲解。敬请期待

对了,忘了最重要的~这是Demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342