当前位置:  开发笔记 > 编程语言 > 正文

内容宽度未知的jCarousel

如何解决《内容宽度未知的jCarousel》经验,为你挑选了1个好方法。

我正在尝试为jQuery使用jCarousel插件,以便为我的网站用户提供可滚动(水平)内容.

我提到的内容基本上是用户定义的

  • 元素,其样式使它们具有标签的感觉和外观.所以基本上我试图在pageflakes.com中实现相同的效果.正如您可能想象的那样,用户正在创建选项卡并自行提供选项卡名称.

    jCarousel需要您为内容指定固定宽度,例如,他们的所有示例都基于具有固定高度和宽度的图像.但在我的情况下,我无法控制用户将他/她的标签命名为什么...使我无法猜测总容器div的宽度.

    我尝试过使用一种愚蠢的方法,例如以编程方式猜测宽度,假设每个字母大约为5个像素,并将5与他们作为标签名称给出的单词的长度相乘.即使在这种情况下,我需要动态操作css文件,我不知道该怎么做,即使这样做是可行的..

    任何解决方案...

    
    
  • This is my tab
  • of which I can
  • never guess
  • The length of
  • 上面的html是通过ajax_tabs_output.aspx以编程方式生成的,加载到javascript数组中,jCarousel负责其余的..

         function outputTabsArray() {
            $.ajax({
                url: 'ajax_tabs_output.aspx', 
                type: 'get', 
                data: 'q=array', 
                async: false, 
                success: function(out) 
                    {
                        tabs_array = out;
                    } 
                });
                }// end outputTabsArray
    
            function mycarousel_itemLoadCallback(carousel, state)
            {
                for (var i = carousel.first; i <= carousel.last; i++) {
                    if (carousel.has(i)) {
                        continue;
                    }
    
                    if (i > tabs_array.length) {
                        break;
                    }
    
                    carousel.add(i, mycarousel_getItemHTML(tabs_array[i-1]));
                }
            };
    
            /**
             * Item html creation helper.
             */
            function mycarousel_getItemHTML(item)
            {
                return '
    " + item.tab_name + '
    '; }; $('#mycarousel').jcarousel({ size: tabs_array.length, itemLoadCallback: {onBeforeAnimation: mycarousel_itemLoadCallback} });

    Borgar.. 5

    最接近你想要的东西可能是jscrollhorizo​​ntalpane.我从来没有使用它,所以我不能保证它作为解决这个特定问题的有效性.

    如果你想尝试它,这种小部件不应该很难.我将分解我将使用的近似方法:

    确保使用大量包装纸.

    • ...
    • ...
    • ...

    我们要做的是在" window "元素内来回移动" space "元素.这可以通过设置为" window "和 " space "然后将其转换为使用来完成,但我将使用该属性.position:relativeposition:absoluteleft:-??pxscrollLeft

    添加一些CSS.

    .window {
      overflow : hidden;
      width : 100%;
    }
    .space {
      width : 999em;      /* lots of space for tabs */
      overflow : hidden;  /* clear floats */
    }
    .tabs {
      float : left;       /* shrink so we can determine tabs width */
    }
    .tab {
      float : left;       /* line tabs up */
    }
    

    这只是该技术所需的基本内容.其中一些东西可以通过jQuery应用,

    添加事件到窗口调整大小.

    $(window)
      .resize(function () {
        var sz = $('.window');
        var ul = sz.find('ul');
        if ( sz.width() < ul.width() ) {
          $('.scrollable a.left, .scrollable a.right').show();
        }
        else {
          $('.scrollable a.left, .scrollable a.right').hide();
        }
      })
      .trigger('resize');
    

    添加事件以滚动按钮.

    $('.scrollable a.left').hover(
      function (e) {
        var sz = $('.window');
        sz.animate({ scrollLeft : 0 }, 1000, 'linear');
      },
      function (e) {
        $('.window').stop();
      });
    
    $('.scrollable a.right').hover(
      function (e) {
        var sz = $('.window');
        var margin = sz.find('ul').width() - sz.width();
        sz.animate({ scrollLeft : margin }, 1000, 'linear');
      },
      function (e) {
        $('.window').stop();
      });
    

    完成!

    宽度也可以通过循环" tab "元素并求和upp 来计算outerWidth.如果您具有完全控制权,则这是不必要的,但对于完整的独立插件可能是更好的选择.



    1> Borgar..:

    最接近你想要的东西可能是jscrollhorizo​​ntalpane.我从来没有使用它,所以我不能保证它作为解决这个特定问题的有效性.

    如果你想尝试它,这种小部件不应该很难.我将分解我将使用的近似方法:

    确保使用大量包装纸.

    • ...
    • ...
    • ...

    我们要做的是在" window "元素内来回移动" space "元素.这可以通过设置为" window "和 " space "然后将其转换为使用来完成,但我将使用该属性.position:relativeposition:absoluteleft:-??pxscrollLeft

    添加一些CSS.

    .window {
      overflow : hidden;
      width : 100%;
    }
    .space {
      width : 999em;      /* lots of space for tabs */
      overflow : hidden;  /* clear floats */
    }
    .tabs {
      float : left;       /* shrink so we can determine tabs width */
    }
    .tab {
      float : left;       /* line tabs up */
    }
    

    这只是该技术所需的基本内容.其中一些东西可以通过jQuery应用,

    添加事件到窗口调整大小.

    $(window)
      .resize(function () {
        var sz = $('.window');
        var ul = sz.find('ul');
        if ( sz.width() < ul.width() ) {
          $('.scrollable a.left, .scrollable a.right').show();
        }
        else {
          $('.scrollable a.left, .scrollable a.right').hide();
        }
      })
      .trigger('resize');
    

    添加事件以滚动按钮.

    $('.scrollable a.left').hover(
      function (e) {
        var sz = $('.window');
        sz.animate({ scrollLeft : 0 }, 1000, 'linear');
      },
      function (e) {
        $('.window').stop();
      });
    
    $('.scrollable a.right').hover(
      function (e) {
        var sz = $('.window');
        var margin = sz.find('ul').width() - sz.width();
        sz.animate({ scrollLeft : margin }, 1000, 'linear');
      },
      function (e) {
        $('.window').stop();
      });
    

    完成!

    宽度也可以通过循环" tab "元素并求和upp 来计算outerWidth.如果您具有完全控制权,则这是不必要的,但对于完整的独立插件可能是更好的选择.

  • 推荐阅读
    路人甲
    这个屌丝很懒,什么也没留下!
    DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
    Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有