我正在尝试为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
最接近你想要的东西可能是jscrollhorizontalpane.我从来没有使用它,所以我不能保证它作为解决这个特定问题的有效性.
如果你想尝试它,这种小部件不应该很难.我将分解我将使用的近似方法:
确保使用大量包装纸.
我们要做的是在" window "元素内来回移动" space "元素.这可以通过设置为" window "和 " space "然后将其转换为使用来完成,但我将使用该属性.position:relative
position:absolute
left:-??px
scrollLeft
添加一些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
.如果您具有完全控制权,则这是不必要的,但对于完整的独立插件可能是更好的选择.
最接近你想要的东西可能是jscrollhorizontalpane.我从来没有使用它,所以我不能保证它作为解决这个特定问题的有效性.
如果你想尝试它,这种小部件不应该很难.我将分解我将使用的近似方法:
确保使用大量包装纸.
我们要做的是在" window "元素内来回移动" space "元素.这可以通过设置为" window "和 " space "然后将其转换为使用来完成,但我将使用该属性.position:relative
position:absolute
left:-??px
scrollLeft
添加一些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
.如果您具有完全控制权,则这是不必要的,但对于完整的独立插件可能是更好的选择.