Bitcron默认没有表情,日常评论互动性可能就会稍差一些。一个表情有时候可以将文字表达的更简洁到位。关于表情这一功能,@林木木( target=_blank)大神已经专门写过两篇关于添加表情的文章,我直接借鉴了过来。不过为了减少请求,让网站加载的更快速,本次使用的是Emoji表情,而非图片表情的形式。具体的代码也稍有所区别,效果可评论测试。
准备表情
在模板根目录建立一个emoji.jade文件,文件设置好需要循环输出的表情,原本想通过建立数组,用each语法遍历输出,结果提示“need more than 1 value to unpack”。
- var emoji={"抛媚眼":"😉","大笑":"😀","微笑":"🙂","可爱":"😊"……}
each name,date in emoji
a.insert_emoji(href="javascript:;",data-emoji=name,title=date)=name
后来改成了混合宏(mixins),传递了两个参数,一个是表情(name),一个是表情提示(date)。表情具体为哪些,可以自行确定。
mixin emoji(date,name)
a.insert_emoji(href="javascript:;",data-emoji=name,title=date)=name
.comment-emoji(style="display:none")
+emoji("抛媚眼","😉")
+emoji("大笑","😀")
……
调用输出
建议在post.jade文件的+post.comments_as_html( )
下面调用emoji.jade
+post.comments_as_html()
include emoji.jade
+h.load("/template/emoji.js")
实时插入
通过js调整下表情元素的位置,只有访客点击评论框输入评论时才会显示,并实现表情的实时点击插入。因为模板加载了tooltip功能,因此选定表情时会自动提示该表情的含义。建议将emoji.js代码加载到模板评论位置,以避免非评论页面后台提示错误。
(function($) {
$.fn.extend({
insertAtCaret: function(myValue) {
var $t = $(this)[0];
if (document.selection) {
this.focus();
sel = document.selection.createRange();
sel.text = myValue;
this.focus();
} else if ($t.selectionStart || $t.selectionStart == '0') {
var startPos = $t.selectionStart;
var endPos = $t.selectionEnd;
var scrollTop = $t.scrollTop;
$t.value = $t.value.substring(0, startPos) + myValue + $t.value.substring(endPos, $t.value.length);
this.focus();
$t.selectionStart = startPos + myValue.length;
$t.selectionEnd = startPos + myValue.length;
$t.scrollTop = scrollTop;
} else {
this.value += myValue;
this.focus();
}
}
})
})(jQuery);
$(document).ready(function() {
var nf=$("#new_comment_form").children().eq(0);
$(".comment-emoji").insertBefore(nf);
$('#new_comment_form textarea').click(function() {
$('.comment-emoji').fadeIn("slow");
});
});
$(document).on('click', '.insert_emoji',function(event) {
event.preventDefault();
var emoji = $(this).data('emoji');
$('.textarea_box').insertAtCaret(' ' + emoji + ' ');
}); `
调整美化
为了可以更清晰的识别表情,需要利用CSS进行一番调整,通过CSS3transform:scale()
属性进行2D缩放,这样能够让选定的表情单独放大确认。
.comment-emoji a {padding: 4px;font-size: 16px;border: none;display: inline-block;-webkit-transition-duration: .3s;transition-duration: .3s;}
.comment-emoji a:hover{-webkit-transform: scale(1.5);-moz-transform: scale(1.5);transform: scale(1.5);}
附件下载
点击下载相关源码:⇩emoji.rar( target=_blank),解压后按路径丢到模板对应位置,并按照上述第二步进行调用和第四步CSS调整。