jquery 插件之 点赞“+1” 特效

一般用户点个赞后,都会有个 +1 的特效飘过,用户已经点过赞了,会有“已点过赞”的特效提示

在这里,我们写了一个点赞的插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//扩展对象点赞插件、点赞特效
//用法:jQuery('.praisebtn').praise(options);//为多元素注册事件时要使用class类名,不能用id
; (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();
        });
    }
     
    $.fn.praised = function (options) {
        var defaults = {
            obj: null, //jq对象,针对哪个对象使用这个tipsBox函数
            str: "您已赞过~", //字符串,要显示的内容;
            startSize: "10px", //动画开始的文字大小
            endSize: "30px"//动画结束的文字大小
            interval: 600, //文字动画时间间隔
            color: "red"//文字颜色
            callback: function () { }  //回调函数
        };
        var opt = $.extend(defaults, options);  //合并参数
        $("body").append("<span class='praisetip'>" + opt.str + "</span>");
        var tipbox = jQuery(".praisetip");
        var left = opt.obj.offset().left + opt.obj.width();//span btn左侧的距离加上自身宽度的一半
        var top = opt.obj.offset().top + opt.obj.height();//顶部距离减去自身的高度
        tipbox.css({
            "position": "absolute",
            "left": left + "px",
            "top": top + "px",
            "z-index": 9999,
            "font-size": "12px",
            "line-height": "20px",
            "color": "red"
        });
        tipbox.animate({
            "opacity": "0"
        }, 1200, function () {
            tipbox.remove();
        });
    }
})(jQuery);

  

在html 上

1
2
3
<span class="praisebtn327111">
    <a href="javascript:void(0)" onclick="praise('327111','57071','0')"><img src="images/zan.png">赞(<span id="praiseCount327111">1</span>)</a>
</span>

 

在引用点赞功能上,即如果ajax 返回的结果是success,则表示点赞成功,飘过提示+1,反之,则表示已点赞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function praise(msgid,name,count)
{
    var datas={"msgid":msgid,"name":name,"count":count}
    $.ajax({
        type: "post",
        url: "/addMsgPraise",
        data: datas,
        datatype: "text",
        success:function(data){
            var praisebtn = jQuery(".praisebtn"+msgid);
            if(data=="success")
            {
                praisebtn.praise({
                    obj:praisebtn,
                    str: "+1"
                });
                count ++;
                $("#praiseCount"+msgid).html(count);
            }else
            {
                praisebtn.praised({
                    obj: praisebtn
                });
            }
        }
    });
}

  

posted @   panie2015  阅读(1359)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示