jQuery+ajax实现实用的点赞插件代码


Posted in Javascript onJuly 06, 2016

之前给大家总结了jQuery插件开发的两种方式,这里就实践一下,做一款点赞特效插件,先看看效果吧:

jQuery+ajax实现实用的点赞插件代码

    废话少说,上代码:

//***扩展对象点赞插件、点赞特效***//
//***Zynblog**//
//***2016-5-11**//
//***用法:jQuery('.praisebtn').praise(options);***//
; (function ($) {
 $.fn.praise = function (options) {
  var defaults = {
   obj: null, //jq对象,针对哪个对象使用这个tipsBox函数
   str: "+1", //字符串,要显示的内容;也可以传一段html,如: "<b style='font-family:Microsoft YaHei;'>哈哈</b>"
   startSize: "10px", //动画开始的文字大小
   endSize: "30px", //动画结束的文字大小
   interval: 600, //文字动画时间间隔
   color: "red", //文字颜色
   callback: function () { } //回调函数
  };
  var opt = $.extend(defaults, options); //合并参数
  $("body").append("<span class='num'>" + opt.str + "</span>");
  var box = $(".num");
  var left = opt.obj.offset().left + opt.obj.width()/2; //span btn左侧距离加上自身宽度的一半
  var top = opt.obj.offset().top - opt.obj.height();//顶部距离减去自身的高度
  box.css({
   "position": "absolute",
   "left": left + "px",
   "top": top + "px",
   "z-index": 9999,
   "font-size": opt.startSize,
   "line-height": opt.endSize,
   "color": opt.color
  });
  box.animate({
   "font-size": opt.endSize,
   "opacity": "0",
   "top": top - parseInt(opt.endSize) + "px"
  }, opt.interval, function () {
   box.remove();
   opt.callback();
  });
 }
})(jQuery);

//点赞图标恢复原样
function niceIn(prop) {
 prop.find('.praisenum').addClass('niceIn').css("color", "red");
 setTimeout(function () {
  prop.find('.praisenum').css("color", "#45BCF9").removeClass('niceIn');
 }, 1000);
};

用法:在需要用到点赞插件的页面中引入jquery.js、以及这个插件.js,在$(function(){})中给"[object Object]"注册click事件即可。

HTML:

<span class="praisebtn">
  <img src="/Content/images/ico_praise.png" class="praisenum" data-bd-imgshare-binded="1">
  (<a href="#" praise-flag="0" data-id="7">2</a>)
  //praise-flag="0" 记录点赞标识(是否已赞过),data-id记录文章id
</span>

jQuery(本站并不强制访客进行注册登录后才能点赞,因此并不限制访客的点赞次数):

//点赞特效+Ajax统计点赞数量
 pariseShow: function () {
  //使用自定义的点赞特效插件,在zynblog.js前要先引入这个插件
  //jquery给暂未生成的标签绑定事件要用on('事件','对象','事件句柄')
  jQuery(document).on("click", ".praisebtn", function (e) {
   e.preventDefault();
   //获取被点赞文章的id praise-flag:0没攒过,1:赞过了
   //页面刚生成时,可以从库中确定该用户是否点赞,并为praise-flag属性赋初值
   //这里没必要那么严谨,所以初值均为1,(顶多是再在cookie中给个标记)
   var praiseFlag = jQuery(this).children('a').attr('praise-flag');
   //alert(praiseFlag);
   var praiseArtId = jQuery(this).children('a').attr('data-id');
   //alert(praiseArtId);

   //1. 如果没赞过
   if (praiseFlag == 0) {
    var curPraise = jQuery(this).children('a');
    curPraise.attr('praise-flag', "1");//先把点赞标识的属性值设为1

    jQuery(this).praise({
     obj: jQuery(this),
     str: "+1",
     callback: function () {
      jQuery.post("/Archives/PraiseStatic", { "artId": praiseArtId }, function (data) {
       if (data.Status == 1) {
        var praisecount = parseInt(curPraise.text().match(/\d+/));
        curPraise.text(curPraise.text().replace(praisecount, praisecount + 1));
       } else if (data.Status == 2) {
        alert(data.Message);
       } else if (data.Status == 0) {
        alert(data.Message);
       }
      });
     }
    });
    niceIn(jQuery(this));
   } else if (praiseFlag == 1) {
    //2. 如果已经已赞
    jQuery("body").append("<span class='praisetip'>您已赞过~</span>");
    var tipbox = jQuery(".praisetip");
    var left = jQuery(this).offset().left;
    var top = jQuery(this).offset().top + jQuery(this).height();
    tipbox.css({
     "position": "absolute",
     "left": left + "px",
     "top": top + "px",
     "z-index": 9999,
     "font-size": "12px",
     "line-height": "13px",
     "color": "red"
    });
    tipbox.animate({
     "opacity": "0"
    }, 1200, function () {
     tipbox.remove();
    });
   }
  });
 },

下载地址:

 jquery.praise.js

Javascript 相关文章推荐
jQuery 版本的文本输入框检查器Input Check
Jul 09 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
Nov 22 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
Jun 16 Javascript
JavaScript生成二维码图片小结
Dec 27 Javascript
Bootstrap每天必学之导航组件
Apr 25 Javascript
基于jquery实现ajax无刷新评论
Aug 19 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
Jun 28 Javascript
解决jquery appaend元素中id绑定事件失效的问题
Sep 12 jQuery
JS实现带动画的回到顶部效果
Dec 28 Javascript
jquery拖拽自动排序插件使用方法详解
Jul 20 jQuery
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
Jul 03 Javascript
el-table-column 内容不自动换行的解决方法
Aug 14 Vue.js
jQuery操作iframe中js函数的方法小结
Jul 06 #Javascript
jQuery深拷贝Json对象简单示例
Jul 06 #Javascript
jQuery基于ID调用指定iframe页面内的方法
Jul 06 #Javascript
JS如何判断json是否为空
Jul 06 #Javascript
移动端 一个简单易懂的弹出框
Jul 06 #Javascript
Bootstrap选项卡与Masonry插件的完美结合
Jul 06 #Javascript
针对BootStrap中tabs控件的美化和完善(推荐)
Jul 06 #Javascript
You might like
php的字符串用法小结
2010/06/08 PHP
vs中通过剪切板循环来循环粘贴不同内容
2011/04/30 PHP
PHP抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
mailto的使用技巧分享
2012/12/21 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
提高Web性能的前端优化技巧总结
2017/02/27 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
盘点提高 Python 代码效率的方法
2014/07/03 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
python3字符串操作总结
2019/07/24 Python
关于Flask项目无法使用公网IP访问的解决方式
2019/11/19 Python
python中wx模块的具体使用方法
2020/05/15 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
2020/05/28 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
挖掘机司机岗位职责
2014/02/12 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
实习协议书范本
2014/04/22 职场文书
维修工先进事迹
2014/05/29 职场文书
保险专业求职信
2014/07/07 职场文书
党员学习正风肃纪思想汇报
2014/09/12 职场文书
黄石寨导游词
2015/02/05 职场文书
社会实践活动总结格式
2015/05/11 职场文书
贫困生证明范文
2015/06/16 职场文书