`
caiceclb
  • 浏览: 242033 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

站在巨人肩膀:修改jCarousel Lite图片滚动插件

阅读更多

插件Home:http://www.gmarwaha.com/jquery/jcarousellite/index.php

 

很棒的图片滚动插件,加入国人常用的习惯:鼠标悬停的效果。

 

html结构要求:

 

 

<div id="handler">
    <ul>
        <li><img /></li>
         ……
    </ul>
</div>

 

div,ul都会自动加入合适的css,而且是相对定位。基本不需要额外css控制,当然在js生效前,会乱,如果网速慢的话。

 

有必要对div加额外的margin等,控制其居中或怎样。div的left属性为0,是插件自动设置的,所以不要通过这个去控制位置了。

 

 

(function($) {                                          // Compliant with jquery.noConflict()
$.fn.jCarouselLite = function(o) {
    o = $.extend({
        btnPrev: null,
        btnNext: null,
        btnGo: null,
        mouseWheel: false,
        auto: null,

        speed: 200,
        easing: null,

        vertical: false,
        circular: true,
        visible: 3,
        start: 0,
        scroll: 1,

        beforeStart: null,
        afterEnd: null
    }, o || {});

    return this.each(function() {                           // Returns the element collection. Chainable.

        var running = false, animCss=o.vertical?"top":"left", sizeCss=o.vertical?"height":"width";
        var div = $(this), ul = $("ul", div), tLi = $("li", ul), tl = tLi.size(), v = o.visible;
		
	       	if(tl == 0) {
				return false;
			}
        if(o.circular) {
            ul.prepend(tLi.slice(tl-v-1+1).clone())
              .append(tLi.slice(0,v).clone());
            o.start += v;
        }

        var li = $("li", ul), itemLength = li.size(), curr = o.start;
        div.css("visibility", "visible");

        li.css({overflow: "hidden", 'float': o.vertical ? "none" : "left"});
        ul.css({margin: "0", padding: "0", position: "relative", "list-style-type": "none", "z-index": "1"});
        div.css({overflow: "hidden", position: "relative", "z-index": "2", left: "0px"});

        var liSize = o.vertical ? height(li) : width(li);   // Full li size(incl margin)-Used for animation
        var ulSize = liSize * itemLength;                   // size of full ul(total length, not just for the visible items)
        var divSize = liSize * v;                           // size of entire div(total length for just the visible items)

        li.css({width: li.width(), height: li.height()});
        ul.css(sizeCss, ulSize+"px").css(animCss, -(curr*liSize));

        div.css(sizeCss, divSize+"px");                     // Width of the DIV. length of visible images

        if(o.btnPrev)
            $(o.btnPrev).click(function() {
                return go(curr-o.scroll);
            });

        if(o.btnNext)
            $(o.btnNext).click(function() {
                return go(curr+o.scroll);
            });

        if(o.btnGo)
            $.each(o.btnGo, function(i, val) {
                $(val).click(function() {
                    return go(o.circular ? o.visible+i : i);
                });
            });

        if(o.mouseWheel && div.mousewheel)
            div.mousewheel(function(e, d) {
                return d>0 ? go(curr-o.scroll) : go(curr+o.scroll);
            });
		var jcarouselliteAutoId;
        if(o.auto) {
            jcarouselliteAutoId = setInterval(function() {
                go(curr+o.scroll);
            }, o.auto+o.speed);
			/* 2009年7月30日 添加鼠标浮动停止滚动 */
			ul.hover(function(){
					clearInterval(jcarouselliteAutoId);
				},function(){
					jcarouselliteAutoId = setInterval(function() {
						go(curr+o.scroll);
					}, o.auto+o.speed);
			});
        };

        function vis() {
            return li.slice(curr).slice(0,v);
        };

        function go(to) {
	       	if(tl <= 3) {
				return false;
			}
	        
            if(!running) {

                if(o.beforeStart)
                    o.beforeStart.call(this, vis());

                if(o.circular) {            // If circular we are in first or last, then goto the other end
                    if(to<=o.start-v-1) {           // If first, then goto last
                        ul.css(animCss, -((itemLength-(v*2))*liSize)+"px");
                        // If "scroll" > 1, then the "to" might not be equal to the condition; it can be lesser depending on the number of elements.
                        curr = to==o.start-v-1 ? itemLength-(v*2)-1 : itemLength-(v*2)-o.scroll;
                    } else if(to>=itemLength-v+1) { // If last, then goto first
                        ul.css(animCss, -( (v) * liSize ) + "px" );
                        // If "scroll" > 1, then the "to" might not be equal to the condition; it can be greater depending on the number of elements.
                        curr = to==itemLength-v+1 ? v+1 : v+o.scroll;
                    } else curr = to;
                } else {                    // If non-circular and to points to first or last, we just return.
                    if(to<0 || to>itemLength-v) return;
                    else curr = to;
                }                           // If neither overrides it, the curr will still be "to" and we can proceed.

                running = true;

                ul.animate(
                    animCss == "left" ? { left: -(curr*liSize) } : { top: -(curr*liSize) } , o.speed, o.easing,
                    function() {
                        if(o.afterEnd)
                            o.afterEnd.call(this, vis());
                        running = false;
                    }
                );
                // Disable buttons when the carousel reaches the last/first, and enable when not
                if(!o.circular) {
                    $(o.btnPrev + "," + o.btnNext).removeClass("disabled");
                    $( (curr-o.scroll<0 && o.btnPrev)
                        ||
                       (curr+o.scroll > itemLength-v && o.btnNext)
                        ||
                       []
                     ).addClass("disabled");
                }

            }
            return false;
        };
    });
};

function css(el, prop) {
    return parseInt($.css(el[0], prop)) || 0;
};
function width(el) {
    return  el[0].offsetWidth + css(el, 'marginLeft') + css(el, 'marginRight');
};
function height(el) {
    return el[0].offsetHeight + css(el, 'marginTop') + css(el, 'marginBottom');
};

})(jQuery);
分享到:
评论

相关推荐

    E_jquery图片滚动切换插件 jCarousel Lite

    **jQuery图片滚动切换插件——jCarousel Lite详解** 在网页设计中,图片的展示方式多种多样,其中一种常见且吸引用户注意力的方式就是图片滚动切换效果。`jCarousel Lite`是基于jQuery的一款轻量级的图片轮播插件,...

    jCarousel图片滚动插件 jquery图片滚动

    jCarousel图片滚动插件 jquery图片滚动 jCarousel 是个非常好看又好用的内容滚动切换插件,可以实现按序水平或垂直方向的内容列表的切换。 滚动切换的内容可以是静态的HTML内容,也可以是JS的对象列表,也可以是...

    jcarousel点击图片滚动

    `jCarousel` 是一个非常流行的 jQuery 插件,主要用于创建可滚动的图片或内容列表。它以其强大的功能和灵活性在网页开发中被广泛使用,尤其适用于创建滑动展示、轮播效果或产品展示等应用场景。在“jcarousel点击...

    Jquery.jqzoom + jcarousel 实现图片滚动和局部图片放大镜效果

    "Jquery.jqzoom + jcarousel 实现图片滚动和局部图片放大镜效果"是一个典型的应用场景,它结合了两个强大的jQuery插件——jqZoom和jCarousel,以实现动态的图片浏览体验。 jqZoom是一款基于jQuery的图片放大镜插件...

    Jquery.jqueryzoom+jcarousel+实现图片滚动和局部图片放大镜效果

    在这个项目中,`jQuery` 被用来实现两种关键功能:图片滚动(通过 `jcarousel` 插件)和局部图片放大镜效果(通过 `jqueryzoom` 插件)。下面我们将详细介绍这两个功能及其背后的原理。 1. **`jcarousel` 插件**:`...

    jQuery插件_jcarousel(用于图片滚动)

    **jQuery插件_jcarousel(用于图片滚动)** `jcarousel`是一个非常流行的jQuery插件,专为创建功能丰富的图片轮播、滑动展示和旋转木马效果而设计。它提供了高度自定义的选项,使开发者能够轻松地在网站上添加交互式...

    jquery插件jcarousel制作滚动效果

    jCarousel 是一款基于jQuery的插件,专门用于创建各种类型的滚动效果,无论是图片展示还是文本滚动,都能轻松实现。 ## 1. jCarousel 的核心功能 jCarousel 提供了灵活的配置选项和丰富的API接口,使得开发者可以...

    Jquery jcarousel插件应用实用:横向无缝图片滚动

    jQuery,图片滚动,jcarousel,Jquery插件 Jquery jcarousel插件应用实用:横向无缝的图片滚动,两端带左右控制按钮,需要鼠标点击按钮才会滚动,点一下滚动一下,演示文档虽然是HTML格式,但由代码来看,在ASP/PHP/中...

    jquery插件 jcarousel包以及使用的小例子

    jCarousel是一款基于jQuery的开源轮播图插件,它提供了丰富的功能和自定义选项,使开发者能够轻松创建各种各样的滑动效果,如图片滑动、内容滚动等。这个包包含了jCarousel的核心库文件和其他相关资源,为快速集成到...

    jcarousel+jqzoom 实现图片滚动和局部图片放大镜效果

    结合使用 jcarousel 和 jqzoom,电子商务网站可以创建一个强大的商品展示模块,用户可以通过轻松滚动浏览多个商品图片,同时在感兴趣的地方通过放大镜查看更清晰的细节。这不仅提升了用户体验,也有助于提高商品的...

    jQuery滚动切换传送插件jCarousel使用简介

    **jQuery滚动切换传送插件jCarousel使用指南** jCarousel是一款基于jQuery库的高效、灵活且功能丰富的滚动切换插件,适用于创建各种类型的轮播、滚动列表或者产品展示。这款插件以其简单易用的API和丰富的自定义...

    jQuery轮播图插件jCarousel

    **jQuery轮播图插件jCarousel详解** 在网页设计中,动态展示图片或内容的轮播图已经成为一种常见的交互方式,有效地吸引用户注意力并优化用户体验。jCarousel是一款基于JavaScript库jQuery的轮播插件,以其易用性和...

    jCarousel演示7种不同的滚动切换

    jCarousel 是一个非常受欢迎的 jQuery 插件,它为开发者提供了强大的功能,使他们能够创建出优雅且功能丰富的滚动列表。这款插件支持水平和垂直方向的列表展示,并且可以通过动画效果实现平滑的过渡,从而提升用户...

    Jcarousel jQuery 多风格图片滚动插件及示例

    内容索引:脚本资源,jQuery,图片滚动,jQuery插件 Jcarousel 是一款...注意,本插件实现的图片滚动默认状态下是不滚动的,只有点击了控制按钮,图片才会按照设置的步长或速度滚动,目前使用Jcarousel的网站不在少数。

    横向无缝的图片滚动,jQuery jcarousel实例.rar

    两端带左右控制按钮,需要鼠标点击按钮才会滚动,点一下滚动一下,这是Jquery jcarousel插件应用实用例子,演示文档虽然是HTML格式,但由代码来看,在ASP/PHP/ASP.NET中使用也很方便,而且图片地址可由数据库读出,...

    jcarousel包

    "jcarousel包"是一个专为前端网页设计的插件,其主要目的是为了实现高质量的图片展示效果,特别是在创建PPT(PowerPoint)风格的轮播功能时。在网页设计中,这种轮播效果通常用于产品展示、图片画廊或者新闻更新等...

    jCarousel是一个jQuery插件用于控制水平或垂直顺序的项目清单

    jCarousel是一款基于jQuery的开源插件,主要用于创建可滚动的、水平或垂直排列的项目列表,常被应用于网站的轮播图、产品展示、新闻滚动等场景。它提供了丰富的定制选项,使开发者能够轻松地调整布局、动画效果以及...

    jQuery图片点击切换插件jCarousel.zip

    这段代码将对ID为'mycarousel'的元素应用jCarousel插件,并设置为水平展示,每次显示3张图片,每次滚动1张。 jCarousel的HTML结构通常包含一个ul列表,其中li元素表示每张图片或内容。CSS样式则用来控制图片的布局...

    国外优秀图片展示插件

    jCarousel是一款广泛使用的开源图片展示插件,它支持自定义样式、多方向滚动、自动播放、分页导航等多种特性,同时兼容各种主流浏览器,包括IE、Firefox、Chrome、Safari和Opera。 jCarousel的工作原理是利用HTML、...

Global site tag (gtag.js) - Google Analytics