图片轮播小插件

在手上工作完成之余,自己写了一个jQuery小插件,针对我们现在所用到的图片轮播特效进行一个封装,没事就写写,记录我的前端历程上的点点滴滴。

编写背景:

在web端经常会看到图片滚来滚去的,自己就想一个方式,让前端团队开发这些特效时间更快,效果更好,实现特效的方式更多,可以随意替换图片轮播的方式,兼容各个浏览器,是我的初衷,也是对自己的js编程经验一个积攒,我相信带着兴趣做自己喜欢的事,是工作生活的初衷意义。。。

插件介绍:

本“小插”是基于jQuery上进行开发,对所播放的图片大小做了自适应,现在能做以下几件事,后期会添加更多效果:

1. 设置播放类型(自动或不自动)

2.设置播放间隔时间(以秒为单位)

3.设置播放层的背景色

4.设置操作键方式(带左右滚动按钮或不带,带滚动坐标点或不带)

5.图片轮播的分类:

(1)无任何特效形式,就是页面单纯的切换(noEffect)

(2)图片在滚动的时候带有淡入淡出效果(fade)

(3)图片自下往上滚动(bottom-up)

(4)图片从左往右延伸滚动(cover)

HTML页面调用插件:

代码如下:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        body{margin: 0px 0px 0px 0px;}
        .myslider{height: 400px;}
        ul{list-style: none; margin:0px 0px 0px 0px; padding-left: 0px;}
        ul li{display: none;}
        ul .lishow{display: block;}
        .klm{position: absolute; z-index: 10; top: 420px; left: 50%;}
        .klm .klma{width: 30px; height: 30px; line-height: 30px; border-radius: 5px;  float: left; text-align: center; text-decoration: none; margin-right: 10px; background: skyblue; color: #fff; border: 1px solid #009933;}
        .klm .klmbgOn{background: red; color: #fff; border: 1px solid royalblue;}
        .nav{width: 100px; height: 100px; position: absolute; z-index: 1000; top: 156px; display: none;}
        .nav .navem{width: 45px; height: 70px; display: block;}
        .next{left:10px;}
        .prev{right: 10px;}
        .next .emleft{background: url("images/index-icon.png") -21px -52px; float: left; }
        .next .emleft:hover{background: url("images/index-icon.png") -152px -51px;float: left; }
        .prev .emright{background: url("images/index-icon.png") -59px -52px;float: right; }
        .prev .emright:hover{background: url("images/index-icon.png") -105px -52px;float: right;}
    </style>
</head>
<body>
<div class="myslider">
    <ul class="ulSlider">
        <li class="lishow">
            <img src="images/k1.jpg" />
         </li>
        <li>
            <img src="images/k2.jpg" />
        </li>
        <li>
            <img src="images/k3.jpg" />
        </li>
    </ul>
</div>
<div class="nav next">
    <em class="navem emleft"></em>
</div>
<div class="nav prev">
    <em class="navem emright"></em>
</div>
<div class="klm">
    <a href="#" class="klma klmbgOn">1</a>
    <a href="#" class="klma">2</a>
    <a href="#" class="klma">3</a>
</div>
</body>
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="js/starSlider.js"></script>
<script type="text/javascript">
    $(‘.myslider‘).starSlider({
        width: ‘‘,
        height: ‘‘,
        mode:‘bottom-up‘, //切换类型bottom-up,fade,cover,noEffect
        autoplay: ‘true‘, //自动播放设置
        playtime:‘3000‘,  //间隔秒数
        element:‘li‘, //图片滚动容器设置
        //滚动坐标点设置
        navObject:{
            cla:‘klm‘,
            node:‘a‘
        },
        //滚动点样式设置
        libutton:{
            bgon:‘klmbgOn‘
        },
        //左右按钮设置
        button:{
            left:‘next‘,
            right:‘prev‘
        }

    });
</script>
</html>

主要功能实现在starSlider.js

代码如下:

/**
 * Created by 前端艺术者 on 14-12-01.
 */
(function($){
    $.fn.starSlider = function(option){
        //定义初始化属性,用jquery继承方式把自定义属性封装起来
        var setting = $.extend({
                 mode: "fade", //切换类型bottom-up,fade,cover,noEffect,
                 width: ‘100%‘,
                 height: null,
                 bgcolor: "#FFF",
                 autoplay: "true", //自动播放
                 playtime: 2000, //播放间隔秒数
                 element:null,
                 navObject:{
                    cla:null,
                    node:null
                 },
                 libutton:{
                   bgon:null
                 },
                 button:{
                    left:null,
                    right:null
                 }
             },option);

        //定义每个元素对象
        var sliders = this.find(setting.element);
        //获取每个nav对象
        var navList = $("." + setting.navObject.cla).find(setting.navObject.node);
        //设置滚动区域背景
        this.css(‘background-color‘, setting.bgcolor);
        //获取循环元素的长度
        var _length = sliders.length;
        var _len = _length - 1;

        //记录当前滚动数
        var current = 0;
        var timeStor;
        var imagesList = this.find(‘img‘);
        var imgSize = function(){
            //定义每个图片对象 图片自适应高宽
            imagesList.attr(‘width‘,setting.width == null || setting.width == ‘100%‘ || setting.width == ‘‘ ? document.body.clientWidth : setting.width);
            imagesList.attr(‘height‘,setting.height == null || setting.height == ‘100%‘|| setting.height == ‘‘? document.body.clientHeight : setting.height);
        };
        imgSize();
        window.onresize = function(){
            imgSize();
        }
        //鼠标移动到滚动区域显示左右按钮
        $(this).hover(function(){
            $(‘.‘ + setting.button.left).show();
            $(‘.‘ + setting.button.right).show();
        },function(){
            $(‘.‘ + setting.button.left).hide();
            $(‘.‘ + setting.button.right).hide();
        });

        //启动滚动操作
        var running = function(){
             setMode(current,0,null);
        },
        /*
        * 判断滚动数
        * @a 操作时候传进来的当前滚动数
        * @b 是哪种操作形式 (0,1左右按钮操作值)2,滚动点操作值
        * */
        lengthV = function(a,b){
            //如果b是0表示是程序默认累加滚动
            if(b == 0){
                //如果a值长度大于滚动图片数 则从头开始滚动 赋值为0
                if(a >= _len){
                    return a = 0;
                }else{
                    //如果不是则继续下一张图片滚动
                    return a = a + 1;
                }
            }else{
                //如果b不是0,表示直接返回
                return a;
            }
        },
        //给滚动点加入样式,"@f"是当前滚动点数,只有当前滚动点才加新样式
        navFind = function(f){
            for(var i = 0; i < navList.length; i++){
                if(navList.eq(i).text() -1 == f){
                    navList.eq(i).addClass(setting.libutton.bgon);
                }else{
                    navList.eq(i).removeClass(setting.libutton.bgon);
                }
            }
        },
        //设置滚动方式"@c"指向当前滚动数
        // "@b"传入操作方式0,表示默认滚动 1,表示左右按钮和滚动点操作方式
        // "@f"表示哪个点击操作:0,表示左按钮 1,表示右按钮 2,滚动点
        setMode = function(c,b,f){
            if(setting.mode == "bottom-up"){
                if(b == 1){
                    clickNum(c,b,f);
                }else{
                    $(sliders[c]).slideUp(‘slow‘,function(){
                        $(this).hide();
                    });
                    current = lengthV(c,b);
                    $(sliders[current]).slideDown(‘slow‘,function(){
                        $(this).show();
                    });
                }
                navFind(current);
            }else if(setting.mode == "fade"){
                if(b == 1){
                    clickNum(c,b,f);
                }else{
                    $(sliders[c]).fadeIn(‘slow‘,function(){
                        $(this).hide();
                    });
                    current = lengthV(c,b);
                    $(sliders[current]).fadeIn(‘slow‘,function(){
                        $(this).show();
                    });
                }
                navFind(current);
            }else if(setting.mode == "cover"){
                if(b == 1){
                    clickNum(c,b,f);
                }else{
                    $(sliders[c]).hide({effect: ‘fade‘, duration: 1000});
                    current = lengthV(c,b);
                    $(sliders[current]).show({effect: ‘fade‘, duration: 1000});
                }
                navFind(current);
            }else if(setting.mode == "noEffect"){
                if(b == 1){
                    clickNum(c,b,f);
                }else{
                    $(sliders[c]).hide();
                    current = lengthV(c,b);
                    $(sliders[current]).show();
                }
                navFind(current);
            }
        },
        init = function(){
            //初始设置自动播放
            if (setting.autoplay == "true"){
                timeStor  =  setInterval(running, setting.playtime);
            }
        },
        starhover = function(_this,n){
            //左右按钮和滚动点指向操作 "@_this"是当前对象,jquery方式获取的 "@n"指的是左右按钮一
            $(_this).hover(function(){
                clearInterval(timeStor);
                if(n == 0){
                    $(‘.‘ + setting.button.left).show();
                    $(‘.‘ + setting.button.right).show();
                }
            },function(){
                init();
            });
        },
        clickNum = function(c,b,f){
            current =  lengthV(c,b);
            if(f == 0){
                if(current == _len){
                    $(sliders[0]).hide();
                    $(sliders[_len]).show();
                }else{
                    $(sliders[current + 1]).hide();
                    $(sliders[current]).show();
                }

            }else if(f == 1){
                if(current == 0){
                    $(sliders[_len]).hide();
                    $(sliders[current]).show();
                }else{
                    $(sliders[current - 1]).hide();
                    $(sliders[current]).show();
                }

            }else if(f == 2){
                for(var k = 0; k < _length; k++){
                   if(current == k){
                       $(sliders[k]).show();
                   }else{
                       $(sliders[k]).hide();
                   }
                }
            }
        }
        //初始化加载执行操作
        init();

         //左右按钮点击操作
         $(‘.‘ + setting.button.left).click(function(){
             if(current <= 0){
                    current = _len;
              }else if(current != 0){
                    current = current - 1;
              }
                setMode(current,1,0);
         });
         $(‘.‘ + setting.button.right).click(function(){
              if(current >= _len){
                  current = 0;
              }else{
                    current = current + 1;
              }
                setMode(current,1,1);
          });

          //滚动点点击操作
          $(setting.navObject.node).click(function(){
              var num = $(this).text() - 1;
              navFind(num);
              setMode(num,1,2);
          });

        //鼠标指向滚动点和按钮时,停止滚动
        starhover(‘.‘ + setting.button.left,0);
        starhover(‘.‘ + setting.button.right,0);
        starhover(setting.navObject.node,1);

    }
})(jQuery);

简单的实现了图片轮播的封装。。。

个人的js总结,继续激情的前进着。。。

时间: 2024-10-16 08:39:03

图片轮播小插件的相关文章

【图片轮播特效插件】--- 效果实现

忙了一段时间,终于能好好静下来写这篇博文了,那废话就不多说,直接开始吧. 按照上一篇对于jQuery插件的学习掌握,首先就是搭好一个合适的框架,定好插件中需要用到的属性,给其他使用者留出使用接口: 1 (function($){ 2 //各种默认的属性参数 3 var defaults = { 4 width: 400, 5 height: 200, 6 direction:'left', 7 imgs:[{ 8 src:'p0.jpg', 9 link:'http://www.cnblogs.

图片轮播图插件

闲来无事,自己搞了一个图片轮播的jQuery插件,话不多说,直接上代码咯!!!!! 1.HTML模块的代码很简单.写一个容器就可以了,之后往里面加入图片轮播的效果 <div class="index-banner" id="banner"></div> 2.样式代码 1 .index-banner { 2 position: relative; 3 width:1280px; 4 height: 461px; 5 margin:0 auto;

图片轮播图插件的使用 unslider!!!

1.百度图片轮播图unslider,第一个就会出现jquery unslider轮播图,点击进去,下载网站提供的文件,解压,内部有我们需要使用的各种js,图片等. 2.在自己的eclipse或者intellij idea中搭建一个可以正常运行的web工程 3.在WEB-INF下创建一个jsp文件夹,jsp文件夹下创建一个lunbo.jsp,颜色标记的代码是需要注意的!在WebRoot下创建js和img文件夹,存放js和所需要的图片. 页面的代码: <%@ page language="ja

简易版的图片轮播效果 插件形式

写的不是很完善只实现了效果  先码上 我会慢慢整合改进 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"

【图片轮播特效插件】--- 自学入门

接触jQuery很久了,深深的被其强大的选择器和众多的插件特效所折服,而在实际的项目中为了项目进度,常常都是从网上搜索各种急需的插件. 突然有一天,静静的坐下来,沉淀知识时总是没有太多的惊喜.尤其是提到插件的使用,总是一味的照搬照抄必然得不到成长.避开项目业务中可能会遇到复杂繁琐的项目功能不说,许多简单的功能完全可以自己封装成一个插件,毕竟自己动手产生的乐趣才最有意义. 对于这次jQuery插件的编写,我打算用三篇随笔来完成,尽量总结到方方面面,还希望各位多多拍砖(各位拍砖也是我学习的动力^_^

Javascript和jQuery WordPress 图片轮播插件, 内容滚动插件,前后切换幻灯片形式显示

用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美的图片轮播效果,希望这些插件能够帮助到你.Nivo Slider首先推荐的这款插件号称世界上最棒的图片轮播插件,有独立的 jQuery 插件和 WordPress 插件两个版本.目前下载量已经突破 1,800,000 次!jQuery 独立版本的插件主要有如下特色:? 16个独特的过渡效果? 简洁和有效的标记? 加载参数设置?

12款经典的白富美型—jquery图片轮播插件—前端开发必备

图片轮播是网站中的常用功能,用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美的图片轮播效果,希望这些插件能够帮助到你.Nivo Slider 首先推荐的这款插件号称世界上最棒的图片轮播插件,有独立的 jQuery 插件和 WordPress 插件两个版本. 目前下载量已经突破 1,800,000 次!jQuery 独立版本的插件主要有如下特色: ?  16个独特的过渡效果?

onethink插件二(首页图片轮播)

2014年8月1日 15:34:15 基于slice-box 写了一个图片轮播的插件. 一.功能: 1.图片轮播功能 2.自定义功能(数量,效果,打开方式) 3.多重效果一键切换 4.独立性强,不影响其他代码 二.效果图: 下载地址:http://download.csdn.net/detail/douniwan123654/7704095 onethink插件二(首页图片轮播)

图片轮播插件的设计抽象

提出需求首页的轮播焦点图是个常见的需求.需求是这样子的1 每隔2秒切换一次图片2 切换图片的时候,会对应显示该图片的说明3 切换图片的时候,对应显示图片处于小按钮中的第几个,点击小按钮时跳到对应的大图4 自动滚动图片,鼠标放到图片区域时,停止滚动,移出时继续5 点击左右可以上下切换图片对于做一个图片轮播并不难,按照要求,写代码就行.而如何设计一个通用的图片轮播组件确实需要好好思考.因为样式是不确定的,同时html结构也是不确定的.所以问改如何设计这个轮播js呢? 使用插件?我是反插件的,除非插件