Slsy Ninja Warrior Obstacle Course for Kids, 50FT Durable Ninja Slackline Kit with Complete Accessories,Playset Equipment with Swing, Climbing Net, Ladder & Monkey Bars (8 Obstacles)
Slsy Ninja Warrior Obstacle Course for Kids, 50FT Durable Ninja Slackline Kit with Complete Accessories,Playset Equipment with Swing, Climbing Net, Ladder & Monkey Bars (8 Obstacles)
${function() {
const variantData = data.variant || {"id":"e3dedff2-0c90-4bf1-999f-b5896cd61d2e","product_id":"a834acb4-8981-4a9f-8e10-5bae57c28ad9","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"P1600106-8PCS","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":79.99,"min_quantity":1}],"weight":"0","compare_at_price":"0","price":"79.99","retail_price":"0","available":true,"url":"\/products\/slsy-ninja-warrior-obstacle-course-for-kids-50ft-durable-ninja-slackline-kit-with-complete-accessories-playset-equipment-with-swing-climbing-net-ladder-monkey-bars-8-obstacles?variant=e3dedff2-0c90-4bf1-999f-b5896cd61d2e","available_quantity":999999999,"options":[],"off_ratio":"0","flashsale_info":{"variant_id":"e3dedff2-0c90-4bf1-999f-b5896cd61d2e","product_id":"","quantity":0,"discount_id":"","limit_time":0,"limit_buy":0,"user_limit_buy":0,"discount_sales":0,"discount_sales_rate":"","discount_stock":0,"ends_at":0,"starts_at":0,"allow_oversold":"","allocation_method":"","price":"79.99","compare_at_price":"","discount_price":"79.99","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"0","use_before_price":false,"before_price":"","title":"","properties":"","color_setting_promotional_copy":"","discount_quantity":0,"is_need_split":false},"sales":0};
const saveType = null;
const productSaveLabel = null;
return `
-
${ variantData.off_ratio }%
`; }()}
${function(){
return `
${data.starNum}/${data.starTotal}
`;
}()}
${function(){
return `
${data.showStarText === 'true' ? `
${data.starNum}/${data.starTotal}
` : ''}
`;
}()}
const TAG = 'spz-custom-revue-star';
class SPZCustomRevueStar extends SPZ.BaseElement {
constructor(element) {
super(element);
}
static deferredMount() {
return false;
}
buildCallback = () => {
this.action_ = SPZServices.actionServiceForDoc(this.element);
this.templates_ = SPZServices.templatesForDoc(this.element);
this.xhr_ = SPZServices.xhrFor(this.win);
this.starNum = this.element.getAttribute('starNum');
this.starTotal = this.element.getAttribute('starTotal');
this.showStarText = this.element.getAttribute('showStarText');
this.starColor = this.element.getAttribute('color');
this.interact = this.element.getAttribute('interact');
this.starSize = this.element.getAttribute('starSize') || 14;
}
mountCallback = () => {
this.doRender_({
starTotal: this.starTotal,
totalArray: Array.from({ length: Number(this.starTotal) }, (v, k) => k + 1),
starNum: this.starNum,
showStarText: this.showStarText,
starColor: this.starColor,
starSize: this.starSize
}).then(() => {
if (this.interact) {
this.addEventListeners_();
}
});
}
addEventListeners_ = () => {
const stars = document.querySelectorAll('.revue-star__star');
stars.forEach(star => {
star.addEventListener('click', event => {
const starEl = star.closest('.revue-star__star');
const starIndex = Number(starEl.dataset.index);
let isHalf = event.offsetX < star.offsetWidth / 2;
// rtl
if (document.documentElement.getAttribute('dir') === 'rtl') {
isHalf = event.offsetX > star.offsetWidth / 2;
}
const starValue = isHalf ? starIndex - 0.5 : starIndex;
this.starClickHandler_({ value: starValue });
});
});
}
renderStar = () => {
const isRtl = document.documentElement.getAttribute('dir') === 'rtl';
const stars = this.element.querySelectorAll('.revue-star__star');
stars.forEach((star, i) => {
const starIndex = i + 1;
const starEl = star.querySelector('svg:nth-child(2)');
const isHalf = this.starNum % 1 > 0 && Math.ceil(this.starNum) === starIndex;
const isSolid = starIndex <= Math.ceil(this.starNum);
starEl.style.display = isSolid ? 'block' : 'none';
if (isHalf) {
if (isRtl) {
// RTL布局下,如果是半星,显示星星的右半边
starEl.style.clipPath = `polygon(50% 0, 100% 0, 100% 100%, 50% 100%)`;
} else {
// LTR布局下,如果是半星,显示星星的左半边
starEl.style.clipPath = `polygon(0 0, 50% 0, 50% 100%, 0 100%)`;
}
} else {
starEl.style.clipPath = `polygon(0 0, 100% 0, 100% 100%, 0 100%)`
}
});
const showCountEle = this.element.querySelector('#revue-star-show-count');
showCountEle && SPZ.whenApiDefined(showCountEle).then((api) => {
api.render({ starNum: this.starNum, starTotal: this.starTotal });
});
}
doRender_ = (data) => {
return this.templates_
.findAndRenderTemplate(this.element, { starSize: this.starSize, ...data }, null)
.then((el) => {
const children = this.element.querySelector('*:not(template)');
children && SPZCore.Dom.removeElement(children);
this.element.appendChild(el);
})
.then(() => {
this.starNum = data.starNum;
this.renderStar();
});
}
starClickHandler_ = (event) => {
this.starNum = event.value;
this.renderStar();
this.triggerEvent_('change', { value: event.value });
}
triggerEvent_(name, data) {
const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {});
this.action_.trigger(this.element, name, event);
}
isLayoutSupported(layout) {
return layout == SPZCore.Layout.CONTAINER;
}
}
SPZ.defineElement(TAG, SPZCustomRevueStar)
()
try {
const productId = window.SHOPLAZZA.meta.page.resource_id;
const productType = `default`;
const getProductReviews = (star_least) =>
fetch('/api/comment/count-star-multi',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
product_id: [productId],
star_least: star_least || 1,
}),
}).then(res => res.json());
try {
const section = document.querySelector('#revue-product-star');
if(productType === "gift_card" && section) {
section.style.display = 'none';
}
} catch(e) {
console.log(e);
window.addEventListener('load', () => {
try {
const section = document.querySelector('#revue-product-star');
if(productType=== "gift_card" && section) {
section.style.display = 'none';
}
} catch(e) {
console.log(e)
}
})
}
const getReviewsConfig = async () => {
let data = {};
const url = new URL(window.location.href);
const preview_theme_id = url.searchParams.get('preview_theme_id');
const commentConfig = await fetch('/api/comment-config', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
}
}).then(res => res.json());
data = commentConfig.data;
const themeConfig = await fetch(`/api/comment-config?theme_id=${preview_theme_id || ''}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
}
}).then(res => res.json());
if (themeConfig?.data && themeConfig.data.star_color) {
data.star_color = themeConfig.data.star_color;
}
if (preview_theme_id) {
data.star_least = window.apps_global && apps_global.reviews && apps_global.reviews.preview_star_least;
} else if (themeConfig?.data && themeConfig.data.product_settings) {
data.star_least = themeConfig.data.product_settings.star_least;
}
return data;
};
if (productId && window.SHOPLAZZA.meta.page.template_type == 1) {
getReviewsConfig().then(async res => {
const config = res;
let review = await getProductReviews(config.star_least);
review = review.data[productId];
if (!config.open_status || (!review.comment_avg_star && !config.show_no_comment_star)) return;
const render = async () => {
const section = document.querySelector('#revue-product-star');
const starComponent = document.querySelector('#revue-product-star-component');
const count = document.querySelector('#revue-product-star-count');
count.innerText = review.published_count;
const api = await SPZ.whenApiDefined(starComponent);
api.doRender_({
starNum: review.comment_avg_star,
starTotal: 5,
showStarText: false,
starColor: config.star_color,
totalArray: Array.from({ length: 5 }, (v, k) => k + 1)
});
section.style.opacity = 1;
}
render();
document.addEventListener('dj.editor.update', render);
});
}
} catch (e) {console.warn(e)};
${function() {
const minInventory = parseInt('7');
const maxInventory = parseInt('10');
const randomInventory = Math.round(Math.random() * (maxInventory - minInventory)) + minInventory;
const customText = "Only {stock} item(s) left in stock!".replace(/\{stock\}/g, '' + randomInventory + '');
const barWidth = (randomInventory / maxInventory) * 100 + '%';
return `
`;
}()}
Product was out of stock.
Enjoy free shipping on every order, delivered to your doorstep no matter where you are in the world.
Shop with confidence with our hassle-free returns policy, ensuring you love what you buy.
Designed with the planet in mind, all our products are committed to sustainable practices.
Your payment information is always protected with our advanced, encrypted checkout security.
Slsy Ninja Training Course are specially designed for kids over 4 years old. Upper Line can be installed more than 8-10 obstacles, and Ground Line can be used as a training line to improve strength and balance. Get your kids OUTSIDE and Overcome obstacles course of different difficulty in the most fun ways. Warriors never afraid of difficulties! Our kit has an exciting assortment of the most complete and fun obstacles. Kids LOVE it, and even forget about electronics (sometimes)! Whether you're a beginner slacklining for fun or a pro-athlet e looking to improve strength and balance, our ninja obstacles course is the perfect backyard challenge for ninjas of all levels. From Kids to Adults, and Beginners to Advanced. You could install it on your backyard, playground, home gym, basement, pool, fitness class, camping trip, beach park, etc. No More Worries about Your Kids' Health!
PHYSICAL FITNESS & FUN TRAINING: The ninja slackline is a great exercise to complement your kids climbing. With our ninja warrior obstacle course with kids, your children can be well trained like balance, control and maneuvering. If you want to have fun with your kids, you can use our slackline kit for them to create their own gym no matter home or outdoor. The possibilities are endless.
CONVENIENCE & PORTABILITY: Our portable ninja slackline can be safely set up and practiced almost anywhere, such as backyard, playground, outdoor, home gym and camping trip. as long as you can find two trees that are the appropriate length apart and get started this ninja warrior obstacle course for kids. Our slackline kit comes with everything you need, along with a carry bag to keep it all together.
SAFE TO USE & PREMIUM QUALITY: We care about your safety as much as you do! Our ninja slackline is made of very durable slackline webbing, ratchet webbing, threaded steel calibers and steel loop handles, that can hold up to 1000 lbs. Order also includes a carrying bag for convenience on the go.
SATISFACTION GUARANTEE: 100% worry-free guarantee, 30-day return & money back guarantee for Slsy Ninja Warrior Obstacle Course for Kids. We offer premium quality and service. No matter what reasons cause dissatisfaction, we'll replace the ninja kit or reimburse you every cent back!
PACKAGE LIST: Our ninja slackline kit includes a 50ft slackline, 1 rope ladder, 2 swing monkey bars , 2 rope knots, 1 gym ring, 1 swing, 1 climbing net, 2 tree protectors and 1 free carry bag. All slackline accessories are carefully tested for strength and durability.
Vendor by :
Slsy
Sku :
P1600106-8PCS
Inventory :
999999999
${function(){
const variantData = data.variant || {"id":"e3dedff2-0c90-4bf1-999f-b5896cd61d2e","product_id":"a834acb4-8981-4a9f-8e10-5bae57c28ad9","title":"","weight_unit":"lb","inventory_quantity":0,"sku":"P1600106-8PCS","barcode":"","position":1,"option1":"","option2":"","option3":"","note":"","image":null,"wholesale_price":[{"price":79.99,"min_quantity":1}],"weight":"0","compare_at_price":"0","price":"79.99","retail_price":"0","available":true,"url":"\/products\/slsy-ninja-warrior-obstacle-course-for-kids-50ft-durable-ninja-slackline-kit-with-complete-accessories-playset-equipment-with-swing-climbing-net-ladder-monkey-bars-8-obstacles?variant=e3dedff2-0c90-4bf1-999f-b5896cd61d2e","available_quantity":999999999,"options":[],"off_ratio":"0","flashsale_info":{"variant_id":"e3dedff2-0c90-4bf1-999f-b5896cd61d2e","product_id":"","quantity":0,"discount_id":"","limit_time":0,"limit_buy":0,"user_limit_buy":0,"discount_sales":0,"discount_sales_rate":"","discount_stock":0,"ends_at":0,"starts_at":0,"allow_oversold":"","allocation_method":"","price":"79.99","compare_at_price":"","discount_price":"79.99","customary_saved_price":"","customary_off_ratio":"","discount_saved_price":"","discount_off_ratio":"0","use_before_price":false,"before_price":"","title":"","properties":"","color_setting_promotional_copy":"","discount_quantity":0,"is_need_split":false},"sales":0};
return `
Vendor by :
${data.product && data.product.vendor}
Weight :
${variantData && variantData.weight}${variantData && variantData.weight_unit}
Barcode :
${variantData && variantData.barcode}
Sku :
${variantData && variantData.sku}
Inventory :
${variantData && variantData.available_quantity}
` }()}