praise.js是一款小巧的jQuery點贊插件,使用簡便,效果美觀。css
在作我的博客時遇到了文章點贊問題。聯想到各大社交網絡中的點贊特效:手勢放大、紅心放大等等,很酷很炫。可是並無現成的好用的插件,因而就打算本身作一個相似的點贊插件,放上本身喜歡的點贊圖標。PS:小站的圖標均來自阿里媽媽旗下的那個iconfont,你們能夠去那兒找本身喜歡的圖標。 上篇博文介紹了本站的簡要狀況:去看看?html
先來看一下效果圖吧:也可直接去博客站 www.zynblog.com 體驗一把jquery
praise.js:json
1 //***擴展對象點贊插件、點贊特效***// 2 //***Zynblog**// 3 //***2016-5-11**// 4 //***用法:jQuery('.praisebtn').praise(options);***// 5 ; (function ($) { 6 $.fn.praise = function (options) { 7 var defaults = { 8 obj: null, //jq對象,針對哪一個對象使用這個tipsBox函數 9 str: "+1", //字符串,要顯示的內容;也能夠傳一段html 10 startSize: "10px", //動畫開始的文字大小 11 endSize: "30px", //動畫結束的文字大小 12 interval: 600, //文字動畫時間間隔 13 color: "red", //文字顏色 14 callback: function () { } //回調函數 15 }; 16 var opt = $.extend(defaults, options); 17 $("body").append("<span class='num'>" + opt.str + "</span>"); 18 var box = $(".num"); 19 var left = opt.obj.offset().left + opt.obj.width()/2; 20 var top = opt.obj.offset().top - opt.obj.height(); 21 box.css({ 22 "position": "absolute", 23 "left": left + "px", 24 "top": top + "px", 25 "z-index": 9999, 26 "font-size": opt.startSize, 27 "line-height": opt.endSize, 28 "color": opt.color 29 }); 30 box.animate({ 31 "font-size": opt.endSize, 32 "opacity": "0", 33 "top": top - parseInt(opt.endSize) + "px" 34 }, opt.interval, function () { 35 box.remove(); 36 opt.callback(); 37 }); 38 } 39 })(jQuery); 40 41 //點贊圖標恢復原樣 42 function niceIn(prop) { 43 prop.find('.praisenum').addClass('niceIn').css("color", "red"); 44 setTimeout(function () { 45 prop.find('.praisenum').css("color", "#45BCF9").removeClass('niceIn'); 46 }, 1000); 47 };
在須要用到點贊插件的頁面中引入jquery.js、prase.js,而後在$(function(){})中給"praisebtn"註冊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: (本站並不強制訪客進行註冊登陸後才能點贊,所以並不限制訪客的點贊次數)cookie
//點贊特效+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(); }); } }); },
4.再上一個懶懶的後端代碼吧(請直接忽視):網絡
1 #region 3.0 文章點贊量統計; [HttpPost] ActionResult PraiseStatic() 2 /// <summary> 3 /// 3.0 Ajax文章點贊統計 必須由EF先查詢,再修改 4 /// </summary> 5 /// <returns></returns> 6 [HttpPost] 7 public ActionResult PraiseStatic() 8 { 9 string artId = HttpContext.Request["artId"]; 10 JsonModel jsonData; 11 12 if (!String.IsNullOrEmpty(artId) && Convert.ToInt32(artId) != 0) 13 { 14 int id = Convert.ToInt32(artId); 15 16 BlogDb4ZynEntities dbContext = new Model.BlogDb4ZynEntities(); 17 Article artModelProxy = dbContext.Articles.Find(id); 18 artModelProxy.Digg += 1; 19 int val = dbContext.SaveChanges(); 20 21 if (val == 1) 22 { 23 jsonData = new JsonModel() 24 { 25 Status = 1, 26 Message = "點贊計數成功" 27 }; 28 } 29 else 30 { 31 jsonData = new JsonModel() 32 { 33 Status = 2, 34 Message = "服務器繁忙,請稍後再贊" 35 }; 36 } 37 } 38 else 39 { 40 jsonData = new JsonModel() 41 { 42 Status = 0, 43 Message = "沒有參數" 44 }; 45 } 46 47 return Json(jsonData); 48 } 49 #endregion
praise.js源碼下載:jquery.praise.jsapp