5

JSFiddle 不言自明

  • 打开这个小提琴http://jsfiddle.net/NfRN5/
  • 单击输入字段
  • 更改浏览器上的选项卡
  • 回到小提琴 - 宽度效果将再次运行 =/

如何防止这种情况?当用户离开然后回来时使其稳定

input.search-field {
width:100px;
transition: all 1s ease-in-out;
}
input.search-field:focus {
width:300px;
}

<input type="search" class="search-field">
4

2 回答 2

1

在聊天中你提到你试图模仿 Apple.com 的搜索栏。

在他们的 JS 达到顶峰后,我想出了这个小提琴:http: //jsfiddle.net/NfRN5/7/

诀窍是仅blur在鼠标按下或某些keypresses 后的 10 毫秒内输入。

var $search = $('.search-field'), searchBlurable = false

$search
// Always focus when focused
.focus(function(e){
    $search.addClass('focused')
    searchBlurable = false
})

// Only blur after mouse or key events
.blur(function(e){
    if(searchBlurable){
        $search.removeClass('focused')
    }
})

// Set Blurable for tab/esc
.keydown(function(e){
    if(e.keyCode === 27 || e.keyCode === 9) { // esc || tab
        searchBlurable = true
        $search.blur()
    }
})

// Set Blurable for 10ms after a mousdown
$('html').mousedown(function(e){
    searchBlurable = true
    window.setTimeout(function () {
        searchBlurable = false
    }, 10)    
})
于 2013-10-26T02:28:26.027 回答
0

我不相信这可以在纯 CSS 中实现。

尝试一些 JavaScript / jQuery:http: //jsfiddle.net/NfRN5/3/

var $fields = $(".search-field")

$fields.focus(function(){
    $fields.removeClass('focused')
    $(this).addClass('focused')
})

您不能使用该blur事件,因为当您更改选项卡时浏览器会调用该事件。

我对您的应用程序中的其余代码的外观做了一些假设,您可能需要添加一些其他触发器来删除焦点类。

于 2013-10-26T01:12:23.793 回答