使用jQuery实时获取评论头像

尚寂新
尚寂新
2018/07/07 11:36

昨天在泽泽那块看到了《使用AJAX实时获取评论头像》一文,感觉这种在主题里内嵌API的方式会浪费服务器性能,毕竟频繁访问API多多少少会对机器产生一些影响,故有此文

代码部分

$(document).ready(function(){
var getavatar = md5($("#mail").val());
$("#jq-avatar-replace").attr('src','https://gravatar.loli.net/avatar/'+ getavatar); 
});
$('#mail').bind('input propertychange', function() {
    var getavatar = md5($("#mail").val());
    $("#jq-avatar-replace").attr('src','https://gravatar.loli.net/avatar/'+ getavatar); 
});

说明:#mail为评论信息填写窗口内的邮箱部分,将填邮箱的<input>标签赋上id="mail"即可
#jq-avatar-replace为头像的实时显示,将要显示实时头像的<img>标签赋上id="jq-avatar-replace"即可
https://gravatar.loli.net/avatar/的头像源可按照实际需求进行更换
第一个function是考虑到非首次评论,第二个function是为了实现当输入框内容有变动时头像能跟着变
需要引用jquery和blueimp-md5这两个js文件,jq和这个库需要在上述代码运行之前加载

为啥登录用户无法显示

去Typecho的模板文件夹里找到comments.php,找到<?php if($this->user->hasLogin()): ?>这个东东,然后在他下面另起一行,写上<input id="mail" style="display:none" value="<?php $this->remember('mail'); ?>"/>即可
注:Typecho的邮箱信息是存在Cookie里的,此方法并不是暴露邮箱隐私的做法

主题里有pjax怎么办

本人的主题有pjax,刚才弄的时候忽视了这一点,故重新弄一遍代码,使用pjax方案的可以将上面的代码换成下面的新版代码,如果主题不是pjax(ajax)的可以随意

function avatar_replace_load(){
    var getavatar = md5($("#mail").val());
    $("#jq-avatar-replace").attr('src','https://gravatar.loli.net/avatar/'+ getavatar); 
}
$('#mail').bind('input propertychange', function() {avatar_replace_load();});
$(document).ready(function(){avatar_replace_load();});

重载代码有两条

avatar_replace_load();
$('#mail').bind('input propertychange', function() {avatar_replace_load();});

重载,即重新运行,故想办法让代码在换页面之后再运行一次就ok了

已有 6 条评论 (旧评论在前)
  1. 泽泽 友链
    回复
    2018-07-07 18:07 Windows NT10

    标题typecho可以删掉,因为你这个是纯前端实现的,所有网页都可以通用

    1. 尚寂新 博主
      回复
      2018-07-08 13:04 Windows NT10

      已改23333333

  2. laoye
    回复
    laoye
    2018-08-23 08:35 macOS

    你好,请问按照你的方法,那么 音乐播放器是不是也可以放在重新加载里,比如:Meting();
    我不知道放在那一段里,是不是还需要除Meting();代码外的其他代码,,

    1. 尚寂新 博主
      回复
      2018-08-23 12:22 Android 7.1.2

      理论上是可以的 重载的实质就是让代码重新运行一次 甚至还可以把整个完整的js放在重载代码那块去的 只不过现在看到的短短的是因为完整代码已经被写到function里了直接调用这个function就可以 instantclick和jq-pjax放重载代码的位置略有不同 如果用的是jq的那个pjax的话直接f12一下这个页面就能看到我应用到我博客的例子了

      1. laoye
        回复
        laoye
        2018-08-24 10:25 macOS

        https://i-meto.com/meting-typecho/
        我用的是这个播放器,你有研究过吗?
        我的主题用的是instantclick的,你帮我看一下被,谢谢,我试了没成功,
        http://galaa.com.cn/down/footer.php.zip

  3. ssr
    回复
    ssr
    2018-08-30 16:34 Windows 7

    整理的好清楚啊,学习一下

添加新评论 (Markdown Supported)
(ノ°ο°)ノ