text area scroll bar custom css
2680 ワード
function updatejScrollPaneTextArea(textareaSelector, settings) {
var textareaClone = $('<div style="word-wrap:break-word" />').appendTo($(textareaSelector).parent());
var copyAttributes = ['font-family','font-size','font-weight','letter-spacing','word-spacing','line-height','width'];
for (var i = 0; i < copyAttributes.length; i++) {
textareaClone.css(copyAttributes[i], $(textareaSelector).css(copyAttributes[i]));
}
textareaClone.html(' ');
var heightPerRow = textareaClone.height();
textareaClone.html($(textareaSelector).val().replace(/
/g, '<br />'));
var overallHeight = textareaClone.height();
$(textareaSelector).attr('rows', Math.round(overallHeight / heightPerRow));
$(textareaSelector).css('height', 'auto');
textareaClone.html($(textareaSelector).val().replace(/
/g, '<br />') + ' ');
var cursorPosition = textareaClone.height() - heightPerRow;
textareaClone.remove();
var jspAPI = $(textareaSelector).parent().parent().parent();
var scrollpaneY = jspAPI.data('jsp').getContentPositionY();
var scrollpaneHeight = $(textareaSelector).parent().parent().parent().height();
jspAPI.data('jsp').reinitialise(settings);
if ((cursorPosition + heightPerRow) >= (scrollpaneY + scrollpaneHeight)) {
jspAPI.data('jsp').scrollToY(scrollpaneY + cursorPosition + heightPerRow - scrollpaneHeight);
}
if (cursorPosition <= scrollpaneY) {
jspAPI.data('jsp').scrollToY(cursorPosition);
}
}
function jScrollPaneTextArea(textareaSelector, settings) {
var width = $(textareaSelector).outerWidth();
var height = $(textareaSelector).outerHeight();
$(textareaSelector).wrap('<div />');
$(textareaSelector).parent().css('height', height).css('width', width).css('overflow', 'auto');
$(textareaSelector).parent().jScrollPane(settings);
$(textareaSelector).bind('keyup', function() {
updatejScrollPaneTextArea(textareaSelector, settings);
});
$(textareaSelector).bind('click', function() {
updatejScrollPaneTextArea(textareaSelector, settings);
});
updatejScrollPaneTextArea(textareaSelector, settings);
}