gpt4 book ai didi

javascript - CKEditor autogrow插件垂直滚动条闪烁问题

转载 作者:数据小太阳 更新时间:2023-10-29 04:18:36 25 4
gpt4 key购买 nike

我在使用 CKEditor 自动增长插件时遇到问题:

按下回车键(在自动增长超过最小高度后),文本内容会抖动(向上跳一行然后又向下跳),垂直滚动条时而闪烁。自动增长有效,但用户体验不稳定。

我可以通过指定 scrolling="no"和 overflow="hidden"隐藏垂直滚动条,但文本内容仍然抖动。

我在 ckeditor.js 中禁用滚动:

<iframe scrolling="no" style="width:100%;height:100%;overflow:hidden;" frameBorder="0" title="'+E+'"'+' src="'+W+'"'+' tabIndex="'+(b.webkit?-1:C.tabIndex)+'"'+' allowTransparency="true"'+'></iframe>

CKEditor初始化代码:

       CKEDITOR.replace('Description',
{
sharedSpaces:
{
top: 'topSpace',
bottom: 'bottomSpace'

},
extraPlugins: 'autogrow,tableresize',
removePlugins: 'maximize,resize,elementspath',
skin: 'kama',
toolbar: [['Format', 'Font', 'FontSize'], ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat'], ['TextColor', 'BGColor'], ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'], ['NumberedList', 'BulletedList'], ['Outdent', 'Indent'],
'/', ['Link', 'Unlink', 'Anchor'], ['Image', 'Flash', 'Table', 'HorizontalRule', 'SpecialChar'], ['PasteText', 'PasteFromWord'],['Cut','Copy','Paste'], ['Undo', 'Redo'], ['Find', 'Replace'], ['SpellChecker']],
toolbarCanCollapse: false,
pasteFromWordRemoveFontStyles: false,
enterMode: CKEDITOR.ENTER_BR,
shiftEnterMode: CKEDITOR.ENTER_P,
autoGrow_minHeight: 300

})

有什么方法可以避免文本内容在按下回车键时跳跃/移动(在自动增长超过最小高度之后)?

最佳答案

我今天一直在测试一个修复程序,我认为我有一个适用于所有主要浏览器的有效解决方案。此外,我还修复了水平滚动条大小问题(水平滚动条不会增加编辑器的大小)。但这最终有点困惑(为了简单起见,滚动条高度被硬编码为 17 像素)所以我将为您提供两个版本,有和没有水平滚动条修复。

我知道正确的方法是创建一个补丁并建议它在 CKEditor 的下一个版本中实现,但这需要一段时间,所以同时这是你可以做的。您可以从下面的链接下载修改后的压缩 plugin.js 文件,并将其放入您的 CKEditor 路径/plugins/autogrow/plugin.js

那么改变了什么?

我将通过可读的未压缩(_source 文件夹)文件来解释这些修改,而压缩文件则很难阅读和理解。

我对用于计算编辑器新高度的自动增长临时标记做了一些小修改。这是 _source(未压缩)autogrow/plugin.js 第 19 行中标记代码的新版本。

var marker = CKEDITOR.dom.element.createFromHtml( '<span style="margin:0;padding:0;border:0;clear:both;width:1px;height:0px;font-size:0;display:block;">&nbsp;</span>', doc );

因此高度从 1 像素变为零像素,标记元素内始终打印不间断空格,字体大小强制为零。经过这些修改后,这实际上解决了问题 - 我将标记更改为通过 1 毫秒超时(未压缩的 plugin.js 文件中的第 24 行)立即从 DOM 中删除标记。

setTimeout(function() {
marker.remove();
},1);

水平滚动条修复

这有点无聊。我刚刚添加了检查编辑器 scrollWidth 是否大于 clientWidth,如果是,则在检查 newHeight 最小和最大允许值之前向 newHeight 和 currentHeight 变量添加 17 个像素。

// TODO: calculate horizontal scrollbar height instead of using static 17 pixels
if ( scrollable.$.scrollWidth > scrollable.$.clientWidth ) {
newHeight += 17;
currentHeight += 17;
}

newHeight = Math.max( newHeight, min );
newHeight = Math.min( newHeight, max );

不是使用 17 像素硬编码值,而是 How can I get the browser's scrollbar sizes? 中描述的方法(或类似的东西)可用于计算滚动条大小以使此修复更合适。

关于javascript - CKEditor autogrow插件垂直滚动条闪烁问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8484357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com