`
zeng7960983
  • 浏览: 44445 次
  • 性别: Icon_minigender_1
  • 来自: 邵阳
社区版块
存档分类
最新评论

解决jCarouselLite向右滚动和悬停效果

阅读更多
jCarouselLite.js 如下:
/**
* jCarouselLite - jQuery plugin to navigate images/any content in a carousel style widget.
* @requires jQuery v1.2 or above
*
* http://gmarwaha.com/jquery/jcarousellite/
*
* Copyright (c) 2007 Ganeshji Marwaha (gmarwaha.com)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* Version: 1.0.1
* Note: Requires jquery 1.2 or above from version 1.0.1
*/

/**
* Creates a carousel-style navigation widget for images/any-content from a simple HTML markup.
*
* The HTML markup that is used to build the carousel can be as simple as...
*
*  <div class="carousel">
*      <ul>
*          <li><img src="image/1.jpg" alt="1"></li>
*          <li><img src="image/2.jpg" alt="2"></li>
*          <li><img src="image/3.jpg" alt="3"></li>
*      </ul>
*  </div>
*
* As you can see, this snippet is nothing but a simple div containing an unordered list of images.
* You don't need any special "class" attribute, or a special "css" file for this plugin.
* I am using a class attribute just for the sake of explanation here.
*
* To navigate the elements of the carousel, you need some kind of navigation buttons.
* For example, you will need a "previous" button to go backward, and a "next" button to go forward.
* This need not be part of the carousel "div" itself. It can be any element in your page.
* Lets assume that the following elements in your document can be used as next, and prev buttons...
*
* <button class="prev">&lt;&lt;</button>
* <button class="next">&gt;&gt;</button>
*
* Now, all you need to do is call the carousel component on the div element that represents it, and pass in the
* navigation buttons as options.
*
* $(".carousel").jCarouselLite({
*      btnNext: ".next",
*      btnPrev: ".prev"
* });
*
* That's it, you would have now converted your raw div, into a magnificient carousel.
*
* There are quite a few other options that you can use to customize it though.
* Each will be explained with an example below.
*
* @param an options object - You can specify all the options shown below as an options object param.
*
* @option btnPrev, btnNext : string - no defaults
* @example
* $(".carousel").jCarouselLite({
*      btnNext: ".next",
*      btnPrev: ".prev"
* });
* @desc Creates a basic carousel. Clicking "btnPrev" navigates backwards and "btnNext" navigates forward.
*
* @option btnGo - array - no defaults
* @example
* $(".carousel").jCarouselLite({
*      btnNext: ".next",
*      btnPrev: ".prev",
*      btnGo: [".0", ".1", ".2"]
* });
* @desc If you don't want next and previous buttons for navigation, instead you prefer custom navigation based on
* the item number within the carousel, you can use this option. Just supply an array of selectors for each element
* in the carousel. The index of the array represents the index of the element. What i mean is, if the
* first element in the array is ".0", it means that when the element represented by ".0" is clicked, the carousel
* will slide to the first element and so on and so forth. This feature is very powerful. For example, i made a tabbed
* interface out of it by making my navigation elements styled like tabs in css. As the carousel is capable of holding
* any content, not just images, you can have a very simple tabbed navigation in minutes without using any other plugin.
* The best part is that, the tab will "slide" based on the provided effect. :-)
*
* @option mouseWheel : boolean - default is false
* @example
* $(".carousel").jCarouselLite({
*      mouseWheel: true
* });
* @desc The carousel can also be navigated using the mouse wheel interface of a scroll mouse instead of using buttons.
* To get this feature working, you have to do 2 things. First, you have to include the mouse-wheel plugin from brandon.
* Second, you will have to set the option "mouseWheel" to true. That's it, now you will be able to navigate your carousel
* using the mouse wheel. Using buttons and mouseWheel or not mutually exclusive. You can still have buttons for navigation
* as well. They complement each other. To use both together, just supply the options required for both as shown below.
* @example
* $(".carousel").jCarouselLite({
*      btnNext: ".next",
*      btnPrev: ".prev",
*      mouseWheel: true
* });
*
* @option auto : number - default is null, meaning autoscroll is disabled by default
* @example
* $(".carousel").jCarouselLite({
*      auto: 800,
*      speed: 500
* });
* @desc You can make your carousel auto-navigate itself by specfying a millisecond value in this option.
* The value you specify is the amount of time between 2 slides. The default is null, and that disables auto scrolling.
* Specify this value and magically your carousel will start auto scrolling.
*
* @option speed : number - 200 is default
* @example
* $(".carousel").jCarouselLite({
*      btnNext: ".next",
*      btnPrev: ".prev",
*      speed: 800
* });
* @desc Specifying a speed will slow-down or speed-up the sliding speed of your carousel. Try it out with
* different speeds like 800, 600, 1500 etc. Providing 0, will remove the slide effect.
*
* @option easing : string - no easing effects by default.
* @example
* $(".carousel").jCarouselLite({
*      btnNext: ".next",
*      btnPrev: ".prev",
*      easing: "bounceout"
* });
* @desc You can specify any easing effect. Note: You need easing plugin for that. Once specified,
* the carousel will slide based on the provided easing effect.
*
* @option vertical : boolean - default is false
* @example
* $(".carousel").jCarouselLite({
*      btnNext: ".next",
*      btnPrev: ".prev",
*      vertical: true
* });
* @desc Determines the direction of the carousel. true, means the carousel will display vertically. The next and
* prev buttons will slide the items vertically as well. The default is false, which means that the carousel will
* display horizontally. The next and prev items will slide the items from left-right in this case.
*
* @option circular : boolean - default is true
* @example
* $(".carousel").jCarouselLite({
*      btnNext: ".next",
*      btnPrev: ".prev",
*      circular: false
* });
* @desc Setting it to true enables circular navigation. This means, if you click "next" after you reach the last
* element, you will automatically slide to the first element and vice versa. If you set circular to false, then
* if you click on the "next" button after you reach the last element, you will stay in the last element itself
* and similarly for "previous" button and first element.
*
* @option visible : number - default is 3
* @example
* $(".carousel").jCarouselLite({
*      btnNext: ".next",
*      btnPrev: ".prev",
*      visible: 4
* });
* @desc This specifies the number of items visible at all times within the carousel. The default is 3.
* You are even free to experiment with real numbers. Eg: "3.5" will have 3 items fully visible and the
* last item half visible. This gives you the effect of showing the user that there are more images to the right.
*
* @option start : number - default is 0
* @example
* $(".carousel").jCarouselLite({
*      btnNext: ".next",
*      btnPrev: ".prev",
*      start: 2
* });
* @desc You can specify from which item the carousel should start. Remember, the first item in the carousel
* has a start of 0, and so on.
*
* @option scrool : number - default is 1
* @example
* $(".carousel").jCarouselLite({
*      btnNext: ".next",
*      btnPrev: ".prev",
*      scroll: 2
* });
* @desc The number of items that should scroll/slide when you click the next/prev navigation buttons. By
* default, only one item is scrolled, but you may set it to any number. Eg: setting it to "2" will scroll
* 2 items when you click the next or previous buttons.
*
* @option beforeStart, afterEnd : function - callbacks
* @example
* $(".carousel").jCarouselLite({
*      btnNext: ".next",
*      btnPrev: ".prev",
*      beforeStart: function(a) {
*          alert("Before animation starts:" + a);
*      },
*      afterEnd: function(a) {
*          alert("After animation ends:" + a);
*      }
* });
* @desc If you wanted to do some logic in your page before the slide starts and after the slide ends, you can
* register these 2 callbacks. The functions will be passed an argument that represents an array of elements that
* are visible at the time of callback.
*
*
* @cat Plugins/Image Gallery
* @author Ganeshji Marwaha/ganeshread@gmail.com
*/

(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":"right", sizeCss=o.vertical?"height":"width";
        var div = $(this), ul = $("ul", div), tLi = $("li", ul), tl = tLi.size(), v = o.visible;

        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)+ul.width());

        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);
            });

        if(o.auto)
           jCarouselLiteTime= setInterval(function() {
                go(curr+o.scroll);
            }, o.auto+o.speed);
  
    $(this).hover(function(){
clearInterval(jCarouselLiteTime);
},function(){
jCarouselLiteTime=setInterval(function() {
go(curr+o.scroll);
}, o.auto+o.speed);
});


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

        function go(to) {
            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)+ul.width()+"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 )+ul.width() + "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(
                     { right: -(curr*liSize)+ul.width()} , 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);
------------------------
问题:jCarouselLite只支持向左和向上滚动. 如果向右滚动需要修改做些修改首先要
animCss=o.vertical?"top":"right", 使用时向右滚动
ul.css(sizeCss, ulSize+"px").css(animCss, -(curr*liSize)+ul.width()); //初始化出现的宽度
ul.css(animCss, -((itemLength-(v*2))*liSize)+ul.width()+"px"); //第一张滚动时由于现在向右边滚动需要加上ul的宽度
ul.css(animCss, -( (v) * liSize )+ul.width() + "px" ); //滚动到最后一张是跳到第一张显示
ul.animate(
                     { right: -(curr*liSize)+ul.width()} , o.speed, o.easing,
                    function() {
                        if(o.afterEnd)
                            o.afterEnd.call(this, vis());
                        running = false;
                    }
                );  //滚动的right
------------
鼠标悬停效果 给对象添加一个hover事件 鼠标移动上面的时候停止滚动移出去开始滚动
   $(this).hover(function(){
clearInterval(jCarouselLiteTime);
},function(){
jCarouselLiteTime=setInterval(function() {
go(curr+o.scroll);
}, o.auto+o.speed);
});


分享到:
评论

相关推荐

    jcarousellite幻灯片滚动鼠标悬停效果(原)

    《jcarousellite幻灯片滚动鼠标悬停效果解析》 在网页设计中,动态的、交互式的元素往往能吸引用户的注意力,提升用户体验。jcarousellite是一款经典的jQuery插件,它提供了丰富的幻灯片滚动效果,特别是鼠标悬停...

    jQuery-jcarousellite水平、垂直滚动图片效果演示

    jQuery-jcarousellite是一款基于jQuery库的轻量级图片轮播插件,它提供了丰富的水平和垂直滚动效果,适用于创建动态、吸引人的网页图像展示。本教程将深入讲解该插件的使用方法、核心功能以及如何自定义滚动效果。 ...

    增加了鼠标悬停 jcarousellite.js

    不需要改的原网页的轮播插件,增加了鼠标悬停效果

    图片滚动插件:jcarousellite

    在网页设计中,为了增加视觉效果和用户体验,图片滚动插件扮演着重要的角色。jcarousellite是一款小巧且功能强大的jQuery插件,它允许开发者轻松地创建出动态的、响应式的图片轮播效果。这个插件适用于那些希望在...

    jcarousellite.js 基于Jquery的图片无缝滚动插件

    `jcarousellite.js`是一款轻量级、基于jQuery的图片无缝滚动插件,它可以帮助开发者轻松地在网页上实现图片轮播效果。这款插件的主要特点在于其简单易用性以及强大的定制能力,使得开发者可以根据自己的需求调整图片...

    jcarousellite的问题说明

    `jcarousellite`是一款基于jQuery的小巧且高效的轮播插件,它提供了轻量级的解决方案,用于实现网页上的图片或内容的滑动展示效果。在实际应用中,可能会遇到各种问题,下面将对`jcarousellite`的常见问题及其解决...

    jQuery jcarousellite可控制左右切换的幻灯片.rar

    jcarousellite是一款来自国外的jQuery插件,我们利用它可以实现很多功能,本文中,我们主要使用它完成一个可以控制左右切换的焦点图切换,幻灯片效果,当然,该幻灯片是可以自动切换的,唯一不足的之处是没有添加...

    滚动条插件

    **滚动条插件——JCarouselLite详解** ...总的来说,JCarouselLite以其简洁的API和出色的性能,成为了网页滚动效果的首选插件之一。通过深入理解和实践,开发者可以轻松地将它集成到自己的项目中,提升用户体验。

    jquery 很酷的滚动效果。

    3. **jCarouselLite 插件**:jCarouselLite 提供了一些预定义的选项和方法来创建滚动效果。例如,`vertical` 选项决定是否垂直滚动,`scroll` 选项指定每次滚动的项目数量,`auto` 可以设置自动滚动的速度和方向。 ...

    E_jquery图片滚动切换插件 jCarousel Lite

    `jCarousel Lite`是一款高效、简洁的jQuery插件,它的主要功能是实现图片列表的自动循环滚动,支持左右箭头控制和鼠标悬停暂停功能。由于其体积小、性能高、易用性强的特点,被广泛应用于网页设计中。 ### 2. 安装...

    jcarousellite.js

    图片轮播插件jcarousellite.js

    js滚动插件及案例

    深入学习`jcarousellite`,可以通过官方文档了解所有可用参数和示例代码,实践不同的滚动效果。同时,查阅其他开发者分享的经验和技巧,可以提升你的滚动插件应用能力。 总结,`jcarousellite`作为一款强大的jQuery...

    jcarousellite 基于jquery的可控切换的幻灯片 v1.0.zip

    4. 漂浮和定位:可以将导航点或控制按钮设置为浮动或固定位置,以便在页面滚动时保持可见。 5. 多样化过渡效果:jcarousellite支持多种平滑过渡效果,如淡入淡出、滑动等,增强了视觉体验。 二、安装与使用 1. ...

    jquery插件jCarouselLite 图片滚动+停顿代码

    摘要:脚本资源,jQuery,图片滚动 一款由jQuery插件实现的效果,主要是关于jquery插件jCarouselLite的问题,关于left:-5000px这行CSS,官方这段不知道有何用处,如果放进去就会显示不了图片了,js动态产生的值为何没有...

    JQuery插件jcarousellite的参数中文说明

    JQuery插件jcarousellite是一款用于创建动态轮播效果的工具,它允许开发者通过配置一系列参数来定制轮播的行为。下面将详细解释这些参数的含义: 1. **btnPrev** (string): 这个参数定义了“上一个”按钮的CSS类名...

    jquery 常用工具集合 jcarousellite_1.0.1.js jquery.lazyload.js

    个人把常用的一些jquery插件做了一个demo,里面有jquery.dropkick-1.0.0.js、slider.js、fullcalendar-1.5.2、jquery.grumble.js、jcarousellite_1.0.1.js(已修改)、jquery.jqzoom.js、jquery.thickbox.js、jquery...

    大图片浏览jquery代码(例用jcarousellite不算太完美)

    jCarousellite是一款轻量级的轮播插件,可以用于创建图片滑动展示效果,但可能在某些特定需求下并非完美的解决方案。因此,博主可能会探讨其优点,如易于使用、自定义程度高,以及可能存在的局限性,比如性能、兼容...

    兼容各种浏览器的jcarousellite插件js

    兼容各种浏览器的jcarousellite插件,最特殊的地方是进过我修改,他兼容谷歌,官网不兼容谷歌的。

Global site tag (gtag.js) - Google Analytics