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 相关文章推荐
javascript中的new使用
Mar 20 Javascript
BOM与DOM的区别分析
Oct 26 Javascript
JavaScript中清空数组的三种方法分享
Apr 07 Javascript
使用Grunt.js管理你项目的应用说明
Apr 24 Javascript
Jquery选中或取消radio示例
Sep 29 Javascript
Javascript中各种trim的实现详细解析
Dec 10 Javascript
jQuery中的jQuery()方法用法分析
Dec 27 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
Jan 13 Javascript
jQuery获取选中单选按钮radio的值
Dec 27 Javascript
使用Vue动态生成form表单的实例代码
Apr 26 Javascript
详解vue-cli官方脚手架配置
Jul 20 Javascript
javascript中的with语句学习笔记及用法
Feb 17 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
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
jQuery循环遍历子节点并获取值的方法
2016/04/14 Javascript
javascript如何创建对象
2016/08/29 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
Python深入学习之对象的属性
2014/08/31 Python
python实现下载指定网址所有图片的方法
2015/08/08 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
Python GUI编程完整示例
2019/04/04 Python
python os.path.isfile()因参数问题判断错误的解决
2019/11/29 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
施工资料员岗位职责
2014/01/06 职场文书
十佳教师事迹材料
2014/01/11 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
奖金申请报告模板
2015/05/15 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
2015年幼儿教师个人工作总结
2015/05/20 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL