javascript - 创建 CSS/Javascript/jQuery 'like heart'

标签 javascript jquery css laravel

我正在尝试创建一个类似于 twitter 之心的按钮,但我似乎无法让 JS/CSS 正常工作(或者我做错了)。每当一个帖子被喜欢时,我想要 this播放动画,仅供引用:我已经解决了导致所有动画同时播放的问题。当显示用户已经喜欢的帖子时,我希望它是纯红色(就像在动画结束时一样)。当一个帖子还没有被用户点赞时,我希望它是纯灰色(就像在动画开始时一样)。您可以在下方找到我的 Javascript、CSS 和 HTML。我使用 Laravel 作为我元素的框架,并使用他们的模板引擎 blade 来解析 @if

JavaScript

$('.like').on('click', function(e) {
    e.preventDefault();
    postId = e.target.parentNode.parentNode.dataset['postid'];
    var isLike = e.target.previousElementSibling == null;
    $.ajax({
        method: 'POST',
        url: urlLike,
        data: {isLike: isLike, postId: postId, _token: token}
    }).done(function() {
        if(isLike) {
            if ($(e.target).css('background-position', 'right')) {
                $(e.target).removeClass('heartAnimation');
                $(e.target).addClass('heart');
            } else if ($(e.target).css('background-position', 'left')) {
                $(e.target).addClass('heartAnimation');
            }
            //Change page
        }
    });
});

CSS

.heart{
    background: url('http://localhost:8079/uncaughterror/public/src/img/web_heart_animation.png');
    background-position: left;
    background-repeat: no-repeat;
    height: 50px; width: 50px;
    cursor: pointer;
    position: absolute;
    left: -16px;
    bottom: -16px;
    background-size:1450px;
}

.heart:hover {
    background-position: right;
}

.interaction {
    position: relative;
}

@-webkit-keyframes heartBlast {
    0% {background-position: left;}
    100% {background-position: right;}
}

@keyframes heartBlast {
    0% {background-position: left;}
    100% {background-position: right;}
}

.heartAnimation {
    -webkit-animation-name: heartBlast;
    animation-name: heartBlast;
    -webkit-animation-duration: .8s;
    animation-duration: .8s;
    -webkit-animation-iteration-count: 1;
    animation-iteration-count: 1;
    -webkit-animation-timing-function: steps(28);
    animation-timing-function: steps(28);
    background-position: right;
}

Laravel 标记

@if(Auth::user()->likes()->where('post_id', $post->id)->where('like', '1')->first())
    <a href="#" class="like heart" style="background-position: right;"></a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
@else
    <a href="#" class="like heart"></a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
@endif

最佳答案

您必须更改您的if 语句。

if ($(e.target).css('background-position') === 'right') {
  $(e.target).removeClass('heartAnimation');
  $(e.target).addClass('heart');
} else if ($(e.target).css('background-position') === 'left') {
  $(e.target).addClass('heartAnimation');
}

关于javascript - 创建 CSS/Javascript/jQuery 'like heart',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38111662/

相关文章:

Jquery ui 对话框默认最大化

javascript - 如何在 Google Maps InfoWindow 中创建 CSS 样式的 dom 元素?

jQuery 动画从 CSS "top"到 "bottom"

javascript - React - 将数组传递给 setState?

php - 在表单提交之前执行一些 sql 查询以将值插入数据库

javascript - 如何从 html 打开保存对话框?

javascript - 禁用和启用点击处理程序

jquery - 如何将垂直菜单与按钮图标和子类别结合起来

javascript - 有什么方法可以在 Leaflet 上绘制路径(多段线),宽度/笔划以米而不是像素为单位?

javascript - document.getElementById.innerHTML 没有写任何内容..?