使用Emojione Area在Firefox下光標異常的解決方法

Emojione Area是一款好用的jQuery表情插件,大方簡潔而且美觀。
Emojione Area

但是由於插件使用了contenteditable這個屬性,並且使用了::before這個pseudo element,導致firefox的顯示bug。具體問題是隻要鼠標再次點擊這個元素,光標會移到右側。這個bug屬於firefox,並且在ie內核下也可能會顯示不正常,只需要google firebox contenteditable cursor就能看到很多反應該bug的信息。

網上給出的contenteditable顯示問題解決方法通常是給contenteditable加上position: relative然後給[contenteditable="true"]:empty:before加上position: absolute,但是這種方法會導致placeholder和光標位置異常

所以目前的解決辦法是,給contenteditable綁定mouseup事件,檢查如果元素處於:focus狀態且沒有選中的文字,那麼就運行event.preventDefault()來阻止光標異常移動:

$('#emojione-container').emojioneArea({
    pickerPosition: 'top',
    filtersPosition: 'top',
    useInternalCDN: false,
    event: {
        /**
        * @param {jQuery} editor
        * @param {Event} event
        */
        mouseup: function(editor, event) 
        {
            if (editor.is(':focus')) {
                var sel = getSelection().toString();
                if (!sel) {
                    event.preventDefault();
                }
            }
        }
    }
});

雖然使用了js但是不會出現顯示異常問題,有更好的解決辦法歡迎交流指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章