{"id":83,"date":"2026-07-03T17:47:27","date_gmt":"2026-07-03T09:47:27","guid":{"rendered":"https:\/\/dev.anysport.io\/cn\/?page_id=83"},"modified":"2026-07-03T17:50:43","modified_gmt":"2026-07-03T09:50:43","slug":"pricing","status":"publish","type":"page","link":"https:\/\/anysport.io\/cn\/pricing\/","title":{"rendered":"\u5b9a\u4ef7"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"83\" class=\"elementor elementor-83\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b6b6fcc e-flex e-con-boxed e-con e-parent\" data-id=\"b6b6fcc\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-98b8b0b elementor-widget elementor-widget-heading\" data-id=\"98b8b0b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">\u5b9a\u4ef7<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-97c209c elementor-widget elementor-widget-shortcode\" data-id=\"97c209c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"asw-wrap\">\n  <div class=\"asw-price-shell asw-lang-zh\" id=\"aswp1\">\n\n    <h2 class=\"asw-price-title\">\u8db3\u7403\u5957\u9910<\/h2>\n\n    <!-- Billing cycle selector -->\n    <div class=\"asw-price-cycles\">\n      <div class=\"asw-cycle-grp\" id=\"aswp1_cg\"><\/div>\n    <\/div>\n\n    <!-- Pricing cards -->\n    <div class=\"asw-pcard-grid\" id=\"aswp1_grid\"><\/div>\n\n  <\/div>\n<\/div>\n<script>\n(function () {\n  var id      = \"aswp1\";\n  var cycles  = [{\"key\":\"monthly\",\"months\":1,\"disc\":0},{\"key\":\"quarterly\",\"months\":3,\"disc\":5},{\"key\":\"semiannual\",\"months\":6,\"disc\":10},{\"key\":\"annual\",\"months\":12,\"disc\":20}];\n  var plans   = [{\"name\":\"Free Trial\",\"price\":0,\"rate\":\"120\",\"highlight\":false},{\"name\":\"\\u57fa\\u7840\",\"price\":99,\"rate\":\"2,000\",\"highlight\":false},{\"name\":\"\\u4e13\\u4e1a\",\"price\":199,\"rate\":\"10,000\",\"highlight\":false},{\"name\":\"\\u9ad8\\u7ea7\",\"price\":399,\"rate\":\"20,000\",\"highlight\":true}];\n  var feats   = [{\"k\":\"liveScore\",\"v\":[true,true,true,true]},{\"k\":\"countryLeague\",\"v\":[true,true,true,true]},{\"k\":\"fixtures\",\"v\":[true,true,true,true]},{\"k\":\"standings\",\"v\":[true,true,true,true]},{\"k\":\"h2h\",\"v\":[true,true,true,true]},{\"k\":\"players\",\"v\":[false,true,true,true]},{\"k\":\"teams\",\"v\":[false,true,true,true]},{\"k\":\"topscorers\",\"v\":[false,true,true,true]},{\"k\":\"lineups\",\"v\":[false,true,true,true]},{\"k\":\"seasons\",\"v\":[false,true,true,true]},{\"k\":\"coaches\",\"v\":[false,true,true,true]},{\"k\":\"injuries\",\"v\":[false,true,true,true]},{\"k\":\"preOdds\",\"v\":[false,false,true,true]},{\"k\":\"liveMatchStatistic\",\"v\":[false,false,false,true]},{\"k\":\"liveOdds\",\"v\":[false,false,false,true]},{\"k\":\"ws\",\"v\":[false,false,false,true]}];\n  var i18n    = {\"title\":\"\\u8db3\\u7403\\u5957\\u9910\",\"monthly\":\"\\u6708\\u4ed8\",\"quarterly\":\"\\u5b63\\u4ed8\",\"semiannual\":\"\\u534a\\u5e74\\u4ed8\",\"annual\":\"\\u5e74\\u4ed8\",\"popular\":\"\\u6700\\u53d7\\u6b22\\u8fce\",\"free\":\"\\u514d\\u8d39\",\"unit\":\"\\\/\\u6708\",\"total\":\"\\u5408\\u8ba1 ${n}\",\"save\":\"\\u8282\\u7701 ${n}\",\"startFree\":\"\\u514d\\u8d39\\u8bd5\\u7528\",\"subscribe\":\"\\u7acb\\u5373\\u8ba2\\u9605\",\"sectionRateLimit\":\"\\u9891\\u7387\\u9650\\u5236\\uff1a\",\"rateLimitItem\":\"\\u6bcf\\u5c0f\\u65f6\\u8bf7\\u6c42\\u6b21\\u6570\\uff1a{n}\",\"sectionDataAccess\":\"\\u6570\\u636e\\u6743\\u9650\\uff1a\",\"liveScore\":\"\\u5b9e\\u65f6\\u6bd4\\u5206\",\"countryLeague\":\"\\u56fd\\u5bb6&\\u8054\\u8d5b\\u6570\\u636e\",\"fixtures\":\"\\u8d5b\\u7a0b\\u6570\\u636e\",\"standings\":\"\\u79ef\\u5206\\u699c\",\"h2h\":\"\\u4ea4\\u950b\\u5386\\u53f2\",\"players\":\"\\u7403\\u5458\\u8d44\\u6599\",\"teams\":\"\\u7403\\u961f\\u8d44\\u6599\",\"topscorers\":\"\\u5c04\\u624b\\u699c\",\"preOdds\":\"\\u8d5b\\u524d\\u8d54\\u7387\",\"liveMatchStatistic\":\"\\u5b9e\\u65f6\\u6bd4\\u8d5b\\u7edf\\u8ba1\",\"liveOdds\":\"\\u76d8\\u4e2d\\u8d54\\u7387\",\"ws\":\"WebSocket\",\"lineups\":\"\\u9996\\u53d1\\u9635\\u5bb9\",\"seasons\":\"\\u8d5b\\u5b63\",\"coaches\":\"\\u6559\\u7ec3\\u8d44\\u6599\",\"injuries\":\"\\u4f24\\u505c\\u540d\\u5355\"};\n  var regUrl  = \"https:\\\/\\\/dashboard.anysport.io\\\/register\";\n  var planUrl = \"https:\\\/\\\/dashboard.anysport.io\\\/plans\";\n  var cycle   = cycles[0]; \/\/ active billing cycle\n\n  function t(k)         { return i18n[k] || k; }\n  function fmt(tpl, n)  { return tpl.replace('{n}', n); }\n\n  var iconOn  = '<span class=\"asw-pcard-icon asw-pcard-icon-on\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span>';\n  var iconOff = '<span class=\"asw-pcard-icon asw-pcard-icon-off\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/><\/svg><\/span>';\n\n  \/* \u2500\u2500 render cycle pills \u2500\u2500 *\/\n  function renderCycles() {\n    var cg = document.getElementById(id + '_cg');\n    cg.innerHTML = '';\n    cycles.forEach(function (c) {\n      var btn = document.createElement('button');\n      btn.className = c.key === cycle.key ? 'asw-on' : '';\n      var html = t(c.key);\n      if (c.disc > 0) html += '<span class=\"asw-cycle-disc\">-' + c.disc + '%<\/span>';\n      btn.innerHTML = html;\n      btn.addEventListener('click', function () { cycle = c; renderCycles(); updateCards(); });\n      cg.appendChild(btn);\n    });\n  }\n\n  var cardRefs = []; \/\/ filled once by buildCardsOnce(), reused by updateCards()\n\n  \/*\n   * Build every card's DOM ONCE. The Total\/Save row and its CTA button are never removed and\n   * re-inserted on a cycle switch \u2014 only their text content and a .asw-show class change. That's\n   * what lets the browser run a real CSS `transition` on .asw-pcard-disc-row (see CSS above)\n   * instead of replaying a one-shot \"enter\" animation on a freshly-created element every click:\n   * the button below it then slides smoothly in BOTH directions as part of normal layout reflow,\n   * and switching between two already-discounted cycles just updates numbers with no motion at all.\n   *\/\n  function buildCardsOnce() {\n    var grid = document.getElementById(id + '_grid');\n    var h    = '';\n\n    plans.forEach(function (p, i) {\n      h += '<div class=\"asw-pcard' + (p.highlight ? ' asw-pcard-pro' : '') + '\" data-i=\"' + i + '\">';\n      if (p.highlight) h += '<div class=\"asw-pcard-badge\">' + t('popular') + '<\/div>';\n\n      h += '<div class=\"asw-pcard-name\">' + p.name + '<\/div>';\n\n      h += '<div class=\"asw-pcard-price-row\">';\n      h += '<span class=\"asw-pcard-price\" data-role=\"price\"><\/span>';\n      if (p.price > 0) h += '<span class=\"asw-pcard-unit\">' + t('unit') + '<\/span>';\n      h += '<\/div>';\n\n      \/* Free plan keeps hidden placeholders (total text + save badge) so its row matches the\n       * exact height of the paid cards' row when expanded \u2014 the save badge's padding\/border\n       * make it taller than plain text, so both placeholders are needed for the CTA buttons\n       * to stay aligned, not just the total one. *\/\n      h += '<div class=\"asw-pcard-disc-row\" data-role=\"discrow\">';\n      if (p.price > 0) {\n        h += '<span class=\"asw-pcard-total\" data-role=\"total\"><\/span>';\n        h += '<span class=\"asw-pcard-save\" data-role=\"save\"><\/span>';\n      } else {\n        h += '<span class=\"asw-pcard-total\" style=\"visibility:hidden\" data-role=\"total\">0<\/span>';\n        h += '<span class=\"asw-pcard-save\" style=\"visibility:hidden\" data-role=\"save\">$0<\/span>';\n      }\n      h += '<\/div>';\n\n      var href   = p.price === 0 ? regUrl : planUrl;\n      var label  = p.price === 0 ? t('startFree') : t('subscribe');\n      var btnCls = p.price === 0 ? 'asw-pcard-btn asw-pcard-btn-free' : 'asw-pcard-btn';\n      h += '<a href=\"' + href + '\" class=\"' + btnCls + '\" target=\"_blank\" rel=\"noopener noreferrer\">' + label + '<\/a>';\n\n      h += '<div class=\"asw-pcard-section\">';\n      h += '<div class=\"asw-pcard-label\">' + t('sectionRateLimit') + '<\/div>';\n      h += '<div class=\"asw-pcard-row\">' + iconOn + '<span>' + fmt(t('rateLimitItem'), p.rate) + '<\/span><\/div>';\n      h += '<\/div>';\n\n      h += '<div class=\"asw-pcard-section\">';\n      h += '<div class=\"asw-pcard-label\">' + t('sectionDataAccess') + '<\/div>';\n      feats.forEach(function (feat) {\n        var on = feat.v[i];\n        h += '<div class=\"asw-pcard-row' + (on ? '' : ' asw-off') + '\">' + (on ? iconOn : iconOff) + '<span>' + t(feat.k) + '<\/span><\/div>';\n      });\n      h += '<\/div>';\n\n      h += '<\/div>'; \/\/ .asw-pcard\n    });\n\n    grid.innerHTML = h;\n\n    cardRefs = plans.map(function (p, i) {\n      var card = grid.querySelector('.asw-pcard[data-i=\"' + i + '\"]');\n      return {\n        price:   card.querySelector('[data-role=\"price\"]'),\n        discRow: card.querySelector('[data-role=\"discrow\"]'),\n        total:   card.querySelector('[data-role=\"total\"]'),\n        save:    card.querySelector('[data-role=\"save\"]')\n      };\n    });\n  }\n\n  \/* \u2500\u2500 update prices\/discount text + expand-collapse state for the active cycle \u2500\u2500 *\/\n  function updateCards() {\n    plans.forEach(function (p, i) {\n      \/*\n       * Round once on the discounted TOTAL (the amount actually charged), then derive\n       * the displayed \"\/mo\" price from that total. Rounding the monthly price first and\n       * multiplying by months (the old approach) compounds rounding error across the\n       * period \u2014 e.g. 20% off $299\u00d712 should save $717.60\u2192$718, not the $720 you'd get\n       * by rounding $299\u00d70.8 to $239\/mo first and multiplying by 12.\n       *\/\n      var fullTotal = p.price * cycle.months;\n      var total     = p.price === 0 ? 0 : Math.round(fullTotal * (1 - cycle.disc \/ 100));\n      var saved     = p.price === 0 ? 0 : fullTotal - total;\n      var perMonth  = p.price === 0 ? 0 : Math.round(total \/ cycle.months);\n\n      var refs = cardRefs[i];\n      refs.price.textContent = p.price === 0 ? t('free') : ('$' + perMonth);\n\n      if (p.price > 0) {\n        refs.total.textContent = fmt(t('total'), total);\n        if (refs.save) refs.save.textContent = fmt(t('save'), saved);\n      }\n\n      if (cycle.months > 1) {\n        refs.discRow.classList.add('asw-show');\n      } else {\n        refs.discRow.classList.remove('asw-show');\n      }\n    });\n  }\n\n  renderCycles();\n  buildCardsOnce();\n  updateCards();\n}());\n<\/script>\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u5b9a\u4ef7<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-83","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/anysport.io\/cn\/wp-json\/wp\/v2\/pages\/83","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/anysport.io\/cn\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/anysport.io\/cn\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/anysport.io\/cn\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/anysport.io\/cn\/wp-json\/wp\/v2\/comments?post=83"}],"version-history":[{"count":7,"href":"https:\/\/anysport.io\/cn\/wp-json\/wp\/v2\/pages\/83\/revisions"}],"predecessor-version":[{"id":91,"href":"https:\/\/anysport.io\/cn\/wp-json\/wp\/v2\/pages\/83\/revisions\/91"}],"wp:attachment":[{"href":"https:\/\/anysport.io\/cn\/wp-json\/wp\/v2\/media?parent=83"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}