【发布时间】:2016-12-14 22:04:04
【问题描述】:
这是我之前question的延续。
我设法通过添加条件e.which === 13 来修复“动画在每次连续击键时暂停”,该条件会在按下 Enter 键时检测并生成动画。
这是上一个的工作原理:
如您所见,在输入换行符然后连续击键后,动画滞后,这意味着动画在每次击键时执行。
这些是修改后的,只有在按下 Enter 后才会动画:
它工作顺利(虽然在录制过程中有点滞后)。
这是删除每个字符时的工作原理(不是长按):
如您所见,动画效果不佳,因为当您连续删除每个角色时,动画会暂停,就像第一次尝试一样。
所以我现在想要实现的是相反的,在删除换行符后平滑动画。
这是一个实时代码:
var kAnimationSpeed = 250;
var kPadding = 10;
$('div[contenteditable]').on('blur keyup paste input', function(e) {
var styleElement = $(this).prev();
var editorHeight = $(this).height();
var styleElementHeight = styleElement.height();
if (editorHeight !== styleElementHeight - kPadding * 2 && e.which === 13 || e.which === 8) {
styleElement.stop().animate({ height: editorHeight + kPadding * 2 }, kAnimationSpeed);
}
});
.autogrowWrapper {
position: relative;
}
.autogrow {
border: 1px solid rgb(0, 0, 0);
height: 40px; /* line-height + 2 * padding */
}
div[contenteditable] {
outline: none;
line-height : 20px;
position: absolute;
top: 10px; /* padding */
left: 10px; /* padding */
right: 10px; /* padding */
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="autogrowWrapper">
<div class="autogrow"></div>
<div contenteditable="true"></div>
</div>
如何在删除换行符时实现流畅的动画,或者如何仅在删除换行符时进行动画处理?
【问题讨论】:
-
在您的
if语句中,尝试添加类似if ( ! $(this).is(':animated') )的内容,因为延迟可能是在第一次调用stop()等之后多次调用动画。跨度> -
当我使用
&&运算符添加该条件时,仍然相同。但是当我尝试||运算符时,它会影响输入过程。这意味着它在上一次尝试中的工作方式相同。 :v -
可能是这样的 jsfiddle.net/yfSUk/3 但用 left 代替 top 并且当值更改时继续播放动画
-
@Squirrl 如何获得换行符?
标签: javascript jquery html animation contenteditable