我一直在寻找一个 jQuery 选框,虽然它听起来很简单,但我找不到任何适合我需要的工作代码。
我的要求是:
- 它必须支持方向(特别是从右到左)。
- 它必须支持使用无序列表而不是单个字符串作为源。
- 它应该看起来像经典的选框。
经过搜索,我只发现了一些与我正在寻找的东西有点相符但都有严重缺陷的地方。
第一个是liScroll,虽然看起来不错,但缺少方向支持。默认情况下它只是从左到右,没有选项可以改变它。尽管我尝试将代码更改为支持从右到左,但可惜我失败了。
我也尝试过Giva Labs Marquee 插件,但据我所知,它也不支持方向。
最后一个是 [jQuery WebTicker][2],乍一看它似乎很完美,但结果却有一个奇怪的错误/行为。当每个项目都很短时它工作正常,但在我的情况下,每个项目本身都是一个很长的字符串,在这种情况下它的行为不规律。当每个项目结束时,它不是在其尾部平滑地显示下一个,而是显示很多空白,并且项目感觉它们跳跃而不是滚动/滑动。
我知道很多人一般不喜欢选框,但我向你保证,我不是自愿这样做的。所以请耐心等待。
提前致谢。
编辑: 我已经设法让simpleScroll(感谢Ceryl Wiltink)大部分工作,但我遇到了一个小问题。我使用“方向:向后”,这意味着文本从左向右滚动,但问题是文本从最右边而不是最左边开始滚动,导致列表中的第一项不可见。
我看了一下 JS,我猜问题出在这部分(else 块)[原始 JS 中的第 143 到 162 行]
if (this.isAuto && this.o.autoMode=='loop') {
this.$list.css(this.dimension,this.posMax+(this.itemMax*addItems) +'px');
this.posMax += (this.clipMax - this.o.speed);
if (this.isForwards) {
this.$items.slice(0,addItems).clone(true).appendTo(this.$list);
this.resetPosition = 0;
} else {
this.$items.slice(-addItems).clone(true).prependTo(this.$list);
this.resetPosition = this.$items.length * this.itemMax;
//due to inconsistent RTL implementation force back to LTR then fake
if (this.isRTL) {
this.$clip[0].dir = 'ltr';
//based on feedback seems a good idea to force float right
this.$items.css('float','right');
}
}
但是,无论我尝试修改什么值,它都会进一步搞砸,我假设这是关键部分
this.resetPosition = this.$items.length * this.itemMax;
但对这些价值观的任何修改最终都会弊大于利。我什至在正确的地方工作吗?或者问题可能完全在其他地方?