I'm trying to get the progress bar animation to run when I click the .trigger
. I'm getting the data-percentage
value in the logs but the animation isn't running. It works without using $(this).closest()
but I cannot figure out why the animation isn't running with my current JS code.
$(".list").on("click", ".trigger", function() { var e = $(this).closest(".item"); $(".progressbar").attr("data-percentage", e.find("#percent").text()); var t = e.find("#percent").text(); return ( $(".progressbar").each(function() { var n = e, r = t; console.log(t), parseInt(n.data("percentage"), 10) < 2 && (r = 2), n.children(".bar").animate({ width: r + "%" }, 500); }), !1 ); });
.item { width: 50px; height: 50px; border: 1px solid; } .trigger { height: 30px; width: 30px; border: 3px solid blue; cursor: pointer; } .progressbar { position: relative; display: block; height: 10px; background: #f5f5f5; } .bar.money-green { background: #3cd3ad; } .bar { position: absolute; display: block; height: 100%; background: #fcb31c; width: 0%; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="list"> <div class="item"> <div class="trigger"> <p id="percent">22</p> </div> </div> </div> <div class="progressbar" data-percentage=""> <div class="money-green bar"><span></span></div> </div>
I updated the code for you. Clean and clear way
You don't need to return in onclick
function. And you should use $(this)
inside .each
to get current index element
$(".list").on("click", ".trigger", function() {
var e = $(this).closest(".item");
var t = e.find("#percent").text();
$(".progressbar").attr("data-percentage", t);
$(".progressbar").each(function() {
$(this).find(".bar").animate({
width: t + "%"
}, 500);
});
});
See the codepen
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.