截断插件问题
Truncate Plugin Problem
我目前正在创建一个名为Truncate的jQuery插件-它的目的是缩短段落。
问题是,当你第一次点击显示更多而不是滑动到段落的隐藏部分时,它只是显示它。
我的默认值是:
var defaults = {
length: 120,
MinExtra: 50,
ShowMoreText: 'Show More',
ShowLessText: 'Show Less',
EllipsisText: '...',
ShowLessAndMoreColor: 'black',
SlideDownTime: 700,
SlideUpTime: 700
};
然后我有一个小变量使它起作用:
var options = $.extend(defaults, options);
加上一些额外的代码:
this.each(function() {
obj = $(this);
var body = obj.html();
obj1 = $(this);
var body1 = obj1.html();
主代码是:
if (body1.length > options.length + options.MinExtra) {
var splitLocation = body1.indexOf(' ', options.length);
if (splitLocation != -1) {
// truncate tip
splitLocation = body1.indexOf(' ', options.length);
var str1 = body1.substring(0, splitLocation);
var str2 = body1.substring(splitLocation, body1.length - 1);
obj.html(str1 + '<span class="truncate_ellipsis">' + options.EllipsisText + '</span>' + '<span class="truncate_more">' + str2 + '</span>');
obj.find('.truncate_more').css("display", "none");
// insert more link
obj.append('<div class="clearboth" style="cursor:pointer;color:' + options.ShowLessAndMoreColor + ';">' + '<a href="#" class="truncate_more_link">' + options.ShowMoreText + '</a>' + '</div>');
// set onclick event for more/less link
var moreLinki = $('.truncate_more_link', obj1);
var moreContenti = $('.truncate_more', obj1);
var ellipsisi = $('.truncate_ellipsis', obj1);
moreLinki.click(function() {
if (moreLinki.text() == options.ShowMoreText) {
moreContenti.slideDown(options.SlideDownTimer);
moreLinki.text(options.ShowLessText);
ellipsisi.css("display", "none");
}
else {
moreContenti.slideUp(options.SlideUpTime);
moreLinki.text(options.ShowMoreText);
ellipsisi.css("display", "inline");
}
return false;
});
}
}
});
};
})(jQuery);
你可以使用:
$(document).ready(function() {
$('#example').Truncate();
});
或者用它定义选项:
$(document).ready(function() {
$('#example').Truncate({
length: 120,
MinExtra: 50,
ShowMoreText: 'Show More',
ShowLessText: 'Show Less',
EllipsisText: '...',
ShowLessAndMoreColor: 'black',
SlideDownTime: 700,
SlideUpTime: 700
});
});
还是不明白这个问题?请参见示例。
希望有人能给我任何主意如何阻止这种情况。谢谢!
这是因为span最初的显示设置为inline
。内联元素不使用宽度和高度,所以你不能让它们动起来。一旦你完成了一个slideDown
,它就变成了inline-block
,这样接下来的slideUp
和slideDown
动画就可以工作了。
您可以在隐藏它之前将其设置为inline-block
来"修复"它。
obj.find('.truncate_more').css("display", "inline-block").hide();
你可以在这里试试:http://jsfiddle.net/LAhsp/2/
唯一的问题是它出现在新行上。但这在你的版本中也会发生(在最初打开和关闭它之后)。
相关文章:
- 我的jQuery插件参数没有正确启动,遇到了问题
- TableExport jquery插件:文件名和扩展名问题
- Jquery标签插件粘贴问题
- 使用科尔多瓦媒体插件时出现问题
- 我的Firefox插件和跨域https存在问题
- 应用程序版本插件问题
- SlimScroll JQuery插件中的滚动条问题
- 由于jQuery问题,在实现Disqus插件时出现问题
- browserfy的brfs插件中出现问题
- Ruby(rails)时间戳和jQuery timeago插件出现问题
- jQuery表单验证插件's只有文字字段的问题
- IE10中使用jQuery floatThead插件(1.2.10)的布局问题
- [contenteditable]元素和jQuery验证插件的问题
- IE9上的Jquery表单插件问题
- Cordova/phonegap 插件兼容性问题 - org.chromium.socket / org.chromiu
- 这个快照 svg 插件有什么问题
- 刷新整页.js插件的问题
- Phonegap facebook插件:安卓系统的各种问题
- jQuery插件和 ASP.NET 内容页面的问题
- 通过Chrome自定义插件在浏览器当前页面中选择元素的问题