我用twikoo也有好几年了,说实话从idisqus换过来后使用起来的感觉是非常舒适的,后来也试过valin(好像是这个名字)之类的其他自建评论工具,但是使用起来觉得没有twikoo舒服,还是很推荐这个评论工具的。
但是,twikoo的表情工具说实话是有些简陋的,虽然可以自定义Emotion.json来丰富可用的表情列表。但是界面不美观,可选择范围始终太窄,所以今天折腾一下它。
emoji-mart是github上开源的一个emoji前端组件,基本上和现在手机上输入法使用的emoji功能一致,而且提供的emoji图标更为丰富,包含以下特性
总的来说是一款相当优秀的开源工具,但是无法动态更改主题颜色(可能是我的使用方式不对,希望有大佬指证),也有外国人吐槽过这个组件,那个人还另外写了另外一个工具:emoji-picker-element 。
利用twikoo的init的回调事件 onCommentLoaded
我们可以在评论加载完成后开始集成emoji-mart。
关闭掉twikoo的原生表情功能
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/emoji-mart@latest/dist/browser.js">
<div id="tcomment"></div>
<script>twikoo.init({
envId: '{{@custom.disqus_shortname}}',
el: '#tcomment',
onCommentLoaded: function () {
console.log('评论加载完成');
//初始化自定义emojimart
const pickerOptions = {
onEmojiSelect: function(d){ $('.el-textarea__inner').val($('.el-textarea__inner').val() + d.native) },
locale: 'zh',theme : 'dark'
}
const picker = new EmojiMart.Picker(pickerOptions)
//把html注入网页内
$('.tk-row-actions-start').append(picker)
//因为div默认不能使用focus事件,加上tabindex才可以
$('em-emoji-picker').attr('tabindex','5')
$('.OwO').show().click(function(){
$('em-emoji-picker').toggle()
$('em-emoji-picker').focus()
})
$('em-emoji-picker').blur(function(){
$('em-emoji-picker').toggle()
})
}
})
</script>
em-emoji-picker{
display: none;
position: absolute;
top: 3rem;
z-index: 2;
}
因为目前的emoji-mart没办法动态改变主题,所以目前暂时还没有实现主题的联动,希望作者后续能进行改进。