自制jQuery焦点图切换简易插件

首页经常是需要一个焦点图切换的效果,最近做的项目也正好需要,所以在网上搜索,后面查到了一个半成品的插件,这里我自己修改了一下。

js文件夹下面有两个文件夹jquery.jslide.js与jquery.jslides.js,前面一个是我改写的,第二个是原作者的文件。下图是效果图:

一、静态效果

<div class="slide_wrap">
    <ul id="slides2" class="slide">
        <li style="background:url(‘images/01.jpg‘) no-repeat center top"><a href="http://www.cnblogs.com/strick/" target="_blank">pwstrick1</a></li>
        <li style="background:url(‘images/02.jpg‘) no-repeat center top"><a href="http://www.cnblogs.com/strick/" target="_blank">pwstrick2</a></li>
        <li style="background:url(‘images/03.jpg‘) no-repeat center top"><a href="http://www.cnblogs.com/strick/" target="_blank">pwstrick3</a></li>
        <li style="background:url(‘images/04.jpg‘) no-repeat center top"><a href="http://www.cnblogs.com/strick/" target="_blank">pwstrick4</a></li>
    </ul>
</div>

1.现在比较流行宽屏的焦点图切换,以前标签都是用img来显示图片的,现在得换成background做背景图,这样就不会出现横向滚动条啦。

2.最外面套个slide_wrap用来做限制里面图片的绝对定位

3.ul中的class原先我是在插件初始化的时候添加上去的,现在我预先就加上了,显示效果比后面添加要好一点,大家可以在改写插件的时候做修改

.slide_wrap {width:100%;height:400px;position:relative}
.slide_wrap .slide { display:block; width:100%; height:400px; list-style:none; padding:0; margin:0; position:relative;}
.slide_wrap .slide li { display:block; width:100%; height:100%; list-style:none; padding:0; margin:0; position:absolute;}
.slide_wrap .slide li a { display:block; width:100%; height:100%; text-indent:-9999px;}
.slide_wrap .pagination { display:block; list-style:none; position:absolute; left:50%; top:340px; z-index:9900;padding:5px 15px 5px 0; margin:0}
.slide_wrap .pagination li { display:block; list-style:none; width:10px; height:10px; float:left;margin-left:15px; border-radius:5px; background:#FFF }
.slide_wrap .pagination li a { display:block; width:100%; height:100%; padding:0; margin:0;  text-indent:-9999px;outline:0}
.slide_wrap .pagination li.current { background:#0092CE}

1、slide_wrap与slide中的height属性可以根据实际情况修改

2、pagination是图中的按钮样式,用来控制显示第几张图,也是绝对定位left与top可以根据实际情况修改

3、样式中的各个颜色也可以根据想要的效果做个性化修改

4、上面的样式写的有点啰嗦,在嵌入自己的项目中,可以适当精简

二、调用方式

<script type="text/javascript">
    $(‘#slides2‘).jslide();
</script>

1、将ul设置成焦点图插件

2、下面的各个操作都将围绕着ul转

三、jQuery插件通用格式

;(function (factory) {
    ‘use strict‘;
    // Register as an AMD module, compatible with script loaders like RequireJS.
    if (typeof define === ‘function‘ && define.amd) {
        define([‘jquery‘], factory);
    }
    else {
        factory(jQuery);
    }
}(function ($, undefined) {
    ‘use strict‘;

   //中间插件代码

    $.fn.jslide = function (method) {
        return _init.apply(this, arguments);
    };
}));

1、第一个分号是为了防止在与其他代码压缩到一起的时候合在一行中,这样会出现语法错误。例如var i=0(function(factory){......}(..);

2、‘use strict‘是开启严格模式,使Javascript解释器可以用"严格"的语法来解析代码,以帮助开发人员发现错误

3、如果使用了requirejs模块载入框架,define([‘jquery‘], factory)这句就是让插件支持AMD规范

4、function ($, undefined) 这里面的undefined是为了防止在引入其他js文件的时候,使用被重写了的undefined

5、_init是用于初始化效果

四、插件初始化

  var defaults = {
        speed : 3000,
        pageCss : ‘pagination‘,
        auto: true //自动切换
    };

    var nowImage = 0;//现在是哪张图片
    var pause = false;//暂停
    var autoMethod;
  /**
     * @method private
     * @name _init
     * @description Initializes plugin
     * @param opts [object] "Initialization options"
     */
    function _init(opts) {
        opts = $.extend({}, defaults, opts || {});
        // Apply to each element
        var $items = $(this);
        for (var i = 0, count = $items.length; i < count; i++) {
            _build($items.eq(i), opts);
        }
        return $items;
    }

1、defaults是暴露出来的自定义参数,这里我就写了三个自动切换的速度、选择按钮样式、是否自动化

2、三个全局参数,nowImage是当前显示图片的序号、pause是控制图片是切换还是暂停,autoMethod是定时函数的编号

3、_init中有合并自定义参数,调用_build做创建操作

五、创建插件各个操作

     /**
     * @method private
     * @name _getSlides
     * @description 获取幻灯片对象
     * @param $node [jQuery object] "目标对象"
     */
    function _getSlides($node) {
        return $node.children(‘li‘);
    }
     /**
     * @method private
     * @name _build
     * @description Builds each instance
     * @param $node [jQuery object] "目标对象"
     * @param opts [object] "插件参数"
     */
    function _build($node, opts) {
        var $slides = _getSlides($node);
        $slides.eq(0).siblings(‘li‘).css({‘display‘:‘none‘});
        var numpic = $slides.size() - 1;

        $node.delegate(‘li‘, ‘mouseenter‘, function() {
            pause = true;//暂停轮播
            clearInterval(autoMethod);
        }).delegate(‘li‘, ‘mouseleave‘, function() {
            pause = false;
            autoMethod = setInterval(function() {
                _auto($slides, $pages, opts);
            }, opts.speed);
        });
        //console.log(autoMethod)
        var $pages = _pagination($node, opts, numpic);

        if(opts.auto) {
            autoMethod = setInterval(function() {
                _auto($slides, $pages, opts);
            }, opts.speed);
        }
    }        

1、_getSlides用于获取ul这个对象的li子标签,ul也就是这个焦点图插件

2、将除了第一个li标签,其他标签设置为隐藏

3、获取切换图片的数量,由于后面做循环是从下标0开始,做<=操作,所以减去一个1,其实这里不减也是可以的,看个人喜好

4、给li标签设置mouseenter与mouseleave的事件,分别是取消循环与继续循环

5、初始化选择按钮

6、参数auto如果为true,就激活自动切换

六、初始化选择按钮

   /**
     * @method private
     * @name _pagination
     * @description 初始化选择按钮
     * @param $node [jQuery object] "目标对象"
     * @param opts [Object] "参数"
     * @param size [int] "图片数量"
     */
     function _pagination($node, opts, size) {
        var $ul = $(‘<ul>‘, {‘class‘: opts.pageCss});
        for(var i = 0; i <= size; i++){
            $ul.append(‘<li>‘ + ‘<a href="javascript:void(0)">‘ + (i+1) + ‘</a>‘ + ‘</li>‘);
        }

        $ul.children(‘:first‘).addClass(‘current‘);//给第一个按钮选中样式
        var $pages = $ul.children(‘li‘);
        $ul.delegate(‘li‘, ‘click‘, function() {//绑定click事件
            var changenow = $(this).index();
            _changePage($pages, $node, changenow);
        }).delegate(‘li‘, ‘mouseenter‘, function() {
            pause = true;//暂停轮播
        }).delegate(‘li‘, ‘mouseleave‘, function() {
            pause = false;
        });
        $node.after($ul);
        return $pages;
     }

1、动态添加按钮ul标签,赋上一个自定义class,将子标签li加上

2、将第一个按钮加上选中样式

3、给li标签加上click、mouseenter与mouseleave的事件,click事件绑定切换操作

4、把分页按钮放到插件对象ul的后面

5、返回分页按钮中的li对象,后面有用的

七、切换图片

   /**
     * @method private
     * @name _change
     * @description 幻灯片显示与影藏
     * @param $slides [jQuery object] "图片对象"
     * @param $pages [jQuery object] "按钮对象"
     * @param next [int] "要显示的下一个序号"
     */
     function _fadeinout($slides, $pages, next){
        $slides.eq(nowImage).css(‘z-index‘,‘2‘);
        $slides.eq(next).css({‘z-index‘:‘1‘}).show();
        $pages.eq(next).addClass(‘current‘).siblings().removeClass(‘current‘);
        $slides.eq(nowImage).fadeOut(400, function(){
            $slides.eq(next).fadeIn(500);
        });
    }

1、将当前的图片z-index加大,下一张图片的z-index也加大,显示下一张图,这样能做出一种渐变的效果,不加的话就会是很生硬的切换

2、选择按钮的下一个增加选中样式

3、应用jQuery的fadeOut与fadeIn做隐藏与显示的渐变特效

八、自动循环

   /**
     * @method private
     * @name _auto
     * @description 自动轮播
     * @param $slides [jQuery object] "图片对象"
     * @param $pages [jQuery object] "按钮对象"
     * @param opts [Object] "参数"
     */
     function _auto($slides, $pages, opts){
        var next = nowImage + 1;
        var size = $slides.size() - 1;
        if(!pause) {
            if(nowImage >= size){
                next = 0;
            }

            _fadeinout($slides, $pages, next);

            if(nowImage < size){
                nowImage += 1;
            }else {
                nowImage = 0;
            }
        }else {
            clearInterval(autoMethod);//暂停的时候就取消自动切换
        }
     }

1、判断是暂停还是继续轮播

2、如果不是暂停,就根据条件做当前页与下一个按钮的序号设置

插件还有很多问题,比如不能在一个页面绑定两个不同的对象,还有巨大的修改空间。

通过这次的修改,自己有了一个可以控制的焦点图切换插件,虽然还有很多问题但可以一步一步解决。以后嵌入到自己的项目中,修改起来也方便很多。

demo下载:

http://download.csdn.net/download/loneleaf1/7825509

时间: 2024-10-06 00:16:11

自制jQuery焦点图切换简易插件的相关文章

Jquery焦点图/幻灯片效果 插件 KinSlideshow

JavaScript $(function(){        $("#KinSlideshow").KinSlideshow({                moveStyle:"down",         //设置切换方向为向下 [默认向左切换]                intervalTime:8,           //设置间隔时间为8秒  [默认为5秒]                mouseEvent:"mouseover&quo

强大的自适应jQuery焦点图特效

jQuery焦点图切换自适应效果 自适应jQuery焦点图特效是一款支持移动端的响应式jQuery焦点图插件,支持flexible布局,支持移动触摸事件等. 今天我们要来分享一款很灵活的jQuery焦点图插件,和以前介绍的jQuery焦点图动画类似,它也提供左右切换按钮,同时在图片上悬浮自定义图片切换按钮.切换动画包括上下左右切入动画以及淡入淡出动画.这款jQuery焦点图最大的特点是支持移动端触摸功能. 体验效果:http://hovertree.com/texiao/jquery/17/ 代

基于jQuery全屏焦点图切换插件responsiveslides

基于jQuery全屏焦点图切换插件responsiveslides是一款带左右箭头,索引按钮的自动轮播切换特效下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <script type="text/javascript"> $(function () { // Slideshow $("#slider").responsiveSlides({ auto: true, pager: false, nav: true, speed:

分享10款常用的jQuery焦点图插件

爱编程一直在收集整理编程相关的知识和解决方案,今天小编为大家带来10款非常常用的jquery焦点图插件. 1.jQuery可自动播放动画的焦点图插件 之前我们已经分享过很多非常实用的jQuery焦点图插件,大部分对开发者来说基本上可以直接拿来使用.今天我们要分享一款可以自动播放动画的jQuery焦点图插件,它在切换图片的时候可以播放对应图片的各种动画效果. 在线预览   源码下载 2.jQuery可自动播放动画的焦点图插件 这次我们要分享的这款jQuery焦点图非常特别,它的外观特别简单,但是又

10款华丽最新jQuery焦点图动画插件

1.jQuery带对比功能的焦点图插件 我们在这里已经分享过很多炫酷的jQuery焦点图插件,大部分焦点图插件都比较实用.今天要分享的这款有几个特点:第一是焦点图带有缩略图预览功能,第二是焦点图中的图片带有和原图进行对比的功能,并且这款jQuery焦点图还支持定时图片切换,非常实用. 在线演示一 在线演示二 源码下载 2.Devrama Slider - 支持任意 HTML 的内容滑块 Devrama Slider 是一个图片滑块,支持很多特色功能.除了支持图片滑动,其它的 HTML 内容也支持

分享8个常用的jQuery焦点图插件

现在web网页jquery应用越来越广泛,目前几乎每一个WEB项目都在使用jQuery,因为jQuery插件实在太丰富,尤其是一些图片滑块插件和jQuery焦点图插件,更是多如牛毛,很多初学者只需稍微修改就可以使用.本文精选了8款比较强大的jQuery焦点图插件,希望对读者有所帮助. 1.jQuery动画焦点图 可自动播放图片 这是一款最基础的jQuery焦点图插件,包括切换的动画也是最基本的淡入淡出动画特效,但是它很轻巧,而且也比较容易扩展,因此也推荐使用. 在线预览   源码下载 2.jQu

超酷实用的jQuery焦点图赏析及源码

焦点图应用在现代网页中使用十分广泛,有注重简单小巧的,也有注重华丽美观的,大部分jQuery焦点图都可以滑动和切换图片,并且在切换图片时产生不同的动画特效.今天我们要分享一些超酷而且实用的jQuery焦点图插件,并分享它们的源代码. 1.jQuery多动画切换焦点图 之前我们已经分享过很多超酷的jQuery焦点图插件了,而且也都相当实用.今天我们要再来介绍一款可实现多种切换动画的jQuery焦点图,这款焦点图整体非常简单,左右两侧各有一个上一张和下一张的切换按钮.每张图片在切换时也都有各不相同的

KinSlideshow焦点图轮播插件

KinSlideshow默认设置效果代码: *焦点图显示的标题为 img 中 alt 属性中的文字 *当只有一张图片时不显示按钮,但也会有无缝切换效果 * jquery 1.7.2以上版本 jvascript: $(function(){ $("#KinSlideshow").KinSlideshow(); }) HTML: <div id="KinSlideshow" style="visibility:hidden;"> <

8款超绚丽的jQuery焦点图动画

随着前端技术和浏览器技术的不断发展,人们开始对网页视觉效果的要求越来越高.我们经常会在页面中看到很多炫酷的图片焦点图播放控件,有些甚至是大屏的焦点图占用大片的页面空间,从而吸引用户的眼球.本文要分享的就是一些超绚丽的jQuery焦点图动画插件,有些不仅基于jQuery,还带有CSS3的动画特效,因此显得更加炫酷. 1.jQuery实用图片滑块焦点图 支持移动端滑动 今天我们要再来介绍一款jQuery实用图片滑块焦点图,它也支持移动端的触屏滑动,这款插件并没有特别的动画效果,但方便实用. 在线演示