{"product_id":"cable-protector-ramps-polyurethane-rubber","title":"Cable Protector Ramps - Polyurethane \u0026 Rubber, 2\/3\/5 Channels","description":"\u003cstyle\u003e.cable-merge-table{max-width:100%;overflow-x:auto;border:1px solid #d9dde3;border-radius:8px;margin:16px 0}.cable-merge-table table{width:100%;margin:0!important;border-collapse:separate;border-spacing:0;min-width:460px;table-layout:auto}.cable-merge-table th,.cable-merge-table td{padding:12px!important;text-align:left;word-break:normal!important;white-space:nowrap;border:0;border-bottom:1px solid #e3e6ea}.cable-merge-table th{background:#f4f6f8}.cable-merge-table tr:last-child td{border-bottom:0}\u003c\/style\u003e\u003cp\u003eProtect and organize cables with OranLite cable protector ramps in orange polyurethane or black rubber with a yellow lid. Choose from 2-, 3-, and 5-channel designs, with pack quantities shown for each option.\u003c\/p\u003e\n\u003ch2\u003eOrange Polyurethane\u003c\/h2\u003e\u003cp\u003eOrange polyurethane cable protectors with a high-visibility yellow lid and textured surface. Available in 2-, 3-, and 5-channel designs. Each option includes one cable protector.\u003c\/p\u003e\n\u003cdiv class=\"cable-merge-table\"\u003e\u003ctable\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eStyle \/ Qty\u003c\/th\u003e\n\u003cth\u003eSKU\u003c\/th\u003e\n\u003cth\u003ePack Quantity\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e2-Channel \/ 1PC\u003c\/td\u003e\n\u003ctd\u003eBS-NCP-5M\u003c\/td\u003e\n\u003ctd\u003e1PC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3-Channel \/ 1PC\u003c\/td\u003e\n\u003ctd\u003eBS-NCP-4M\u003c\/td\u003e\n\u003ctd\u003e1PC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5-Channel \/ 1PC\u003c\/td\u003e\n\u003ctd\u003eBS-NCP-2M\u003c\/td\u003e\n\u003ctd\u003e1PC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003ch2\u003eBlack Rubber\u003c\/h2\u003e\u003cp\u003eA recycled rubber base, high-visibility yellow PVC lid, and extra anti-slip surface pattern. Available in small and large 2-channel designs, plus 3- and 5-channel options. Pack quantities vary by style.\u003c\/p\u003e\n\u003cdiv class=\"cable-merge-table\"\u003e\u003ctable\u003e\n\u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eStyle \/ Qty\u003c\/th\u003e\n\u003cth\u003eSKU\u003c\/th\u003e\n\u003cth\u003ePack Quantity\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e2-Channel Small \/ 2PCS\u003c\/td\u003e\n\u003ctd\u003eBS-ECP-5MX2\u003c\/td\u003e\n\u003ctd\u003e2PCS\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2-Channel Small \/ 4PCS\u003c\/td\u003e\n\u003ctd\u003eBS-ECP-5MX4\u003c\/td\u003e\n\u003ctd\u003e4PCS\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2-Channel Large \/ 1PC\u003c\/td\u003e\n\u003ctd\u003eBS-ECP-7NX1\u003c\/td\u003e\n\u003ctd\u003e1PC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3-Channel \/ 1PC\u003c\/td\u003e\n\u003ctd\u003eBS-ECP-4MX1\u003c\/td\u003e\n\u003ctd\u003e1PC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3-Channel \/ 2PCS\u003c\/td\u003e\n\u003ctd\u003eBS-ECP-4MX2\u003c\/td\u003e\n\u003ctd\u003e2PCS\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5-Channel \/ 1PC\u003c\/td\u003e\n\u003ctd\u003eBS-ECP-2MX1\u003c\/td\u003e\n\u003ctd\u003e1PC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5-Channel \/ 2PCS\u003c\/td\u003e\n\u003ctd\u003eBS-ECP-2MX2\u003c\/td\u003e\n\u003ctd\u003e2PCS\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\u003c\/div\u003e\n\u003cp\u003eChannel dimensions and load limits vary by model. Confirm cable fit and the requirements of your installation before ordering. A pack quantity refers to the number of cable protector sections, not the number of channels.\u003c\/p\u003e\u003cstyle\u003e\n.video-wrap {\n  display: flex;\n  gap: 24px;\n  flex-wrap: wrap;\n  align-items: flex-start;\n  font-family: Arial, sans-serif;\n  max-width: 1200px;\n  margin: 0 auto;\n}\n\n\/* ===== 主播放器 ===== *\/\n.video-player {\n  flex: 2;\n  min-width: 320px;\n  background: #000;\n  border-radius: 16px;\n  overflow: hidden;\n  box-shadow: 0 10px 30px rgba(0,0,0,0.25);\n  position: relative;\n}\n\n#player {\n  width: 100%;\n  height: 520px;\n}\n\n\/* ===== 控制按钮 ===== *\/\n.controls {\n  position: absolute;\n  bottom: 12px;\n  left: 12px;\n  display: flex;\n  gap: 10px;\n  z-index: 10;\n}\n\n.controls button {\n  background: rgba(0,0,0,0.6);\n  color: #fff;\n  border: 1px solid rgba(255,255,255,0.2);\n  padding: 8px 12px;\n  border-radius: 8px;\n  cursor: pointer;\n  font-size: 14px;\n}\n\n\/* ===== 视频列表 ===== *\/\n.video-list {\n  flex: 1;\n  min-width: 280px;\n  background: #111;\n  border-radius: 16px;\n  padding: 12px;\n  display: flex;\n  flex-direction: row;\n  overflow-x: auto;\n  gap: 10px;\n}\n\n.video-item {\n  flex: 0 0 auto;\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  padding: 10px;\n  cursor: pointer;\n  border-radius: 12px;\n  transition: 0.25s;\n  background: #1c1c1c;\n  border: 1px solid transparent;\n  min-width: 160px;\n}\n\n.video-item:hover {\n  transform: translateY(-2px);\n  background: #2a2a2a;\n}\n\n.video-item.active {\n  border: 1px solid #ff3b3b;\n  background: #222;\n}\n\n.video-item img {\n  width: 100%;\n  height: 90px;\n  object-fit: cover;\n  border-radius: 8px;\n}\n\n.video-title {\n  font-size: 14px;\n  color: #fff;\n  line-height: 1.4;\n  text-align: center;\n}\n\n\/* =========================\n   手机端优化\n========================= *\/\n@media (max-width: 768px) {\n  .video-wrap {\n    flex-direction: column;\n    gap: 10px;\n  }\n\n  .video-player {\n    width: 100vw;\n    margin-left: -16px;\n    border-radius: 0;\n  }\n\n  #player {\n    width: 100vw;\n    height: calc(100vw * 9 \/ 16);\n  }\n\n  .controls {\n    display: none;\n  }\n\n  .video-list {\n    flex-direction: row;\n    overflow-x: auto;\n    gap: 10px;\n    padding: 10px;\n    scrollbar-width: none;\n  }\n\n  .video-list::-webkit-scrollbar {\n    display: none;\n  }\n\n  .video-item {\n    min-width: 160px;\n  }\n\n  .video-item img {\n    height: 120px;\n  }\n\n  .video-title {\n    font-size: 13px;\n  }\n}\n\u003c\/style\u003e\u003cdiv class=\"product-videos\"\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n.video-wrap {\n  display: flex;\n  gap: 24px;\n  flex-wrap: wrap;\n  align-items: flex-start;\n  font-family: Arial, sans-serif;\n  max-width: 1200px;\n  margin: 0 auto;\n}\n\n\/* ===== 主播放器 ===== *\/\n.video-player {\n  flex: 2;\n  min-width: 320px;\n  background: #000;\n  border-radius: 16px;\n  overflow: hidden;\n  box-shadow: 0 10px 30px rgba(0,0,0,0.25);\n  position: relative;\n}\n\n#player {\n  width: 100%;\n  height: 520px;\n}\n\n\/* ===== 控制按钮 ===== *\/\n.controls {\n  position: absolute;\n  bottom: 12px;\n  left: 12px;\n  display: flex;\n  gap: 10px;\n  z-index: 10;\n}\n\n.controls button {\n  background: rgba(0,0,0,0.6);\n  color: #fff;\n  border: 1px solid rgba(255,255,255,0.2);\n  padding: 8px 12px;\n  border-radius: 8px;\n  cursor: pointer;\n  font-size: 14px;\n}\n\n\/* ===== 视频列表 ===== *\/\n.video-list {\n  flex: 1;\n  min-width: 280px;\n  background: #111;\n  border-radius: 16px;\n  padding: 12px;\n  display: flex;\n  flex-direction: row;\n  overflow-x: auto;\n  gap: 10px;\n}\n\n.video-item {\n  flex: 0 0 auto;\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  padding: 10px;\n  cursor: pointer;\n  border-radius: 12px;\n  transition: 0.25s;\n  background: #1c1c1c;\n  border: 1px solid transparent;\n  min-width: 160px;\n}\n\n.video-item:hover {\n  transform: translateY(-2px);\n  background: #2a2a2a;\n}\n\n.video-item.active {\n  border: 1px solid #ff3b3b;\n  background: #222;\n}\n\n.video-item img {\n  width: 100%;\n  height: 90px;\n  object-fit: cover;\n  border-radius: 8px;\n}\n\n.video-title {\n  font-size: 14px;\n  color: #fff;\n  line-height: 1.4;\n  text-align: center;\n}\n\n\/* =========================\n   手机端优化\n========================= *\/\n@media (max-width: 768px) {\n  .video-wrap {\n    flex-direction: column;\n    gap: 10px;\n  }\n\n  .video-player {\n    width: 100vw;\n    margin-left: -16px;\n    border-radius: 0;\n  }\n\n  #player {\n    width: 100vw;\n    height: calc(100vw * 9 \/ 16);\n  }\n\n  .controls {\n    display: none;\n  }\n\n  .video-list {\n    flex-direction: row;\n    overflow-x: auto;\n    gap: 10px;\n    padding: 10px;\n    scrollbar-width: none;\n  }\n\n  .video-list::-webkit-scrollbar {\n    display: none;\n  }\n\n  .video-item {\n    min-width: 160px;\n  }\n\n  .video-item img {\n    height: 120px;\n  }\n\n  .video-title {\n    font-size: 13px;\n  }\n}\n\u003c\/style\u003e\n\u003cdiv class=\"product-videos\"\u003e\n\u003cdiv class=\"video-wrap\"\u003e\n\u003c!-- 主播放器 --\u003e\n\u003cdiv class=\"video-player\"\u003e\n\u003cdiv id=\"player\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"controls\"\u003e\n\u003cbutton id=\"prevBtn\" type=\"button\"\u003e⟵ Prev\u003c\/button\u003e \u003cbutton id=\"nextBtn\" type=\"button\"\u003eNext ⟶\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- 视频列表 --\u003e\n\u003cdiv class=\"video-list\"\u003e\n\u003c!-- 视频1 --\u003e\n\u003cdiv class=\"video-item active\"\u003e\n\u003cimg src=\"https:\/\/img.youtube.com\/vi\/wGmarMRnUik\/hqdefault.jpg\" alt=\"Crushing test video\"\u003e\n\u003cdiv class=\"video-title\"\u003eCrushing test video\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- 视频2 --\u003e\n\u003cdiv class=\"video-item\"\u003e\n\u003cimg src=\"https:\/\/img.youtube.com\/vi\/LZdI9wCNJo8\/hqdefault.jpg\" alt=\"2-Channel Video\"\u003e\n\u003cdiv class=\"video-title\"\u003e2-Channel Video\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- 视频3 --\u003e\n\u003cdiv class=\"video-item\"\u003e\n\u003cimg src=\"https:\/\/img.youtube.com\/vi\/OekFr3rJoTQ\/hqdefault.jpg\" alt=\"2-Big Channel Video\"\u003e\n\u003cdiv class=\"video-title\"\u003e2-Big Channel Video\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- 视频4 --\u003e\n\u003cdiv class=\"video-item\"\u003e\n\u003cimg src=\"https:\/\/img.youtube.com\/vi\/Afxb2vcsgZw\/hqdefault.jpg\" alt=\"3-Channel Video\"\u003e\n\u003cdiv class=\"video-title\"\u003e3-Channel Video\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cscript src=\"https:\/\/www.youtube.com\/iframe_api\"\u003e\u003c\/script\u003e \u003cscript\u003e\nconst videos = [\n  \"wGmarMRnUik\",\n  \"LZdI9wCNJo8\",\n  \"OekFr3rJoTQ\",\n  \"Afxb2vcsgZw\"\n];\n\nlet player;\nlet currentIndex = 0;\nlet isReady = false;\n\n\n\/* ===== 初始化播放器 ===== *\/\nfunction onYouTubeIframeAPIReady() {\n\n  player = new YT.Player(\"player\", {\n\n    videoId: videos[0],\n\n    playerVars: {\n      autoplay: 0,\n      controls: 1,\n      rel: 0,\n      playsinline: 1\n    },\n\n    events: {\n\n      onReady: function () {\n        isReady = true;\n      },\n\n      onStateChange: onPlayerStateChange\n\n    }\n\n  });\n\n}\n\n\n\/* ===== 播放结束自动进入下一条 ===== *\/\nfunction onPlayerStateChange(event) {\n\n  if (event.data === YT.PlayerState.ENDED) {\n    nextVideo();\n  }\n\n}\n\n\n\/* ===== 播放指定视频 ===== *\/\nfunction playVideo(index) {\n\n  if (!player || !isReady) return;\n\n  if (isNaN(index)) return;\n\n  if (index \u003c 0 || index \u003e= videos.length) return;\n\n  currentIndex = index;\n\n  player.loadVideoById(videos[currentIndex]);\n\n  updateActive();\n\n}\n\n\n\/* ===== 下一条 ===== *\/\nfunction nextVideo() {\n\n  if (!player || !isReady) return;\n\n  currentIndex =\n    (currentIndex + 1) % videos.length;\n\n  player.loadVideoById(videos[currentIndex]);\n\n  updateActive();\n\n}\n\n\n\/* ===== 上一条 ===== *\/\nfunction prevVideo() {\n\n  if (!player || !isReady) return;\n\n  currentIndex =\n    (currentIndex - 1 + videos.length) % videos.length;\n\n  player.loadVideoById(videos[currentIndex]);\n\n  updateActive();\n\n}\n\n\n\/* ===== 更新当前视频高亮 ===== *\/\nfunction updateActive() {\n\n  document.querySelectorAll(\".video-item\").forEach(function (item, index) {\n\n    item.classList.toggle(\n      \"active\",\n      index === currentIndex\n    );\n\n  });\n\n}\n\n\n\/* ===== 绑定按钮和缩略图 ===== *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  const nextBtn = document.getElementById(\"nextBtn\");\n  const prevBtn = document.getElementById(\"prevBtn\");\n\n  if (nextBtn) {\n    nextBtn.addEventListener(\"click\", nextVideo);\n  }\n\n  if (prevBtn) {\n    prevBtn.addEventListener(\"click\", prevVideo);\n  }\n\n\n  document.querySelectorAll(\".video-item\").forEach(function (item) {\n\n    item.addEventListener(\"click\", function () {\n\n      const index = parseInt(\n        this.getAttribute(\"data-index\"),\n        10\n      );\n\n      playVideo(index);\n\n    });\n\n  });\n\n});\n\u003c\/script\u003e\n\u003c\/div\u003e\u003cscript\u003e\n(()=\u003e{if(window.oranliteCableMaterialSelection)return;window.oranliteCableMaterialSelection=true;\ndocument.addEventListener(\"change\",event=\u003e{\nconst input=event.target;\nif(!(input instanceof HTMLInputElement)||input.type!==\"radio\")return;\nconst picker=input.closest('variant-picker[data-url=\"\/products\/cable-protector-ramps-polyurethane-rubber\"]');if(!picker)return;\nconst groups=Array.from(picker.querySelectorAll(\".option-selector\"));\nif(groups.length!==3)return;\nconst changed=groups.findIndex(group=\u003egroup.contains(input));if(changed\u003c0)return;\nconst selected=groups.map(group=\u003egroup.querySelector(\"input:checked\")?.value);\nconst variants=picker.data?.product?.variants;if(!variants)return;\nconst candidates=variants.filter(v=\u003ev.options.slice(0,changed+1).every((value,i)=\u003evalue===selected[i]));\nif(candidates.some(v=\u003ev.options.every((value,i)=\u003evalue===selected[i])))return;\nconst ranked=candidates.slice().sort((a,b)=\u003e{\nconst score=v=\u003ev.options.reduce((n,value,i)=\u003en+(i\u003echanged\u0026\u0026value===selected[i]?(i===1?4:2):0),v.available?1:0);\nreturn score(b)-score(a);});\nconst next=ranked[0];if(!next)return;\ngroups.forEach((group,i)=\u003e{if(i\u003c=changed)return;const target=Array.from(group.querySelectorAll(\"input\")).find(e=\u003ee.value===next.options[i]);if(target)target.checked=true;});\n},true);})();\n\u003c\/script\u003e","brand":"OranLite","offers":[{"title":"Orange Polyurethane \/ 2-Channel \/ 1PC","offer_id":68120186356016,"sku":"BS-NCP-5M","price":39.81,"currency_code":"USD","in_stock":true},{"title":"Orange Polyurethane \/ 3-Channel \/ 1PC","offer_id":68120186388784,"sku":"BS-NCP-4M","price":76.21,"currency_code":"USD","in_stock":true},{"title":"Orange Polyurethane \/ 5-Channel \/ 1PC","offer_id":68120186421552,"sku":"BS-NCP-2M","price":63.62,"currency_code":"USD","in_stock":true},{"title":"Black Rubber \/ 2-Channel \/ 2PCS","offer_id":67497007382832,"sku":"BS-ECP-5MX2","price":46.58,"currency_code":"USD","in_stock":true},{"title":"Black Rubber \/ 2-Channel \/ 4PCS","offer_id":50381282705712,"sku":"BS-ECP-5MX4","price":78.44,"currency_code":"USD","in_stock":true},{"title":"Black Rubber \/ 2-Channel Large \/ 1PC","offer_id":50397931045168,"sku":"BS-ECP-7NX1","price":108.84,"currency_code":"USD","in_stock":true},{"title":"Black Rubber \/ 3-Channel \/ 1PC","offer_id":67497007350064,"sku":"BS-ECP-4MX1","price":59.17,"currency_code":"USD","in_stock":true},{"title":"Black Rubber \/ 3-Channel \/ 2PCS","offer_id":50381282836784,"sku":"BS-ECP-4MX2","price":103.66,"currency_code":"USD","in_stock":true},{"title":"Black Rubber \/ 5-Channel \/ 1PC","offer_id":67496991359280,"sku":"BS-ECP-2MX1","price":51.58,"currency_code":"USD","in_stock":true},{"title":"Black Rubber \/ 5-Channel \/ 2PCS","offer_id":50381282771248,"sku":"BS-ECP-2MX2","price":85.91,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0839\/3690\/3472\/files\/oranlite-cable-protector-polyurethane-rubber-cover.png?v=1792332835","url":"https:\/\/www.oranlite.com\/products\/cable-protector-ramps-polyurethane-rubber","provider":"OranLite","version":"1.0","type":"link"}