IE11中,经过带有过渡效果的CSS变换后,光标位置错误。

4

这里是 jsfiddle

这是一个IE特有的bug,我正在寻找解决方法。

当我对一个文本输入框应用CSS transform: translate,并且该输入框获得焦点,在transition设置为有效值时,光标仍停留在旧位置,而元素已经移动。

一旦你开始输入,它就会移动到正确的位置,但在此之前,光标顽固地闪烁在旧位置。

这段代码说明了问题......再次强调,这是一个IE特有的bug。

var toggleTop = function(){
    $('.input-container').toggleClass('top');
    $('#the-input').focus();
}

$('#the-button').click(toggleTop);
.input-container {
    top: 100px;
    left: 100px;
    position: fixed;
    transition: all 1s;
}

.input-container.top {
    transform: translateY(-100px);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='input-container'>
    <input type='text' id='the-input'></input>
</div>
<button id='the-button'>Click Me!</button>

2个回答

4

一年过去了,我也遇到了这个问题。这里是我使用的angular.js指令来解决它,基于被接受的答案的代码和解释。

angular.module('my.directive')
  .directive('custom-auto-focus', function ($timeout) {
    return {
      link: function (scope, elm) {
        $timeout(function() {
          elm[0].focus();
        }, 350);
      }
    };
  }); 

3

在聚焦元素之前,等待过渡结束有何不可呢?考虑到您正在使用CSS过渡,应该可以访问transitionend事件。
以下是解决方法:

var toggleTop = function () {
    var inputContainer = $('.input-container'),
        input = inputContainer.find('#the-input');

    inputContainer.toggleClass('top');

    inputContainer.one('transitionend', function () {
        input.focus();
    });
};


$('#the-button').click(toggleTop);

Updated JSFiddle


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接