{"id":133793,"date":"2025-05-01T08:00:14","date_gmt":"2025-05-01T12:00:14","guid":{"rendered":"https:\/\/yorbestlife.com\/?p=133793"},"modified":"2025-05-04T12:44:57","modified_gmt":"2025-05-04T16:44:57","slug":"homemade-protein-ice-cream","status":"publish","type":"post","link":"https:\/\/yorbestlife.com\/index.php\/2025\/05\/01\/homemade-protein-ice-cream\/","title":{"rendered":"Homemade Protein Ice Cream"},"content":{"rendered":"<p><em>Sharing a recipe for homemade protein ice cream that\u2019s rich and delicious; the perfect healthy dessert or protein-packed snack!<\/em><\/p>\n<p>Hi friends! How is your day going? I hope you\u2019re having a wonderful morning. How about a little ice cream for breakfast? Okay, stay with me, it\u2019s not as cheeky as it sounds! It\u2019s one of my favorite healthy dessert recipes and you can enjoy it as a post-workout breakfast too!<\/p>\n<p>I have a super easy and delicious recipe to share with you today for delicious homemade protein ice cream!<\/p>\n<p><a href=\"https:\/\/fitnessista.com\/homemade-protein-ice-cream\/protein-ice-cream-2\/\" rel=\"attachment wp-att-160260 follow noopener noreferrer\" data-wpel-link=\"internal\"><img decoding=\"async\" class=\"aligncenter wp-image-160260\" src=\"https:\/\/yorbestlife.com\/wp-content\/uploads\/2025\/05\/protein-ice-cream-2.jpg\" alt=\"\" width=\"450\" height=\"674\" \/><\/a><\/p>\n<p>(I added peanut butter and chocolate chunks to this batch and it was a dreaaaaammmmmm)<\/p>\n<h2 style=\"text-align: center\">Homemade Protein Ice Cream<\/h2>\n<p>We all know that protein is important. Not only is it the most satisfying <a href=\"https:\/\/www.healthline.com\/nutrition\/what-are-macronutrients\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"external\">macronutrient<\/a>, protein is also the building block for our cells. It\u2019s important in the fitness\/health world because it can help us build and retain muscle, which is especially crucial as we age. We want to build and protect our muscles to help our bones and also protect our metabolism, as muscle is \u201chungrier\u201d than fat and has a higher energy demand.<\/p>\n<p>I tend to recommend around 1-2 grams of protein per lb of ideal body weight (depending on SO many factors, like body composition, age, goals, preferred eating strategy, etc) but I like to aim for 1 palm-sized serving at each meal and snack.<\/p>\n<p>This protein ice cream is a creamy and TASTY dessert, which packs an awesome serving of protein. It\u2019s a great way to add variety to your protein sources while enjoying a sweet treat. I\u2019m sharing the recipe with you today so you can recreate it at home!<\/p>\n<p><a href=\"https:\/\/fitnessista.com\/homemade-protein-ice-cream\/homemade-protein-ice-cream\/\" rel=\"attachment wp-att-160262 follow noopener noreferrer\" data-wpel-link=\"internal\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-160262\" src=\"https:\/\/yorbestlife.com\/wp-content\/uploads\/2025\/05\/homemade-protein-ice-cream.jpg\" alt=\"\" width=\"1000\" height=\"1500\" \/><\/a><\/p>\n<h3 style=\"text-align: center\">Is Protein Ice Cream Healthy?<\/h3>\n<p>This high-protein ice cream recipe is a great healthy treat, especially since this one includes some healthy fats (from coconut milk) and you can add any toppings you like, including peanut butter, nuts, or fruit. Please keep in mind that this should not be a substitute for *real* traditional ice cream if that\u2019s what you\u2019re craving, but it isn\u2019t that \u201cother\u201d faux ice cream made with frozen bananas either. If you\u2019re craving regular ice cream like Ben and Jerry\u2019s and try to make this as a substitute, it won\u2019t fill the void for ya. \ud83d\ude09 Have some of the real deal, enjoy it, and move on with your life.<\/p>\n<p>However, if you\u2019ve already had a protein shake and you\u2019re looking to add another protein-packed option to your day and would like something that tastes like a sweet treat, give this a whirl! You could absolutely eat it every day as part of a balanced plan that includes lean protein, smart carbs, and healthy fats.<\/p>\n<h4>Ingredients<\/h4>\n<ul>\n<li>Protein powder of choice \u2013 whey protein powder and pea protein powder will work the best. \u00a0This step is important and make sure to use a protein powder you love! If you\u2019re looking for ideas, try out Truvani or Now Foods (use FITNESSISTA for 20% off). Pick a protein powder that has a good texture and tastes good \u2013 this is crucial. You can use vanilla protein powder or chocolate protein powder, depending on what flavor of ice cream you\u2019d like to make.<\/li>\n<li>Full-fat coconut milk \u2013 you can also use unsweetened almond milk BUT the coconut milk is going to give it the rich flavor and texture. If you are not dairy-free, you could absolutely use whole milk (which I recommend for flavor, texture, and nutrients over skim milk)<\/li>\n<li>Vanilla extract<\/li>\n<li>Sea salt<\/li>\n<li>Stevia to taste* (You can also use maple syrup if you don\u2019t like the taste of Stevia. I avoid other artificial sugars because the <a href=\"https:\/\/www.ynhh.org\/services\/nutrition\/sugar-alcohol#:~:text=Sugar%20alcohols%20and%20artificial%20sweeteners,about%202.6%20calories%20per%20gram.\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"external\">sugar alcohols<\/a> upset my stomach)<\/li>\n<li>For chocolate protein ice cream: 4oz semi-sweet chocolate chips<\/li>\n<\/ul>\n<p><a href=\"https:\/\/fitnessista.com\/homemade-protein-ice-cream\/protein-ice-cream\/\" rel=\"attachment wp-att-160261 follow noopener noreferrer\" data-wpel-link=\"internal\"><img decoding=\"async\" class=\"aligncenter wp-image-160261\" src=\"https:\/\/yorbestlife.com\/wp-content\/uploads\/2025\/05\/protein-ice-cream.jpg\" alt=\"\" width=\"600\" height=\"769\" \/><\/a><\/p>\n<h3 style=\"text-align: center\">How To Make Homemade Protein Ice Cream<\/h3>\n<h5>Step 1<\/h5>\n<p>Make sure that the bowl of your ice cream maker is frozen! If it\u2019s not, get that ready the day prior to making the ice cream. You can also make the ice cream in a loaf pan, but it will have a different texture.<\/p>\n<h5>Step 2<\/h5>\n<p>In a saucepan on the stove, add the milk, chocolate chips, vanilla, and sea salt, and bring up to a simmer. As the chocolate chips melt, whisk in the protein powder. Dip a spoon into the mixture (make sure to let it cool before tasting!) and add any sweetener you\u2019d like as needed.<\/p>\n<h5>Step 3<\/h5>\n<p>Pour the mixture into the ice cream maker (I love my ninja creami) and turn it on. It will take 20-30 minutes until it has a soft serve consistency. For a firmer ice cream, place the mixture into a loaf pan and freeze for 3-4 hours. (You can also use a blender or food processor in a pinch.)<\/p>\n<h5>Step 4<\/h5>\n<p>Scoop out any servings you\u2019d like and enjoy! Add any of the toppings or mix-ins below to customize your flavors!<\/p>\n<h3>Ice Cream Topping Ideas:<\/h3>\n<ul>\n<li>Add 1\/2 teaspoon peppermint extract and crushed candy canes for a holiday-ish treat<\/li>\n<li>Top with peanut butter or swirl some into the ice cream maker<\/li>\n<li>Add chocolate chips, melt some chocolate chips on top, or add a dash of cocoa powder<\/li>\n<li>Swirl in some fruit jam<\/li>\n<li>Top with fresh berries<\/li>\n<li>Mix some ground espresso beans into the ice cream maker (and use coffee instead of water!)<\/li>\n<li>Add almond extract to the vanilla protein ice cream for a beautiful almond flavor and top with sliced almonds<\/li>\n<li>Add unsweetened, sugar-free shredded coconut and pecans<\/li>\n<\/ul>\n<p>Here is the full recipe!<\/p>\n<p><a class=\"button tasty-recipes-print-button tasty-recipes-no-print tasty-recipes-print-above-card\" href=\"https:\/\/fitnessista.com\/homemade-protein-ice-cream\/print\/160263\/\" data-wpel-link=\"internal\" rel=\"follow noopener noreferrer\">Print<\/a><span class=\"tasty-recipes-jump-target\" id=\"tasty-recipes-160263-jump-target\" style=\"padding-top:2px;margin-top:-2px\"><\/span><\/p>\n<div id=\"tasty-recipes-160263\" data-tr-id=\"160263\" class=\"tasty-recipes tasty-recipes-160263 tasty-recipes-display tasty-recipes-no-image\" data-tasty-recipes-customization=\"primary-color.background-color secondary-color.border-color\">\n<h2 class=\"tasty-recipes-title\" data-tasty-recipes-customization=\"h2-color.color h2-transform.text-transform\">Homemade Protein Ice Cream<\/h2>\n<div class=\"tasty-recipes-image-button-container\">\n<div class=\"tasty-recipes-buttons\">\n<div class=\"tasty-recipes-button-wrap\">\n<p><a class=\"button tasty-recipes-print-button tasty-recipes-no-print\" href=\"https:\/\/fitnessista.com\/homemade-protein-ice-cream\/print\/160263\/\" target=\"_blank\" data-tasty-recipes-customization=\"\" data-wpel-link=\"internal\" rel=\"follow noopener noreferrer\"><br \/>\n\t\t\t<img decoding=\"async\" class=\"svg-print\" data-pin-nopin=\"true\" src=\"https:\/\/fitnessista.com\/wp-content\/plugins\/tasty-recipes\/templates\/buttons\/images\/icon-print.png\" \/><br \/>\n\t\tPrint Recipe<\/a>\n\t\t<\/div><\/div>\n<\/div>\n<div class=\"tasty-recipes-rating\" data-tasty-recipes-customization=\"body-color.color\">\n<p><span class=\"tasty-recipes-ratings-buttons tasty-recipes-no-ratings-buttons\" data-tr-default-rating=\"0\">\t\t<span class=\"tasty-recipes-rating\">\t\t<i class=\"checked\" data-rating=\"5\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t5 Stars\t\t\t<\/span>\t\t<\/i>\t<\/span>\t\t<span class=\"tasty-recipes-rating\">\t\t<i class=\"checked\" data-rating=\"4\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t4 Stars\t\t\t<\/span>\t\t<\/i>\t<\/span>\t\t<span class=\"tasty-recipes-rating\">\t\t<i class=\"checked\" data-rating=\"3\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t3 Stars\t\t\t<\/span>\t\t<\/i>\t<\/span>\t\t<span class=\"tasty-recipes-rating\">\t\t<i class=\"checked\" data-rating=\"2\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t2 Stars\t\t\t<\/span>\t\t<\/i>\t<\/span>\t\t<span class=\"tasty-recipes-rating\">\t\t<i class=\"checked\" data-rating=\"1\">\t\t\t<span class=\"tasty-recipes-rating-solid\" data-tr-clip=\"0\">\t\t\t\t\t\t\t<\/span>\t\t\t<span class=\"tasty-recipes-screen-reader\">\t\t\t\t1 Star\t\t\t<\/span>\t\t<\/i>\t<\/span><\/span><\/p>\n<p><span data-tasty-recipes-customization=\"detail-label-color.color\" class=\"rating-label\">No reviews<\/span><\/p>\n<\/p><\/div>\n<div class=\"tasty-recipes-description\" data-tasty-recipes-customization=\"body-color.color\">\n<p>A delicious healthy dessert option with a dose of protein. Add in any mix-ins and customize it however you\u2019d like!<\/p>\n<\/p><\/div>\n<div class=\"tasty-recipes-details\" data-tasty-recipes-customization=\"body-color.color\">\n<ul>\n<li class=\"author\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Author:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-author-name\">Gina Harney \/\/ The Fitnessista<\/span><\/li>\n<li class=\"prep-time\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Prep Time:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-prep-time\">10 minutes<\/span><\/li>\n<li class=\"total-time\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Total Time:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-total-time\">10 minutes<\/span><\/li>\n<li class=\"yield\"><strong data-tasty-recipes-customization=\"detail-label-color.color\" class=\"tasty-recipes-label\">Yield:<\/strong> <span data-tasty-recipes-customization=\"detail-value-color.color\" class=\"tasty-recipes-yield\">6-8 servings<\/span><\/li>\n<\/ul><\/div>\n<div class=\"tasty-recipes-ingredients\">\n<div class=\"tasty-recipes-ingredients-header\">\n<div class=\"tasty-recipes-ingredients-clipboard-container\">\n<h3 data-tasty-recipes-customization=\"h3-color.color h3-transform.text-transform\">Ingredients<\/h3>\n<\/p><\/div>\n<div class=\"tasty-recipes-units-scale-container\">\n\t\t\t\t\t\t\t\t\t\t\t<\/div><\/div>\n<div class=\"tasty-recipes-ingredients-body\" data-tasty-recipes-customization=\"body-color.color\">\n<p><span data-amount=\"3\">3<\/span> scoops Protein powder of choice \u2013 whey protein and pea protein will work the best. \u00a0This step is important and make sure to use a protein powder you love! If you\u2019re looking for ideas, try out Truvani or Now Foods (use FITNESSISTA for 20% off). Pick a protein powder that has a good texture and tastes good \u2013 this is crucial. You can use vanilla protein powder or chocolate protein powder, depending on what flavor ice cream you\u2019d like to make.<\/p>\n<p><span data-amount=\"2\">2<\/span> cans of full-fat coconut milk \u2013 you can also use unsweetened almond milk BUT the coconut milk is going to give it the rich flavor and texture. If you are not dairy-free, you could absolutely use whole milk (which I recommend for flavor, texture, and nutrients over skim milk)<\/p>\n<p><span data-amount=\"1\" data-unit=\"teaspoon\">1 teaspoon<\/span> vanilla<\/p>\n<p>Pinch of sea salt<\/p>\n<p>Stevia to taste* (You can also use maple syrup if you don\u2019t like the taste of Stevia. I avoid other artificial sugars because the sugar alcohols upset my stomach)<\/p>\n<p>For chocolate protein ice cream: 4oz semi sweet chocolate chips<\/p>\n<p><!--INSIDE_INGREDIENTS-->\t\t<\/div>\n<div class=\"tasty-recipes-cook-mode\">\n<div class=\"tasty-recipes-cook-mode__container\">\n\t\t<label class=\"tasty-recipes-cook-mode__switch\"><\/p>\n<p>\t\t\t<span class=\"tasty-recipes-cook-mode__switch-slider tasty-recipes-cook-mode__switch-round\" data-tasty-recipes-customization=\"button-color.background button-text-color.color\"><\/span><br \/>\n\t\t<\/label><br \/>\n\t\t<label for=\"tasty_recipes_6817997b57d64_cookmode\"><br \/>\n\t\t\t<span class=\"tasty-recipes-cook-mode__label\">Cook Mode<\/span><br \/>\n\t\t\t<span class=\"tasty-recipes-cook-mode__helper\"><br \/>\n\t\t\t\tPrevent your screen from going dark\t\t\t<\/span><br \/>\n\t\t<\/label>\n\t<\/div>\n<\/div><\/div>\n<div class=\"tasty-recipe-instructions\">\n<div class=\"tasty-recipes-instructions-header\">\n<h3 data-tasty-recipes-customization=\"h3-color.color h3-transform.text-transform\">Instructions<\/h3>\n<\/p><\/div>\n<div class=\"tasty-recipes-instructions-body\" data-tasty-recipes-customization=\"body-color.color\">\n<p id=\"instruction-step-1\">Make sure that the bowl of your ice cream maker is frozen! If it\u2019s not, get that ready the day prior to making the ice cream. You can also make the ice cream in a loaf pan, but it will have a different texture.<\/p>\n<p id=\"instruction-step-2\">In a saucepan on the stove, add the milk, chocolate chips, vanilla, and sea salt, and bring up to a simmer. As the chocolate chips melt, whisk in the protein powder. Dip a spoon into the mixture (make sure to let it cool before tasting!) and add any sweetener you\u2019d like as needed.<\/p>\n<p id=\"instruction-step-3\">Pour the mixture into the ice cream maker and turn it on. It will take 20-30 minutes until it has the texture of soft serve. For a firmer ice cream, place the mixture into a loaf pan and freeze for 3-4 hours.<\/p>\n<p id=\"instruction-step-4\">Scoop out any servings you\u2019d like and enjoy! Add any of the toppings or mix-ins below to customize your flavors!<\/p>\n<\/p><\/div><\/div>\n<div class=\"tasty-recipes-notes\">\n<h3 data-tasty-recipes-customization=\"h3-color.color h3-transform.text-transform\">Notes<\/h3>\n<div class=\"tasty-recipes-notes-body\" data-tasty-recipes-customization=\"body-color.color\">\n<h4>Mix-ins and topping ideas:<\/h4>\n<p>Add 1\/2 teaspoon peppermint extract and crushed candy canes for a holiday-ish treat<\/p>\n<p>Top with peanut butter or swirl some into the ice cream maker<\/p>\n<p>Add chocolate chips or melt some chocolate chips on top<\/p>\n<p>Swirl in some fruit jam<\/p>\n<p>Top with fresh berries<\/p>\n<p>Mix some ground espresso beans into the ice cream maker (and use coffee instead of water!)<\/p>\n<p>Add almond extract to the vanilla protein ice cream for a beautiful almond flavor and top with sliced almonds<\/p>\n<p>Add unsweetened shredded coconut and pecans<\/p>\n<\/p><\/div><\/div>\n<footer class=\"tasty-recipes-entry-footer\">\n<h3 data-tasty-recipes-customization=\"footer-heading-color.color h3-transform.text-transform footer-heading.innerText\">Did you make this recipe?<\/h3>\n<div data-tasty-recipes-customization=\"footer-description-color.color footer-description.innerHTML\">\n<p>Tag <a href=\"https:\/\/www.instagram.com\/fitnessista\" target=\"_blank\" rel=\"noreferrer noopener\" data-wpel-link=\"external\">@fitnessista<\/a> on Instagram<\/p>\n<\/div>\n<\/footer>\n<p>window.trCommon={&#8220;minRating&#8221;:6,&#8221;ajaxurl&#8221;:&#8221;https:\/\/fitnessista.com\/wp-admin\/admin-ajax.php&#8221;,&#8221;ratingNonce&#8221;:&#8221;&#8221;,&#8221;postId&#8221;:160258};<br \/>\nwindow.TastyRecipes = window.TastyRecipes || {};<\/p>\n<p>window.TastyRecipes.smoothScroll = {<br \/>\ninit() {<br \/>\ndocument.addEventListener( &#8216;click&#8217;, ( e ) =&gt; {<br \/>\nlet anchor = e.target;<br \/>\nif ( anchor.tagName !== &#8216;A&#8217; ) {<br \/>\nanchor = anchor.closest( &#8216;a.tasty-recipes-scrollto&#8217; );<br \/>\n}<\/p>\n<p>if ( ! anchor || ! anchor.classList.contains( &#8216;tasty-recipes-scrollto&#8217; ) ) {<br \/>\nreturn;<br \/>\n}<\/p>\n<p>const elementHref = anchor.getAttribute( &#8216;href&#8217; );<br \/>\nif ( ! elementHref ) {<br \/>\nreturn;<br \/>\n}<\/p>\n<p>e.preventDefault();<br \/>\nthis.goToSelector( elementHref );<br \/>\n});<br \/>\n},<br \/>\ngoToSelector( selector ) {<br \/>\nconst element = document.querySelector( selector );<br \/>\nif ( ! element ) {<br \/>\nreturn;<br \/>\n}<br \/>\nelement.scrollIntoView( { behavior: &#8216;smooth&#8217; } );<br \/>\n}<br \/>\n};<\/p>\n<p>document.addEventListener(<br \/>\n&#8216;DOMContentLoaded&#8217;,<br \/>\n() =&gt; window.TastyRecipes.smoothScroll.init()<br \/>\n);<\/p>\n<p>window.TastyRecipes = window.TastyRecipes || {};<br \/>\nwindow.TastyRecipes.cookMode = {<br \/>\nwakeLockApi: false,<br \/>\nwakeLock: false,<br \/>\ncookModeSelector: &#8216;.tasty-recipes-cook-mode&#8217;,<br \/>\ninit() {<br \/>\nif (&#8220;wakeLock&#8221; in navigator &amp;&amp; &#8220;request&#8221; in navigator.wakeLock) {<br \/>\nthis.wakeLockApi = navigator.wakeLock;<br \/>\n}<\/p>\n<p>const cookModes = document.querySelectorAll(this.cookModeSelector);<\/p>\n<p>if (cookModes.length &gt; 0) {<br \/>\nfor (const cookMode of cookModes) {<br \/>\nif (this.wakeLockApi) {<br \/>\ncookMode.querySelector(&#8216;input[type=&#8221;checkbox&#8221;]&#8217;).addEventListener(&#8220;change&#8221;, event =&gt; {<br \/>\nthis.checkboxChange(event.target);<br \/>\n}, false);<br \/>\n} else {<br \/>\ncookMode.style.display = &#8220;none&#8221;;<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n},<br \/>\ncheckboxChange(checkbox) {<br \/>\nif (checkbox.checked) {<br \/>\nthis.lock();<br \/>\n} else {<br \/>\nthis.unlock();<br \/>\n}<br \/>\n},<br \/>\nsetCheckboxesState(state) {<br \/>\nconst checkboxes = document.querySelectorAll(this.cookModeSelector + &#8216; input[type=&#8221;checkbox&#8221;]&#8217;);<br \/>\nfor (const checkbox of checkboxes) {<br \/>\ncheckbox.checked = state;<br \/>\n}<br \/>\n},<br \/>\nasync lock() {<br \/>\ntry {<br \/>\nthis.wakeLock = await this.wakeLockApi.request(&#8220;screen&#8221;);<br \/>\nthis.wakeLock.addEventListener(&#8220;release&#8221;, () =&gt; {<br \/>\nthis.wakeLock = false;<br \/>\nthis.setCheckboxesState(false);<br \/>\n});<br \/>\nthis.setCheckboxesState(true);<br \/>\n} catch (error) {<br \/>\nthis.setCheckboxesState(false);<br \/>\n}<br \/>\n},<br \/>\nunlock() {<br \/>\nif (this.wakeLock) {<br \/>\nthis.wakeLock.release();<br \/>\nthis.wakeLock = false;<br \/>\n}<br \/>\nthis.setCheckboxesState(false);<br \/>\n}<br \/>\n};<\/p>\n<p>(function(callback) {<br \/>\nif (document.readyState !== &#8220;loading&#8221;) {<br \/>\ncallback();<br \/>\n} else {<br \/>\ndocument.addEventListener(&#8220;DOMContentLoaded&#8221;, callback);<br \/>\n}<br \/>\n})(() =&gt; {<br \/>\nwindow.TastyRecipes.cookMode.init();<br \/>\n});<\/p>\n<p>window.TastyRecipes = window.TastyRecipes || {};<\/p>\n<p>window.TastyRecipes.staticTooltip = {<br \/>\nelement: null,<br \/>\ntooltipElement: null,<br \/>\ndeleting: false,<br \/>\ninit( element ) {<br \/>\nif ( this.deleting ) {<br \/>\nreturn;<br \/>\n}<br \/>\nthis.element = element;<br \/>\nthis.buildElements();<br \/>\n},<br \/>\ndestroy() {<br \/>\nif ( ! this.tooltipElement || this.deleting ) {<br \/>\nreturn;<br \/>\n}<\/p>\n<p>this.deleting = true;<br \/>\nthis.tooltipElement.classList.remove( &#8216;opened&#8217; );<\/p>\n<p>setTimeout( () =&gt; {<br \/>\nthis.tooltipElement.remove();<br \/>\nthis.deleting = false;<br \/>\n}, 500 );<br \/>\n},<br \/>\nbuildElements() {<br \/>\nconst tooltipElement = document.createElement( &#8216;div&#8217; );<br \/>\ntooltipElement.classList.add( &#8216;tasty-recipes-static-tooltip&#8217;);<br \/>\ntooltipElement.setAttribute( &#8216;id&#8217;, &#8216;tasty-recipes-tooltip&#8217; );<\/p>\n<p>const currentTooltipElement = document.getElementById( &#8216;tasty-recipes-tooltip&#8217; );<br \/>\nif ( currentTooltipElement ) {<br \/>\ndocument.body.replaceChild( tooltipElement, currentTooltipElement );<br \/>\n} else {<br \/>\ndocument.body.appendChild( tooltipElement );<br \/>\n}<\/p>\n<p>this.tooltipElement = document.getElementById( &#8216;tasty-recipes-tooltip&#8217; );<br \/>\n},<br \/>\nshow() {<br \/>\nif ( ! this.tooltipElement ) {<br \/>\nreturn;<br \/>\n}<\/p>\n<p>const tooltipTop = this.element.getBoundingClientRect().top<br \/>\n+ window.scrollY<br \/>\n&#8211; 10 \/\/ 10px offset.<br \/>\n&#8211; this.tooltipElement.getBoundingClientRect().height;<br \/>\nconst tooltipLeft = this.element.getBoundingClientRect().left<br \/>\n&#8211; ( this.tooltipElement.getBoundingClientRect().width \/ 2 )<br \/>\n+ ( this.element.getBoundingClientRect().width \/ 2 ) &#8211; 1;<br \/>\nconst posLeft = Math.max( 10, tooltipLeft );<br \/>\nthis.maybeRemoveTail( posLeft !== tooltipLeft );<\/p>\n<p>this.tooltipElement.setAttribute( &#8216;style&#8217;, &#8216;top:&#8217; + tooltipTop + &#8216;px;left:&#8217; + posLeft + &#8216;px;&#8217; );<br \/>\nthis.tooltipElement.classList.add( &#8216;opened&#8217; );<\/p>\n<p>},<br \/>\nmaybeRemoveTail( removeTail ) {<br \/>\nif ( removeTail ) {<br \/>\nthis.tooltipElement.classList.add( &#8216;tr-hide-tail&#8217; );<br \/>\n} else {<br \/>\nthis.tooltipElement.classList.remove( &#8216;tr-hide-tail&#8217; );<br \/>\n}<br \/>\n},<br \/>\nchangeMessage( message ) {<br \/>\nif ( ! this.tooltipElement ) {<br \/>\nreturn;<br \/>\n}<br \/>\nthis.tooltipElement.innerHTML = message;<br \/>\n}<br \/>\n};<\/p>\n<p>window.TastyRecipes.ajax = {<br \/>\nsendPostRequest( url, data, success, failure ) {<br \/>\nconst xhr = new XMLHttpRequest();<br \/>\nxhr.open( &#8216;POST&#8217;, url, true );<br \/>\nxhr.send( this.preparePostData( data ) );<\/p>\n<p>xhr.onreadystatechange = () =&gt; {<br \/>\nif ( 4 !== xhr.readyState ) {<br \/>\nreturn;<br \/>\n}<br \/>\nif ( xhr.status === 200 ) {<br \/>\nsuccess( JSON.parse( xhr.responseText ) );<br \/>\nreturn;<br \/>\n}<\/p>\n<p>failure( xhr );<br \/>\n};<\/p>\n<p>xhr.onerror = () =&gt; {<br \/>\nfailure( xhr );<br \/>\n};<br \/>\n},<br \/>\npreparePostData( data ) {<br \/>\nconst formData = new FormData();<\/p>\n<p>for ( const key in data ) {<br \/>\nformData.append( key, data[key] );<br \/>\n}<br \/>\nreturn formData;<br \/>\n},<br \/>\n};<\/p>\n<p>window.TastyRecipes.ratings = {<br \/>\ndefaultRating: 0,<br \/>\ncurrentRatingPercentage: 100,<br \/>\nsavingRating: false,<br \/>\ninit( minRating ) {<br \/>\nthis.minRating = minRating;<\/p>\n<p>this.formWatchRating();<br \/>\nthis.closeTooltipWhenClickOutside();<br \/>\nthis.addBodyClassBasedOnSelectedRating();<br \/>\nthis.backwardCompFormRatingPosition();<br \/>\n},<br \/>\nformWatchRating() {<br \/>\nconst ratings = document.querySelectorAll(&#8216;.tasty-recipes-no-ratings-buttons [data-rating]&#8217;);<br \/>\nif ( ratings.length  {<br \/>\nevent.preventDefault();<br \/>\nthis.defaultRating = event.target.closest( &#8216;.checked&#8217; ).dataset.rating;<br \/>\nthis.setCheckedStar( event.target );<br \/>\nthis.maybeSendRating( this.defaultRating, event.target );<br \/>\nthis.setRatingInForm( this.defaultRating );<br \/>\n} );<br \/>\n}<br \/>\n},<br \/>\ncloseTooltipWhenClickOutside() {<br \/>\nwindow.addEventListener( &#8216;click&#8217;, e =&gt; {<br \/>\n\/\/ Bailout (don&#8217;t remove the tooltip) when the clicked element is a rating star, or it&#8217;s the tooltip itself.<br \/>\nif ( e.target.closest( &#8216;.tasty-recipes-rating&#8217; ) || e.target.classList.contains( &#8216;tasty-recipes-static-tooltip&#8217; ) ) {<br \/>\nreturn;<br \/>\n}<\/p>\n<p>window.TastyRecipes.staticTooltip.destroy();<br \/>\n} );<br \/>\n},<br \/>\n setRatingInForm( rating ) {<br \/>\nconst ratingInput = document.querySelector( &#8216;#respond .tasty-recipes-rating[value=&#8221;&#8216; + rating + &#8216;&#8221;]&#8217; );<br \/>\nif ( ! ratingInput ) {<br \/>\nreturn;<br \/>\n}<br \/>\nratingInput.click();<br \/>\n},<br \/>\naddBodyClassBasedOnSelectedRating() {<br \/>\nconst ratingInputs = document.querySelectorAll( &#8216;input.tasty-recipes-rating&#8217; );<br \/>\nif ( ! ratingInputs ) {<br \/>\nreturn;<br \/>\n}<br \/>\nfor ( const ratingInput of ratingInputs ) {<br \/>\nratingInput.addEventListener( &#8216;click&#8217;, currentEvent =&gt; {<br \/>\nconst selectedRating = currentEvent.target.getAttribute( &#8216;value&#8217; );<br \/>\nthis.handleBodyClassByRating( selectedRating );<br \/>\nthis.toggleCommentTextareaRequired( selectedRating );<br \/>\n} );<br \/>\n}<br \/>\n},<br \/>\nhandleBodyClassByRating( rating ) {<br \/>\nif ( rating &lt; this.minRating ) {<br \/>\ndocument.body.classList.remove( &#039;tasty-recipes-selected-minimum-rating&#039; );<br \/>\nreturn;<br \/>\n}<br \/>\ndocument.body.classList.add( &#039;tasty-recipes-selected-minimum-rating&#039; );<br \/>\n},<br \/>\ntoggleCommentTextareaRequired( rating ) {<br \/>\nconst commentTextarea = document.getElementById( &#039;comment&#039; );<br \/>\nif ( ! commentTextarea ) {<br \/>\nreturn;<br \/>\n}<\/p>\n<p>if ( rating  {<br \/>\nwindow.TastyRecipes.staticTooltip.changeMessage( response.data.message );<br \/>\nwindow.TastyRecipes.staticTooltip.show();<br \/>\nthis.updateAverageText( response.data, recipeCardElement );<br \/>\nthis.maybeFillCommentForm( response.data );<\/p>\n<p>\/\/ Hide the tooltip after 5 seconds.<br \/>\nsetTimeout( () =&gt; {<br \/>\nthis.maybeResetTooltip( recipeCardElement, response.data, rating );<br \/>\n}, 5000 );<br \/>\n},<br \/>\n() =&gt; {<br \/>\nthis.resetTooltip( recipeCardElement );<br \/>\n}<br \/>\n);<br \/>\n},<br \/>\nupdateAverageText( data, recipeCardElement ) {<br \/>\nif ( ! data.average ) {<br \/>\nreturn;<br \/>\n}<br \/>\nthis.setRatingPercent( data );<\/p>\n<p>if ( ! data.count ) {<br \/>\nreturn;<br \/>\n}<\/p>\n<p>const quickLink = document.querySelector( &#8216;.tasty-recipes-rating-link&#8217; );<br \/>\nif ( quickLink ) {<br \/>\nthis.setTextInContainer( quickLink, data );<br \/>\nthis.setPartialStar( quickLink );<br \/>\n}<\/p>\n<p>const cardStars = recipeCardElement.querySelector( &#8216;.tasty-recipes-ratings-buttons&#8217; );<br \/>\ncardStars.dataset.trDefaultRating = data.average;<br \/>\nthis.setTextInContainer( recipeCardElement.querySelector( &#8216;.tasty-recipes-rating&#8217; ), data );<br \/>\n},<br \/>\nsetTextInContainer( container, data ) {<br \/>\nif ( ! container ) {<br \/>\nreturn;<br \/>\n}<\/p>\n<p>if ( data.label ) {<br \/>\nconst ratingLabelElement = container.querySelector( &#8216;.rating-label&#8217; );<br \/>\nif ( ratingLabelElement ) {<br \/>\nratingLabelElement.innerHTML = data.label;<br \/>\n}<br \/>\nreturn;<br \/>\n}<\/p>\n<p>const averageElement = container.querySelector( &#8216;.average&#8217; );<br \/>\nif ( averageElement ) {<br \/>\naverageElement.textContent = data.average;<br \/>\n}<\/p>\n<p>const countElement = container.querySelector( &#8216;.count&#8217; );<br \/>\nif ( countElement ) {<br \/>\ncountElement.textContent = data.count;<br \/>\n}<br \/>\n},<br \/>\nsetPartialStar( container ) {<br \/>\nconst highestStar = container.querySelector( &#8216;[data-rating=&#8221;&#8216; + Math.ceil( this.defaultRating ) + &#8216;&#8221;]&#8217; );<br \/>\nif ( highestStar ) {<br \/>\nhighestStar.dataset.trClip = this.currentRatingPercentage;<br \/>\n}<br \/>\n},<br \/>\nsetRatingPercent( data ) {<br \/>\nthis.defaultRating = data.average.toFixed( 1 );<br \/>\nconst parts = data.average.toFixed( 2 ).toString().split( &#8216;.&#8217; );<br \/>\nthis.currentRatingPercentage = parts[1] ? parts[1] : 100;<br \/>\nif ( this.currentRatingPercentage === &#8217;00&#8217; ) {<br \/>\nthis.currentRatingPercentage = 100;<br \/>\n}<br \/>\n},<br \/>\nsetCheckedStar( target ) {<br \/>\nconst cardRatingContainer = target.closest( &#8216;.tasty-recipes-ratings-buttons&#8217; );<br \/>\nconst selectedRatingElement = cardRatingContainer.querySelector( &#8216;[data-tr-checked]&#8217; );<br \/>\nif ( selectedRatingElement ) {<br \/>\ndelete selectedRatingElement.dataset.trChecked;<br \/>\n}<\/p>\n<p>const thisStar = target.closest( &#8216;.tasty-recipes-rating&#8217; );<br \/>\nthisStar.dataset.trChecked = 1;<br \/>\nthisStar.querySelector( &#8216;[data-tr-clip]&#8217; ).dataset.trClip = 100;<br \/>\n},<br \/>\nmaybeFillCommentForm( data ) {<br \/>\nif ( ! data.comment || ! data.comment.content ) {<br \/>\nreturn;<br \/>\n}<\/p>\n<p>const commentForm = document.querySelector( &#8216;#commentform&#8217; );<br \/>\nif ( ! commentForm ) {<br \/>\nreturn;<br \/>\n}<\/p>\n<p>const commentBox = commentForm.querySelector( &#8216;[name=comment]&#8217; );<br \/>\nif ( ! commentBox || commentBox.value ) {<br \/>\nreturn;<br \/>\n}<\/p>\n<p>\/\/ Add comment details for editing.<br \/>\ncommentBox.innerHTML = data.comment.content;<br \/>\nif ( data.comment.name ) {<br \/>\ncommentForm.querySelector( &#8216;[name=author]&#8217; ).value = data.comment.name;<br \/>\ncommentForm.querySelector( &#8216;[name=email]&#8217; ).value = data.comment.email;<br \/>\n}<br \/>\n},<br \/>\nmaybeResetTooltip( recipeCardElement, data, rating ) {<br \/>\nif ( this.savingRating === rating ) {<br \/>\nthis.resetTooltip( recipeCardElement, data );<br \/>\n}<br \/>\n},<br \/>\nresetTooltip( recipeCardElement, data ) {<br \/>\nwindow.TastyRecipes.staticTooltip.destroy();<br \/>\nthis.savingRating = false;<\/p>\n<p>\/\/ Reset the default rating.<br \/>\nconst cardRatingContainer = recipeCardElement.querySelector( &#8216;.tasty-recipes-ratings-buttons&#8217; );<br \/>\nif ( cardRatingContainer ) {<br \/>\nthis.defaultRating = ( data &amp;&amp; data.average ) ? data.average.toFixed(1) : cardRatingContainer.dataset.trDefaultRating;<br \/>\ncardRatingContainer.dataset.trDefaultRating = this.defaultRating;<\/p>\n<p>this.resetSelectedStar( cardRatingContainer, data );<br \/>\n}<br \/>\n},<br \/>\nresetSelectedStar( cardRatingContainer ) {<br \/>\nconst selectedRatingElement = cardRatingContainer.querySelector( &#8216;[data-rating=&#8221;&#8216; + Math.ceil( this.defaultRating ) + &#8216;&#8221;]&#8217; );<br \/>\nif ( selectedRatingElement ) {<br \/>\nselectedRatingElement.querySelector( &#8216;[data-tr-clip]&#8217; ).dataset.trClip = this.currentRatingPercentage;<br \/>\nselectedRatingElement.parentNode.dataset.trChecked = 1;<br \/>\n}<\/p>\n<p>const previousSelectedElement= cardRatingContainer.querySelector( &#8216;[data-tr-checked]&#8217; );<br \/>\nif ( previousSelectedElement ) {<br \/>\nconst currentSelectedRating = previousSelectedElement.querySelector(&#8216;[data-rating]&#8217;);<br \/>\nif ( currentSelectedRating !== selectedRatingElement ) {<br \/>\ndelete previousSelectedElement.dataset.trChecked;<br \/>\n}<br \/>\n}<br \/>\n},<br \/>\nbackwardCompFormRatingPosition() {<br \/>\nconst ratingsButtons = document.querySelector( &#8216;#respond .tasty-recipes-ratings-buttons, #tasty-recipes-comment-rating .tasty-recipes-ratings-buttons&#8217; );<br \/>\nif ( ! ratingsButtons ) {<br \/>\nreturn;<br \/>\n}<br \/>\nconst ratingsButtonsStyles = window.getComputedStyle(ratingsButtons);<br \/>\nif ( ! ratingsButtonsStyles.display.includes( &#8216;flex&#8217; ) ) {<br \/>\nratingsButtons.style.direction = &#8216;rtl&#8217;;<br \/>\n}<\/p>\n<p>if ( typeof tastyRecipesRating !== &#8216;undefined&#8217; ) {<br \/>\n\/\/ Select the rating that was previously selected in admin.<br \/>\nratingsButtons.querySelector( &#8216;.tasty-recipes-rating[value=&#8221;&#8216; + tastyRecipesRating + &#8216;&#8221;]&#8217; ).checked = true;<br \/>\n}<\/p>\n<p>const ratingSpans = ratingsButtons.querySelectorAll( &#8216;.tasty-recipes-rating&#8217; );<br \/>\nfor (const ratingSpan of ratingSpans) {<br \/>\nratingSpan.addEventListener( &#8216;click&#8217;, event =&gt; {<br \/>\nif ( ratingSpan === event.target ) {<br \/>\nreturn;<br \/>\n}<br \/>\nratingSpan.previousElementSibling.click();<br \/>\n} );<br \/>\n}<br \/>\n}<br \/>\n};<\/p>\n<p>(function(callback) {<br \/>\nif (document.readyState !== &#8220;loading&#8221;) {<br \/>\ncallback();<br \/>\n} else {<br \/>\nwindow.addEventListener( &#8216;load&#8217;, callback );<br \/>\n}<br \/>\n})(() =&gt; {<br \/>\nwindow.TastyRecipes.ratings.init( window.trCommon ? window.trCommon.minRating : 4 );<br \/>\n});\n<\/p><\/div>\n<p>\u00a0<\/p>\n<p>Have you tried protein ice cream before? What\u2019s your all-time favorite ice cream flavor?<\/p>\n<p>It was a super satisfying treat, especially with the mix-ins! For more delicious recipes, you can <a href=\"https:\/\/fitnessista.com\/category\/recipes\/\" target=\"_blank\" rel=\"noopener follow noreferrer\" data-wpel-link=\"internal\">try out more on my blog<\/a>!<\/p>\n<p>xo<\/p>\n<p>Gina<\/p>\n<p>The post <a href=\"https:\/\/fitnessista.com\/homemade-protein-ice-cream\/\">Homemade Protein Ice Cream<\/a> appeared first on <a href=\"https:\/\/fitnessista.com\">The Fitnessista<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sharing a recipe for homemade protein ice cream that\u2019s rich and delicious; the perfect healthy dessert or protein-packed snack! Hi [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":133795,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[212,292,293,358,359],"tags":[220,294,295,360,361],"_links":{"self":[{"href":"https:\/\/yorbestlife.com\/index.php\/wp-json\/wp\/v2\/posts\/133793"}],"collection":[{"href":"https:\/\/yorbestlife.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yorbestlife.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yorbestlife.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/yorbestlife.com\/index.php\/wp-json\/wp\/v2\/comments?post=133793"}],"version-history":[{"count":3,"href":"https:\/\/yorbestlife.com\/index.php\/wp-json\/wp\/v2\/posts\/133793\/revisions"}],"predecessor-version":[{"id":133799,"href":"https:\/\/yorbestlife.com\/index.php\/wp-json\/wp\/v2\/posts\/133793\/revisions\/133799"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/yorbestlife.com\/index.php\/wp-json\/wp\/v2\/media\/133795"}],"wp:attachment":[{"href":"https:\/\/yorbestlife.com\/index.php\/wp-json\/wp\/v2\/media?parent=133793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yorbestlife.com\/index.php\/wp-json\/wp\/v2\/categories?post=133793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yorbestlife.com\/index.php\/wp-json\/wp\/v2\/tags?post=133793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}