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 相关文章推荐
40款非常有用的 jQuery 插件推荐(系列一)
Dec 21 Javascript
一个JavaScript变量声明的知识点
Oct 28 Javascript
在javascript中执行任意html代码的方法示例解读
Dec 25 Javascript
JavaScript通过select动态更换图片的方法
Mar 23 Javascript
js图片上传前预览功能(兼容所有浏览器)
Aug 24 Javascript
基于jQuery实现咖啡订单管理简单应用
Feb 10 Javascript
详解Vue 2.0封装axios笔记
Jun 22 Javascript
浅谈webpack对样式的处理
Jan 05 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
May 05 Javascript
深入学习js函数的隐式参数 arguments 和 this
Jun 24 Javascript
深入解析微信小程序开发中遇到的几个小问题
Jul 11 Javascript
浅谈JavaScript中this的指向更改
Jul 28 Javascript
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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
浅析PHP 按位与或 (^ 、&amp;)
2013/06/21 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
超级强大的表单验证
2006/06/26 Javascript
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
jquery 实现的全选和反选
2009/04/15 Javascript
在线编辑器中换行与内容自动提取
2009/04/24 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
详解Python中where()函数的用法
2018/03/27 Python
简单实现Python爬取网络图片
2018/04/01 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
Python3 log10()函数简单用法
2019/02/19 Python
Python3+Appium安装使用教程
2019/07/05 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
岗位聘任书范文
2014/03/29 职场文书
《锄禾》教学反思
2014/04/08 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
2015年教师新年寄语
2014/12/08 职场文书
故意杀人案辩护词
2015/05/21 职场文书
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis