{"id":17375,"date":"2026-09-20T07:01:59","date_gmt":"2026-09-20T07:01:59","guid":{"rendered":"https:\/\/www.dgcrane.com\/?p=17375"},"modified":"2026-09-20T07:02:02","modified_gmt":"2026-09-20T07:02:02","slug":"crane-travelling-static-resistance-calculator","status":"publish","type":"post","link":"https:\/\/www.dgcrane.com\/ja\/crane-travelling-static-resistance-calculator\/","title":{"rendered":"\u30af\u30ec\u30fc\u30f3\u8d70\u884c\u6642\u306e\u9759\u62b5\u6297\u8a08\u7b97\u6a5f"},"content":{"rendered":"<div id=\"calculator\">\n  <div class=\"calculator-shell\">\n    <form id=\"calculator-form\" novalidate action=\"\">\n      <span class=\"calculator-sr-only\">\u8a08\u7b97\u57fa\u6e96\uff1aEN 13135:2026\u3002\u9069\u7528\u7bc4\u56f2\uff1a\u92fc\u88fd\u30ec\u30fc\u30eb\u4e0a\u306e\u30ed\u30fc\u30e9\u30fc\u30d9\u30a2\u30ea\u30f3\u30b0\u4ed8\u304d\u92fc\u88fd\u8eca\u8f2a\u3002ISO 8686-1:2012\u306f\u3053\u306e\u8a08\u7b97\u5f0f\u306b\u306f\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093\u3002\u691c\u8a3c\u65e5\uff1a2026\u5e749\u670817\u65e5\u3002<\/span>\n\n      <section class=\"calculator-section\">\n        <div class=\"calculator-grid\">\n          <div class=\"calculator-field\">\n            <label for=\"calculator-loadMass\">\u5b9a\u683c\u8377\u91cd\u3001G<sub>n<\/sub> (kg\uff09\u3068\u306a\u308a\u307e\u3057\u305f\u3002<\/label>\n            <input id=\"calculator-loadMass\" name=\"loadMass\" type=\"number\" inputmode=\"decimal\" min=\"0\" max=\"1000000000\" step=\"any\" value=\"10000\" aria-describedby=\"calculator-loadMass-error\">\n            <span id=\"calculator-loadMass-error\" class=\"error-msg\" aria-live=\"polite\"><\/span>\n          <\/div>\n\n          <div class=\"calculator-field\">\n            <label for=\"calculator-gravity\">\u91cd\u529b\u52a0\u901f\u5ea6\u3001g\uff08N\/kg\uff09<\/label>\n            <input id=\"calculator-gravity\" name=\"gravity\" type=\"number\" inputmode=\"decimal\" min=\"1\" max=\"20\" step=\"any\" value=\"10\" aria-describedby=\"calculator-gravity-error\">\n            <span id=\"calculator-gravity-error\" class=\"error-msg\" aria-live=\"polite\"><\/span>\n          <\/div>\n\n          <div class=\"calculator-field\">\n            <label for=\"calculator-gradient\">\u4e0a\u308a\u5742\u306e\u52fe\u914d\u3001i\uff08\u2030\uff09<\/label>\n            <input id=\"calculator-gradient\" name=\"gradient\" type=\"number\" inputmode=\"decimal\" min=\"0\" max=\"100\" step=\"any\" value=\"1\" aria-describedby=\"calculator-gradient-error\">\n            <span id=\"calculator-gradient-error\" class=\"error-msg\" aria-live=\"polite\"><\/span>\n          <\/div>\n\n          <div class=\"calculator-field\">\n            <label for=\"calculator-wheelType\">\u30db\u30a4\u30fc\u30eb\u69cb\u9020<\/label>\n            <select id=\"calculator-wheelType\" name=\"wheelType\">\n              <option value=\"flanged\" selected>\u30d5\u30e9\u30f3\u30b8\u4ed8\u304d\u30db\u30a4\u30fc\u30eb<\/option>\n              <option value=\"flangeless\">\u30d5\u30e9\u30f3\u30b8\u30ec\u30b9\u30db\u30a4\u30fc\u30eb<\/option>\n            <\/select>\n            <span id=\"calculator-wheelType-error\" class=\"error-msg\" aria-live=\"polite\"><\/span>\n          <\/div>\n\n          <div class=\"calculator-field\">\n            <label for=\"calculator-craneMass\">\u30af\u30ec\u30fc\u30f3\u306e\u81ea\u91cd\u3001G\uff08kg\uff09<\/label>\n            <input id=\"calculator-craneMass\" name=\"craneMass\" type=\"number\" inputmode=\"decimal\" min=\"0.000001\" max=\"1000000000\" step=\"any\" value=\"20000\" aria-describedby=\"calculator-craneMass-error\">\n            <span id=\"calculator-craneMass-error\" class=\"error-msg\" aria-live=\"polite\"><\/span>\n          <\/div>\n\n          <div class=\"calculator-field\">\n            <label for=\"calculator-trolleyMass\">\u30c8\u30ed\u30ea\u30fc\u306e\u81ea\u91cd\u3001G<sub>1<\/sub> (kg\uff09\u3068\u306a\u308a\u307e\u3057\u305f\u3002<\/label>\n            <input id=\"calculator-trolleyMass\" name=\"trolleyMass\" type=\"number\" inputmode=\"decimal\" min=\"0.000001\" max=\"1000000000\" step=\"any\" value=\"2000\" aria-describedby=\"calculator-trolleyMass-error\">\n            <span id=\"calculator-trolleyMass-error\" class=\"error-msg\" aria-live=\"polite\"><\/span>\n          <\/div>\n\n          <div class=\"calculator-field\">\n            <label for=\"calculator-craneDiameter\">\u30af\u30ec\u30fc\u30f3\u30db\u30a4\u30fc\u30ebD<sub>w<\/sub> (mm)<\/label>\n            <select id=\"calculator-craneDiameter\" name=\"craneDiameter\">\n              <option value=\"50\">50<\/option>\n              <option value=\"80\">80<\/option>\n              <option value=\"100\">100<\/option>\n              <option value=\"125\">125<\/option>\n              <option value=\"160\">160<\/option>\n              <option value=\"250\">250<\/option>\n              <option value=\"320\">320<\/option>\n              <option value=\"400\" selected>400<\/option>\n              <option value=\"630\">630\u4ee5\u4e0a<\/option>\n            <\/select>\n            <span id=\"calculator-craneDiameter-error\" class=\"error-msg\" aria-live=\"polite\"><\/span>\n          <\/div>\n\n          <div class=\"calculator-field\">\n            <label for=\"calculator-craneFactor\">\u30af\u30ec\u30fc\u30f3\u4fc2\u6570\u3001F<sub>r<\/sub><\/label>\n            <select id=\"calculator-craneFactor\" name=\"craneFactor\" aria-describedby=\"calculator-craneFactor-error\"><\/select>\n            <span id=\"calculator-craneFactor-error\" class=\"error-msg\" aria-live=\"polite\"><\/span>\n          <\/div>\n\n          <div class=\"calculator-field\">\n            <label for=\"calculator-trolleyDiameter\">\u30c8\u30ed\u30ea\u30fc\u30db\u30a4\u30fc\u30eb D<sub>w<\/sub> (mm)<\/label>\n            <select id=\"calculator-trolleyDiameter\" name=\"trolleyDiameter\">\n              <option value=\"50\">50<\/option>\n              <option value=\"80\">80<\/option>\n              <option value=\"100\">100<\/option>\n              <option value=\"125\">125<\/option>\n              <option value=\"160\" selected>160<\/option>\n              <option value=\"250\">250<\/option>\n              <option value=\"320\">320<\/option>\n              <option value=\"400\">400<\/option>\n              <option value=\"630\">630\u4ee5\u4e0a<\/option>\n            <\/select>\n            <span id=\"calculator-trolleyDiameter-error\" class=\"error-msg\" aria-live=\"polite\"><\/span>\n          <\/div>\n\n          <div class=\"calculator-field\">\n            <label for=\"calculator-trolleyFactor\">\u30c8\u30ed\u30ea\u30fc\u4fc2\u6570\u3001F<sub>r<\/sub><\/label>\n            <select id=\"calculator-trolleyFactor\" name=\"trolleyFactor\" aria-describedby=\"calculator-trolleyFactor-error\"><\/select>\n            <span id=\"calculator-trolleyFactor-error\" class=\"error-msg\" aria-live=\"polite\"><\/span>\n          <\/div>\n        <\/div>\n      <\/section>\n\n      <div id=\"calculator-error-summary\" class=\"calculator-error-summary\" role=\"alert\" tabindex=\"-1\"><\/div>\n\n      <div class=\"calculator-actions\">\n        <button type=\"submit\">\u8a08\u7b97\u3059\u308b<\/button>\n        <button type=\"reset\" class=\"calculator-reset\">\u30ea\u30bb\u30c3\u30c8<\/button>\n      <\/div>\n    <input type=\"hidden\" name=\"trp-form-language\" value=\"ja\"\/><\/form>\n\n    <section class=\"calculator-results\" aria-live=\"polite\" aria-atomic=\"true\">\n      <div class=\"calculator-result-card calculator-result-main\">\n        <span>\u30af\u30ec\u30fc\u30f3\u8d70\u884c\u6642\u306e\u9759\u62b5\u6297\u3001F<sub>st\u3001max<\/sub><\/span>\n        <strong id=\"calculator-craneTotal\">\u2014<\/strong>\n      <\/div>\n\n      <div class=\"calculator-result-card\">\n        <span>\u30c8\u30ed\u30ea\u30fc\u8d70\u884c\u6642\u306e\u9759\u6b62\u62b5\u6297\u3001F<sub>st\u3001max<\/sub><\/span>\n        <strong id=\"calculator-trolleyTotal\">\u2014<\/strong>\n      <\/div>\n    <\/section>\n  <\/div>\n\n  <style>\n    #calculator {\n      --primary-color: #0a3487;\n      --primary-hover: #F58423;\n      --error-color: #e53935;\n      --bg-color: #EAEEF7;\n      --text-color: #4a4a4a;\n      --surface-color: #ffffff;\n      --border-color: #cccccc;\n      --soft-primary: #edf2ff;\n      --soft-error: #fff3f2;\n      --focus-shadow: rgba(10, 52, 135, 0.18);\n\n      max-width: 545px;\n      margin: 0 auto;\n      padding: 30px;\n      color: var(--text-color);\n      background: var(--bg-color);\n      font-family: Arial, Helvetica, sans-serif;\n      line-height: 1.5;\n      box-sizing: border-box;\n    }\n\n    #calculator *,\n    #calculator *::before,\n    #calculator *::after {\n      box-sizing: border-box;\n    }\n\n    #calculator .calculator-shell {\n      padding: 24px;\n      border-top: 5px solid var(--primary-color);\n      background: var(--surface-color);\n    }\n\n    #calculator .calculator-sr-only {\n      position: absolute;\n      width: 1px;\n      height: 1px;\n      padding: 0;\n      margin: -1px;\n      overflow: hidden;\n      clip: rect(0, 0, 0, 0);\n      white-space: nowrap;\n      border: 0;\n    }\n\n    #calculator .calculator-section {\n      margin: 0 0 16px;\n      padding: 16px;\n      background: var(--bg-color);\n    }\n\n    #calculator .calculator-grid {\n      display: grid;\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      gap: 12px 14px;\n      align-items: start;\n    }\n\n    #calculator .calculator-field {\n      min-width: 0;\n    }\n\n    #calculator label,\n    #calculator button,\n    #calculator select {\n      font-size: 14px;\n    }\n\n    #calculator label {\n      display: flex;\n      min-height: 38px;\n      margin-bottom: 5px;\n      align-items: flex-end;\n      font-weight: 700;\n    }\n\n    #calculator input,\n    #calculator select,\n    #calculator button {\n      width: 100%;\n      border-radius: 0;\n      transition: 0.2s ease;\n    }\n\n    #calculator input,\n    #calculator select {\n      height: 36px;\n      padding: 5px 9px;\n      border: 1px solid var(--border-color);\n      color: var(--text-color);\n      background: var(--surface-color);\n      font-size: 16px;\n    }\n\n    #calculator input:focus,\n    #calculator select:focus {\n      border: 2px solid var(--primary-color);\n      outline: 0;\n      box-shadow: 0 0 0 3px var(--focus-shadow);\n    }\n\n    #calculator input.error,\n    #calculator select.error,\n    #calculator input.error:focus,\n    #calculator select.error:focus {\n      border: 2px solid var(--error-color);\n      box-shadow: none;\n    }\n\n    #calculator .error-msg {\n      display: none;\n      margin-top: 5px;\n      color: var(--error-color);\n      font-size: 12px;\n      font-weight: 700;\n    }\n\n    #calculator .error-msg.visible {\n      display: block;\n    }\n\n    #calculator .calculator-error-summary {\n      display: none;\n      margin-bottom: 14px;\n      padding: 10px;\n      border-left: 4px solid var(--error-color);\n      color: var(--error-color);\n      background: var(--soft-error);\n      font-weight: 700;\n    }\n\n    #calculator .calculator-error-summary.visible {\n      display: block;\n    }\n\n    #calculator .calculator-actions {\n      display: flex;\n      gap: 12px;\n      margin-top: 4px;\n    }\n\n    #calculator button {\n      height: 34px;\n      padding: 0 16px;\n      border: 0;\n      color: var(--surface-color);\n      background: var(--primary-color);\n      font-weight: 700;\n      line-height: 34px;\n      cursor: pointer;\n    }\n\n    #calculator button:hover,\n    #calculator button:focus-visible {\n      background: var(--primary-hover);\n      outline: 2px solid var(--primary-color);\n      outline-offset: 2px;\n    }\n\n    #calculator button.calculator-reset {\n      color: var(--primary-color);\n      background: var(--surface-color);\n      border: 1px solid var(--primary-color);\n    }\n\n    #calculator button.calculator-reset:hover,\n    #calculator button.calculator-reset:focus-visible {\n      color: var(--surface-color);\n      background: var(--primary-hover);\n    }\n\n    #calculator .calculator-results {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 12px;\n      margin-top: 18px;\n    }\n\n    #calculator .calculator-result-card {\n      margin: 0;\n      padding: 14px;\n      border-left: 4px solid var(--primary-color);\n      background: var(--soft-primary);\n    }\n\n    #calculator .calculator-result-card > span {\n      display: block;\n      font-size: 13px;\n      font-weight: 700;\n    }\n\n    #calculator .calculator-result-card strong {\n      display: block;\n      margin: 4px 0 10px;\n      color: var(--primary-color);\n      font-size: 32px;\n      line-height: 1.15;\n      overflow-wrap: anywhere;\n    }\n\n    @media (max-width: 768px) {\n      #calculator {\n        padding: 0.3rem;\n      }\n\n      #calculator .calculator-shell {\n        padding: 0.3rem;\n      }\n\n      #calculator label,\n      #calculator input,\n      #calculator select,\n      #calculator button {\n        font-size: 0.28rem;\n      }\n\n      #calculator input,\n      #calculator select,\n      #calculator button {\n        min-height: 0.7rem;\n        height: 0.7rem;\n      }\n\n      #calculator button {\n        line-height: 0.7rem;\n      }\n\n      #calculator .calculator-actions {\n        flex-direction: column;\n      }\n\n      #calculator .calculator-actions button {\n        width: 100%;\n      }\n\n      #calculator .calculator-grid {\n        grid-template-columns: repeat(2, minmax(0, 1fr));\n        gap: 0.24rem;\n      }\n\n      #calculator label {\n        min-height: 0.7rem;\n      }\n\n      #calculator .calculator-results {\n        grid-template-columns: 1fr;\n      }\n    }\n\n    @media (prefers-reduced-motion: reduce) {\n      #calculator *,\n      #calculator *::before,\n      #calculator *::after {\n        transition: none;\n      }\n    }\n  <\/style>\n\n  <script>\n    (() => {\n      \"use strict\";\n\n      const root = document.getElementById(\"calculator\");\n      if (!root) return;\n\n      const form = root.querySelector(\"#calculator-form\");\n      const summary = root.querySelector(\"#calculator-error-summary\");\n\n      const diameterPoints = [\n        50, 80, 100, 125, 160, 250, 320, 400, 630\n      ];\n\n      const factorSets = {\n        flanged: [\n          0.013, 0.011, 0.010, 0.009, 0.008,\n          0.0065, 0.006, 0.0055, 0.005\n        ],\n        flangeless: [\n          0.011, 0.0095, 0.0085, 0.0075, 0.007,\n          0.0055, 0.0052, 0.005, 0.0045\n        ]\n      };\n\n      const fields = {\n        loadMass: root.querySelector(\"#calculator-loadMass\"),\n        gravity: root.querySelector(\"#calculator-gravity\"),\n        gradient: root.querySelector(\"#calculator-gradient\"),\n        wheelType: root.querySelector(\"#calculator-wheelType\"),\n        craneMass: root.querySelector(\"#calculator-craneMass\"),\n        craneDiameter: root.querySelector(\"#calculator-craneDiameter\"),\n        craneFactor: root.querySelector(\"#calculator-craneFactor\"),\n        trolleyMass: root.querySelector(\"#calculator-trolleyMass\"),\n        trolleyDiameter: root.querySelector(\"#calculator-trolleyDiameter\"),\n        trolleyFactor: root.querySelector(\"#calculator-trolleyFactor\")\n      };\n\n      const outputs = {\n        craneTotal: root.querySelector(\"#calculator-craneTotal\"),\n        trolleyTotal: root.querySelector(\"#calculator-trolleyTotal\")\n      };\n\n      function setError(fieldName, message) {\n        const input = fields[fieldName];\n        const error = root.querySelector(\n          `#calculator-${fieldName}-error`\n        );\n\n        input.classList.add(\"error\");\n        input.setAttribute(\"aria-invalid\", \"true\");\n\n        if (error) {\n          error.textContent = message;\n          error.classList.add(\"visible\");\n        }\n      }\n\n      function clearError(fieldName) {\n        const input = fields[fieldName];\n        const error = root.querySelector(\n          `#calculator-${fieldName}-error`\n        );\n\n        input.classList.remove(\"error\");\n        input.removeAttribute(\"aria-invalid\");\n\n        if (error) {\n          error.textContent = \"\";\n          error.classList.remove(\"visible\");\n        }\n      }\n\n      function validateInput(\n        fieldName,\n        label,\n        minimum,\n        maximum,\n        allowZero\n      ) {\n        const input = fields[fieldName];\n        const value = Number.parseFloat(input.value);\n\n        clearError(fieldName);\n\n        if (\n          input.value.trim() === \"\" ||\n          !Number.isFinite(value)\n        ) {\n          setError(\n            fieldName,\n            `${label} is required and must be a finite number.`\n          );\n          return null;\n        }\n\n        if (\n          (!allowZero && value <= minimum) ||\n          (allowZero &#038;&#038; value < minimum) ||\n          value > maximum\n        ) {\n          const relation = allowZero\n            ? `from ${minimum}`\n            : `greater than ${minimum}`;\n\n          setError(\n            fieldName,\n            `${label} must be ${relation} and no more than ${maximum}.`\n          );\n          return null;\n        }\n\n        return value;\n      }\n\n      function rollingFactor(wheelType, diameter) {\n        const factors = factorSets[wheelType];\n\n        if (!factors) {\n          throw new Error(\"Unsupported wheel construction.\");\n        }\n\n        const index = diameterPoints.indexOf(Number(diameter));\n\n        if (index === -1) {\n          throw new Error(\n            \"Unsupported wheel diameter selection.\"\n          );\n        }\n\n        return factors[index];\n      }\n\n      function calculateTravelResistance(\n        loadMass,\n        selfMass,\n        gravity,\n        gradientPerMille,\n        factor\n      ) {\n        const normalForce =\n          (loadMass + selfMass) * gravity;\n\n        const rolling =\n          normalForce * factor;\n\n        const grade =\n          normalForce * gradientPerMille \/ 1000;\n\n        return {\n          total: rolling + grade\n        };\n      }\n\n      function clearResults() {\n        outputs.craneTotal.textContent = \"\u2014\";\n        outputs.trolleyTotal.textContent = \"\u2014\";\n      }\n\n      function formatForce(value) {\n        return `${value.toLocaleString(\"en-US\", {\n          minimumFractionDigits: 2,\n          maximumFractionDigits: 2\n        })} N`;\n      }\n\n      function formatFactor(value) {\n        return value\n          .toFixed(6)\n          .replace(\/0+$\/, \"\")\n          .replace(\/\\.$\/, \"\");\n      }\n\n      function populateFactorOptions(prefix) {\n        const wheelType = fields.wheelType.value;\n        const diameter =\n          Number(fields[`${prefix}Diameter`].value);\n\n        const factorSelect =\n          fields[`${prefix}Factor`];\n\n        const factors = factorSets[wheelType];\n\n        const options = factors.map((factor) => {\n          const option =\n            document.createElement(\"option\");\n\n          option.value = String(factor);\n          option.textContent =\n            formatFactor(factor);\n\n          return option;\n        });\n\n        factorSelect.replaceChildren(...options);\n\n        factorSelect.value = String(\n          rollingFactor(wheelType, diameter)\n        );\n      }\n\n      function syncWheelSelectors(\n        prefix,\n        changedField\n      ) {\n        const wheelType =\n          fields.wheelType.value;\n\n        const diameterSelect =\n          fields[`${prefix}Diameter`];\n\n        const factorSelect =\n          fields[`${prefix}Factor`];\n\n        if (changedField === \"type\") {\n          populateFactorOptions(prefix);\n          return;\n        }\n\n        if (changedField === \"factor\") {\n          const factor =\n            Number(factorSelect.value);\n\n          const index =\n            factorSets[wheelType].findIndex(\n              (candidate) => candidate === factor\n            );\n\n          if (index !== -1) {\n            diameterSelect.value =\n              String(diameterPoints[index]);\n          }\n\n          return;\n        }\n\n        factorSelect.value = String(\n          rollingFactor(\n            wheelType,\n            Number(diameterSelect.value)\n          )\n        );\n      }\n\n      function readAndValidate() {\n        const values = {\n          loadMass: validateInput(\n            \"loadMass\",\n            \"Rated load\",\n            0,\n            1000000000,\n            true\n          ),\n\n          gravity: validateInput(\n            \"gravity\",\n            \"Gravity\",\n            1,\n            20,\n            false\n          ),\n\n          gradient: validateInput(\n            \"gradient\",\n            \"Uphill gradient\",\n            0,\n            100,\n            true\n          ),\n\n          craneMass: validateInput(\n            \"craneMass\",\n            \"Crane self mass\",\n            0,\n            1000000000,\n            false\n          ),\n\n          craneDiameter:\n            Number(fields.craneDiameter.value),\n\n          craneFactor:\n            Number(fields.craneFactor.value),\n\n          trolleyMass: validateInput(\n            \"trolleyMass\",\n            \"Trolley self mass\",\n            0,\n            1000000000,\n            false\n          ),\n\n          trolleyDiameter:\n            Number(fields.trolleyDiameter.value),\n\n          trolleyFactor:\n            Number(fields.trolleyFactor.value),\n\n          wheelType:\n            fields.wheelType.value\n        };\n\n        const linkedSelectionsValid =\n          values.craneFactor === rollingFactor(\n            values.wheelType,\n            values.craneDiameter\n          ) &&\n          values.trolleyFactor === rollingFactor(\n            values.wheelType,\n            values.trolleyDiameter\n          );\n\n        const invalid =\n          Object.entries(values).filter(\n            ([name, value]) =>\n              name !== \"wheelType\" &&\n              (\n                value === null ||\n                !Number.isFinite(value)\n              )\n          );\n\n        if (!linkedSelectionsValid) {\n          setError(\n            \"craneFactor\",\n            \"Wheel construction, diameter and factor must match.\"\n          );\n\n          setError(\n            \"trolleyFactor\",\n            \"Wheel construction, diameter and factor must match.\"\n          );\n\n          return null;\n        }\n\n        return invalid.length ? null : values;\n      }\n\n      function showResults(crane, trolley) {\n        outputs.craneTotal.textContent =\n          formatForce(crane.total);\n\n        outputs.trolleyTotal.textContent =\n          formatForce(trolley.total);\n      }\n\n      populateFactorOptions(\"crane\");\n      populateFactorOptions(\"trolley\");\n\n      fields.wheelType.addEventListener(\n        \"change\",\n        () => {\n          syncWheelSelectors(\"crane\", \"type\");\n          syncWheelSelectors(\"trolley\", \"type\");\n        }\n      );\n\n      fields.craneDiameter.addEventListener(\n        \"change\",\n        () => syncWheelSelectors(\n          \"crane\",\n          \"diameter\"\n        )\n      );\n\n      fields.craneFactor.addEventListener(\n        \"change\",\n        () => syncWheelSelectors(\n          \"crane\",\n          \"factor\"\n        )\n      );\n\n      fields.trolleyDiameter.addEventListener(\n        \"change\",\n        () => syncWheelSelectors(\n          \"trolley\",\n          \"diameter\"\n        )\n      );\n\n      fields.trolleyFactor.addEventListener(\n        \"change\",\n        () => syncWheelSelectors(\n          \"trolley\",\n          \"factor\"\n        )\n      );\n\n      Object.keys(fields).forEach(\n        (fieldName) => {\n          fields[fieldName].addEventListener(\n            \"input\",\n            () => clearError(fieldName)\n          );\n\n          fields[fieldName].addEventListener(\n            \"change\",\n            () => clearError(fieldName)\n          );\n        }\n      );\n\n      form.addEventListener(\n        \"submit\",\n        (event) => {\n          event.preventDefault();\n\n          summary.textContent = \"\";\n          summary.classList.remove(\"visible\");\n\n          const values = readAndValidate();\n\n          if (!values) {\n            clearResults();\n\n            summary.textContent =\n              \"Please correct the highlighted fields.\";\n\n            summary.classList.add(\"visible\");\n            summary.focus();\n            return;\n          }\n\n          const crane =\n            calculateTravelResistance(\n              values.loadMass,\n              values.craneMass,\n              values.gravity,\n              values.gradient,\n              values.craneFactor\n            );\n\n          const trolley =\n            calculateTravelResistance(\n              values.loadMass,\n              values.trolleyMass,\n              values.gravity,\n              values.gradient,\n              values.trolleyFactor\n            );\n\n          showResults(crane, trolley);\n        }\n      );\n\n      form.addEventListener(\n        \"reset\",\n        () => {\n          window.setTimeout(() => {\n            Object.keys(fields).forEach(\n              clearError\n            );\n\n            summary.textContent = \"\";\n            summary.classList.remove(\"visible\");\n\n            populateFactorOptions(\"crane\");\n            populateFactorOptions(\"trolley\");\n            clearResults();\n          }, 0);\n        }\n      );\n    })();\n  <\/script>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u30af\u30ec\u30fc\u30f3\u8d70\u884c\u6642\u306e\u9759\u62b5\u6297\u8a08\u7b97\u5f0f<\/h2>\n\n\n\n<div id=\"travel-resistance-formulas\">\n  <div class=\"formula\">\n    \u3075<sub>f<\/sub>\n    = (G<sub>n<\/sub> + G) \u00d7 g \u00d7 f<sub>r<\/sub>\n  <\/div>\n\n  <div class=\"formula\">\n    \u3075<sub>s<\/sub>\n    = (G<sub>n<\/sub> + G) \u00d7 g \u00d7 i\n    <span class=\"formula-condition\">\n    <\/span>\n  <\/div>\n\n  <div class=\"formula formula-total\">\n    \u3075<sub>st\u3001max<\/sub>\n    = F<sub>f<\/sub>\n    + F<sub>s<\/sub>\n  <\/div>\n\n  <style>\n    #travel-resistance-formulas {\n      --text-color: #4a4a4a;\n\n      width: 100%;\n      margin: 0;\n      padding: 0;\n      color: var(--text-color);\n      box-sizing: border-box;\n    }\n\n    #travel-resistance-formulas *,\n    #travel-resistance-formulas *::before,\n    #travel-resistance-formulas *::after {\n      box-sizing: border-box;\n    }\n\n    #travel-resistance-formulas .formula {\n      padding: 7px 0;\n      color: var(--text-color);\n      font-family: \"Segoe UI\", Arial, Helvetica, sans-serif;\n      font-size: 20px;\n      font-style: normal;\n      font-weight: 400;\n      line-height: 1.55;\n      text-align: left;\n      white-space: nowrap;\n    }\n\n    #travel-resistance-formulas .formula sub {\n      font-size: 65%;\n      font-style: normal;\n      vertical-align: -0.3em;\n    }\n\n    #travel-resistance-formulas .formula-condition {\n      margin-left: 8px;\n      font-size: 16px;\n      font-style: normal;\n      font-weight: 400;\n    }\n\n    #travel-resistance-formulas .formula-total {\n      color: var(--text-color);\n      font-size: 20px;\n      font-style: normal;\n      font-weight: 600;\n    }\n\n    @media (max-width: 520px) {\n      #travel-resistance-formulas {\n        overflow-x: auto;\n      }\n\n      #travel-resistance-formulas .formula {\n        font-size: 18px;\n      }\n\n      #travel-resistance-formulas .formula-condition {\n        font-size: 14px;\n      }\n\n      #travel-resistance-formulas .formula-total {\n        font-size: 18px;\n      }\n    }\n  <\/style>\n<\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b0<sub>n<\/sub>\u30af\u30ec\u30fc\u30f3\u306e\u5b9a\u683c\u8377\u91cd\u3001\u5358\u4f4d\uff1akg<\/li>\n\n\n\n<li>G\uff1a\u30af\u30ec\u30fc\u30f3\u81ea\u91cd\u3001\u5358\u4f4d\uff1akg<\/li>\n\n\n\n<li>\u30b0<sub>1<\/sub>\u30c8\u30ed\u30ea\u30fc\u306e\u81ea\u91cd\u3001\u5358\u4f4d\uff1akg<\/li>\n\n\n\n<li>g\uff1a\u91cd\u529b\uff08\u5024\u306f10 N\/kg\u3068\u3059\u308b\uff09<\/li>\n\n\n\n<li>f<sub>r<\/sub>\u8ee2\u304c\u308a\u6469\u64e6\u4fc2\u6570<\/li>\n\n\n\n<li>i: \u60f3\u5b9a\u3055\u308c\u308b\u50be\u659c<\/li>\n\n\n\n<li>\u3075<sub>f<\/sub>\u6469\u64e6\u62b5\u6297\u3001\u5358\u4f4d\uff1aN<\/li>\n\n\n\n<li>Fs\uff1a\u52fe\u914d\u62b5\u6297\u3001\u5358\u4f4d\uff1aN<\/li>\n\n\n\n<li>\u3075<sub>st\u3001max<\/sub>\u30af\u30ec\u30fc\u30f3\u306e\u8d70\u884c\u6642\u306e\u9759\u62b5\u6297\u3001\u5358\u4f4d\uff1aN<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u6ce8\u8a18<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u3053\u306e<sub>r<\/sub> \u3053\u306e\u4fc2\u6570\u306f\u5b9f\u969b\u306b\u306f\u3001\u8eca\u8f2a\u306e\u8ee2\u304c\u308a\u62b5\u6297\u3068\u8eca\u8f2a\u30d9\u30a2\u30ea\u30f3\u30b0\u306e\u6469\u64e6\u306b\u52a0\u3048\u3066\u3001\u8eca\u8f2a\u30d5\u30e9\u30f3\u30b8\u306b\u95a2\u9023\u3059\u308b\u8ffd\u52a0\u7684\u306a\u5f71\u97ff\u3092\u8868\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li>\u4e00\u822c\u7684\u306b\u3001\u30af\u30ec\u30fc\u30f3\u306e\u8d70\u884c\u6a5f\u69cb\u306e\u8eca\u8f2a\u5f84\u306f\u3001\u30c8\u30ed\u30ea\u30fc\u306e\u8d70\u884c\u6a5f\u69cb\u306e\u8eca\u8f2a\u5f84\u3088\u308a\u3082\u5927\u304d\u3044\u3002\u305d\u306e\u305f\u3081\u3001\u3053\u306e\u8a08\u7b97\u30c4\u30fc\u30eb\u3067\u306f\u3001\u305d\u308c\u305e\u308c\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u57fa\u3065\u3044\u3066\u500b\u5225\u306b\u8a08\u7b97\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u308b\u3002<\/li>\n\n\n\n<li>\u79fb\u52d5\u6a5f\u69cb\u3084\u96fb\u52d5\u6a5f\u306e\u5834\u5408\u3001\u96fb\u529b\u8981\u4ef6\u306f\u6bd4\u8f03\u7684\u654f\u611f\u3067\u3059\u3002\u308f\u305a\u304b1\u2030\u306e\u52fe\u914d\u3067\u3082\u5b9f\u969b\u306e\u8d70\u884c\u62b5\u6297\u304c\u767a\u751f\u3057\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u65bd\u8a2d\u304b\u3089\u306e\u6e2c\u5b9a\u30c7\u30fc\u30bf\u304c\u306a\u3044\u5834\u5408\u306f\u3001\u30e2\u30fc\u30bf\u30fc\u306e\u5bb9\u91cf\u4e0d\u8db3\u3092\u9632\u3050\u305f\u3081\u306b\u3001\u60f3\u5b9a\u3055\u308c\u308b\u52fe\u914d\u304c\u7d44\u307f\u8fbc\u307e\u308c\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u9069\u7528\u53ef\u80fd\u306a\u30af\u30ec\u30fc\u30f3<\/h2>\n\n\n\n<p>\u4e0b\u8a18\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u308b\u88fd\u54c1\u306f\u3001\u4e3b\u306b\u5bc6\u9589\u3055\u308c\u305f\u5c4b\u5185\u5de5\u5834\u74b0\u5883\u3067\u306e\u4f7f\u7528\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b7\u30f3\u30b0\u30eb\u30ac\u30fc\u30c0\u30fc\u5f0f\u5929\u4e95\u30af\u30ec\u30fc\u30f3<\/li>\n\n\n\n<li>\u4e8c\u91cd\u6841\u5929\u4e95\u30af\u30ec\u30fc\u30f3<\/li>\n\n\n\n<li>\u30b7\u30f3\u30b0\u30eb\u30ac\u30fc\u30c0\u30fc\u5f0f\u30ac\u30f3\u30c8\u30ea\u30fc\u30af\u30ec\u30fc\u30f3\uff08\u5c4b\u5185\u7528\uff09<\/li>\n\n\n\n<li>\u4e8c\u91cd\u6841\u5f0f\u30ac\u30f3\u30c8\u30ea\u30fc\u30af\u30ec\u30fc\u30f3\uff08\u5c4b\u5185\u7528\uff09<\/li>\n\n\n\n<li>\u5929\u4e95\u30af\u30ec\u30fc\u30f3\u306e\u30c8\u30ed\u30ea\u30fc<\/li>\n\n\n\n<li>\u30ac\u30f3\u30c8\u30ea\u30fc\u30af\u30ec\u30fc\u30f3\u306e\u30c8\u30ed\u30ea\u30fc<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"\u30af\u30ec\u30fc\u30f3\u8d70\u884c\u6642\u306e\u9759\u62b5\u6297\u8a08\u7b97\u30c4\u30fc\u30eb\u306f\u3001\u901a\u5e38\u306e\u8d70\u884c\u6642\u306b\u6469\u64e6\u3068\u8ecc\u9053\u52fe\u914d\u3092\u514b\u670d\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u529b\u3092\u63a8\u5b9a\u3057\u307e\u3059\u3002\u5b9a\u683c\u8377\u91cd\u3068\u30af\u30ec\u30fc\u30f3\u306e\u81ea\u91cd\u3092\u7528\u3044\u3066\u3001\u30e2\u30fc\u30bf\u30fc\u3068\u99c6\u52d5\u88c5\u7f6e\u304c\u30af\u30ec\u30fc\u30f3\u3092\u52d5\u304b\u305b\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u8a08\u7b97\u7d50\u679c\u306f\u3001\u9069\u5207\u306a\u30e2\u30fc\u30bf\u30fc\u3001\u30ae\u30a2\u30dc\u30c3\u30af\u30b9\u3001\u304a\u3088\u3073\u8eca\u8f2a\u306e\u9078\u5b9a\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002\u307e\u305f\u3001\u3053\u306e\u8a08\u7b97\u30c4\u30fc\u30eb\u306f\u3001\u8eca\u8f2a\u306e\u30b9\u30ea\u30c3\u30d7\u30ea\u30b9\u30af\u306e\u8a55\u4fa1\u306b\u3082\u5f79\u7acb\u3061\u307e\u3059\u3002\u50be\u659c\u8ecc\u9053\u306e\u5834\u5408\u3001\u505c\u6b62\u5f8c\u306e\u30af\u30ec\u30fc\u30f3\u306e\u30b9\u30ea\u30c3\u30d7\u306e\u53ef\u80fd\u6027\u3092\u8a55\u4fa1\u3057\u3001\u30d9\u30a2\u30ea\u30f3\u30b0\u306e\u640d\u50b7\u3001\u30ec\u30fc\u30eb\u306e\u565b\u307f\u5408\u3044\u3001\u304a\u3088\u3073\u8a2d\u7f6e\u95a2\u9023\u306e\u554f\u984c\u3092\u9632\u304e\u307e\u3059\u3002","protected":false},"author":8,"featured_media":17373,"parent":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"single-onlinetools.php","format":"standard","meta":{"_acf_changed":false,"rank_math_lock_modified_date":false,"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[1059],"tags":[],"class_list":["post-17375","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-online-tools"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.dgcrane.com\/ja\/wp-json\/wp\/v2\/posts\/17375"}],"collection":[{"href":"https:\/\/www.dgcrane.com\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dgcrane.com\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dgcrane.com\/ja\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dgcrane.com\/ja\/wp-json\/wp\/v2\/comments?post=17375"}],"version-history":[{"count":5,"href":"https:\/\/www.dgcrane.com\/ja\/wp-json\/wp\/v2\/posts\/17375\/revisions"}],"predecessor-version":[{"id":17380,"href":"https:\/\/www.dgcrane.com\/ja\/wp-json\/wp\/v2\/posts\/17375\/revisions\/17380"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dgcrane.com\/ja\/wp-json\/wp\/v2\/media\/17373"}],"wp:attachment":[{"href":"https:\/\/www.dgcrane.com\/ja\/wp-json\/wp\/v2\/media?parent=17375"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dgcrane.com\/ja\/wp-json\/wp\/v2\/categories?post=17375"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dgcrane.com\/ja\/wp-json\/wp\/v2\/tags?post=17375"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}