jQuery实现常见的轮播图效果

1.在网页中常见的一类轮播图如下图所示,

此处以小米官网(www.mi.com)为例进行说明

                

说明:红色箭头标注的是左、右箭头;右下角蓝色箭头标注的是可以控制图片播放顺序的小圆点;

2.轮播图的特点

    a. 能够进行左右方向的切换,即点击左箭头表示切换到上一张,点击向右箭头表示切换到下一张;

    b. 点击左右翻页时,对应的小圆点要能够进行联动,即小圆点的选中状态要跟着切换;

    c. 当在第一张图片上点击向左按钮时,会切换到尾页,同理,尾页单击向右箭头时能切换到首页;

    d. 点击对应的小圆点能够切换到对应的页面;

    e. 当没有点击箭头或者小圆点时,图片要自动轮播;

    f. 在图片自动轮播过程中,要屏蔽其他操作(箭头或小圆点等);

    g. 当鼠标滑动到图片区域时,图片停止自动轮播,当鼠标移开时,又开始自动轮播;

3.实现轮播图的一般思路

    

      有一个轮播图的容器,图片浮动成一排排列,单击切换时,实际上就是改变子元素的浮动位置即可

      此处作为演示的代码如下: 

        html部分:

            <div class='slider'>
                <div class="slider-img-wrapper">
                   <a href="" class="item"><img src="./image/slide-4.jpg" /></a>
                   <a href="" class="item"><img src="./image/slide-1.jpg" /></a>
                   <a href="" class="item"><img src="./image/slide-2.png" /></a>
                   <a href="" class="item"><img src="./image/slide-3.jpg" /></a>
                </div>
                <div class="slider-arrow">
                    <a href="#0" class="item left">
                        <i class="iconfont">&#xe6a0;</i>                        
                    </a>
                    <a href="#1" class="item right">
                        <i class="iconfont">&#xe66c;</i>
                    </a>
                </div>
                <div class="slider-process">
                    <ul>
                        <li class="item focus"></li>
                        <li class="item"></li>
                        <li class="item"></li>
                        <li class="item"></li>
                    </ul>
                </div>
            </div

说明: 

        class='slider' 表示最外层的容器,即轮播图中展示图片的容器;

        class='slider-img-wrapper'  表示所有图片排成一横排的容器;

        class='slider-arrow'  表示向左和向右的箭头,即是箭头的父元素;(此处的箭头使用的是iconfont.cn中的图标,也可以使用图片来代替)

        class='slide-process'  表示切换图片显示的小圆点;(此处小圆点的个数要与图片的数量保持一致)

        css部分:

/*slide区域布局开始*/
.middle_top .slider{
    float: left;
    overflow: hidden;
    position: relative;
    width:545px;
    height: 413px;
    margin-top: 7px;
    display: inline-block;
}

.slider-img-wrapper{
	width: 2180px;
    height: 414px;
}

.slider-img-wrapper a{
	display: inline-block;
	width: 545px;
	height: 413px;
}

.slider-img-wrapper .item{
    float: left;
    position: relative;
}

.slider-arrow{
	overflow: hidden;
	position: absolute;
	width: 545px;
	height: 40px;
	top: 50%;
	margin-top: -20px;
}

.slider-arrow .item{
	display: inline-block;
	width: 40px;
	height: 40px;
	text-decoration: none;
	line-height: 40px;
	color: rgba(255, 255, 255, .2);
	box-sizing: border-box;
}

.slider-arrow .item:hover{
	color: #222;
}

.slider-arrow .item i{
	font-size: 30px;
}

.slider-arrow .left{
	float: left;
	margin-left: 10px;
}

.slider-arrow .right{
	float: right;
	margin-right: 10px;
}

.slider-arrow .right i{
	float: right;
}

.slider-process{
	position: absolute;
	bottom: 0;
	width: 544px;
	height: 20px;
}

.slider-process ul{
	display: block;
	width: 90px;
	height: 14px;
	margin-left: 252px;
	margin-top: 2px;
}

.slider-process ul li{
	float: left;
	margin-right: 6px;
	width: 12px;
	height: 12px;
 	border: .5px solid #eee;
	border-radius: 50%;
	cursor: pointer;
}

.slider-process ul li:hover{
    background: #098;
}

.focus{
	background: #089;
}
/*slide区域布局结束*/

说明: 此处css样式代码可以结合自身喜好来设置,此处仅作参考~

4.jQuery代码的设计

    我们可以考虑编写一个插件来实现对特定区域的轮播图效果;

    不妨设置插件名为:UiSlider

     当我们要使 class=‘slider’ 的元素呈现出轮播图的效果时,我们可以使用如下方法调用该插件:

$(function(){
    /*对class='slider'的元素调用UiSlider方法*/
	$('.slider').UiSlider();
})

    对UiSlider插件的编写:

       1.首先获取所有特定的元素(箭头、图片、图片容器、小圆点)

$.fn.UiSlider  =function(){
	var ui = $(this);
	//获取图片的直接父元素
	var wrap = $('.slider-img-wrapper .item');

	//选中slider中的图片元素
	var items = $('.slider-img-wrapper .item',ui);

	//选中slider中的向左和向右箭头
	var btn_prev = $('.slider-arrow .left',ui);
	var btn_next = $('.slider-arrow .right',ui);

	//图片中的小圆点
	var tips = $('.slider-process ul .item',ui);
}

      2.为箭头和小圆点绑定事件:

    //向左向右的点击事件
	btn_prev.on('click', function(){
		wrap.triggerHandler('move_prev');
	});
	btn_next.on('click', function(){
		wrap.triggerHandler('move_next');
	})

	//小圆点定义事件
	tips.on('click', function(){
		var index = $(this).index();
		wrap.triggerHandler('move_to', index);		
	});

     3.具体的操作流程:

	//预定义
	var current = 0;
	var size = items.length;
	var width = items.eq(0).width();

	//设置自动滚动参数
	var autoPlay = true;

	ui
	.on('mouseover', function(){
        //鼠标移入图片中时停止轮播
		autoPlay = false;
	})
	.on('mouseout', function(){
        //鼠标移出图片区域时进行自动轮播
		autoPlay = true;
	})

	//具体操作
	wrap
	.on('move_prev', function(){
		if(current <= 0){
            //如果在第一张图片上单击向左箭头时,切换到最后一张
			current = size;
		}
		current--;
		wrap.triggerHandler('move_to', current);
	})
	.on('move_next', function(){
		if(current >= (size-1)){
            //在最后一张图片上单击向右箭头时,自动切换回第一张图片
			current = -1;
		}
		current++;
		wrap.triggerHandler('move_to', current);
	})
	.on('move_to', function(evt, index){
		wrap.css('left', index*width*-1);
        //跳转到对应页面时,对应的小圆点处于选中状态
		tips.removeClass('focus').eq(index).addClass('focus');
	})
	.on('auto_move', function(){
		setInterval(function(){
            //只有当autoPlay为真时,才进行自动轮播
			autoPlay && wrap.triggerHandler('move_next')
		}, 2000);
	})
	.triggerHandler('auto_move')

    结束语:此轮播图未设置无缝切换,若有该需求,请参考其他技术文章

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值