Kit de 2 Unidades del Punto de Acceso WiFi 6 con Antena Sectorial de 80° de Apertura, Cobertura de Hasta 600 m, MIMO 2x2, Doble Banda, Hasta 574 Mbps en 2.4 GHz y Hasta 2402 Mbps en 5 GHz, Administración en Nube Gratis con INSIGHTS
Disponibilidad: Agotado
- WiFi 6 (802.11AX) con velocidad hasta 2.976 Gbps
- Doble banda simultánea 2.4 GHz (574 Mbps) y 5 GHz (2.402 Mbps)
- Administración en nube gratuita con plataforma INSIGHTS
- Diseño exterior IP55 para instalación en pared o poste
Marca: ALTAI TECHNOLOGIES
Modelo: KIT2-C260S
Clave SAT: 43222640
Garantía: 1 año
$8,010.02
Especificaciones del Producto
Peso:
0.68 kg
Dimensiones:
Alto: 25 cm, Ancho: 13 cm, Largo: 5 cm
Categoría:
Redes WiFi
t.classList.remove('active'));e.classList.add('active')}
// ── LIGHTBOX ──
var lbImages=[], lbIndex=0;
var lbScale=1, lbPanX=0, lbPanY=0;
var lbDragging=false, lbDragged=false;
var lbDragSX=0, lbDragSY=0, lbDragPX=0, lbDragPY=0;
var lbMinScale=1, lbMaxScale=5;
(function(){ document.querySelectorAll('.thumbnail img').forEach(function(img){ lbImages.push(img.src); }); })();
document.getElementById('mainImageContainer').addEventListener('click', function(){
var cur=document.getElementById('mainImage').src;
lbIndex=lbImages.indexOf(cur); if(lbIndex<0) lbIndex=0;
lbOpen();
});
function lbOpen(){ var ov=document.getElementById('lightbox-overlay'); ov.classList.add('open'); lbShow(lbIndex); document.body.style.overflow='hidden'; buildDots(); }
function lbClose(){ document.getElementById('lightbox-overlay').classList.remove('open'); document.body.style.overflow=''; lbZoomReset(); }
function lbShow(i){
lbZoomReset();
var img=document.getElementById('lightbox-img');
img.style.opacity='0';
setTimeout(function(){ img.src=lbImages[i]; img.style.opacity='1'; },120);
document.getElementById('lbDots').querySelectorAll('.lb-dot').forEach(function(d,idx){ d.classList.toggle('active',idx===i); });
lbIndex=i;
var show=lbImages.length>1;
document.querySelector('.lb-prev').style.display=show?'':'none';
document.querySelector('.lb-next').style.display=show?'':'none';
}
function lbMove(dir){ if(lbScale>1){ return; } var n=(lbIndex+dir+lbImages.length)%lbImages.length; lbShow(n); }
function buildDots(){
var wrap=document.getElementById('lbDots'); wrap.innerHTML='';
if(lbImages.length<=1) return;
lbImages.forEach(function(_,i){ var d=document.createElement('span'); d.className='lb-dot'+(i===lbIndex?' active':''); d.onclick=function(){ lbShow(i); }; wrap.appendChild(d); });
}
// ── ZOOM ──
function lbApplyTransform(anim){
var img=document.getElementById('lightbox-img');
img.style.transition=anim?'transform .18s ease, opacity .2s':'opacity .2s';
img.style.transform='scale('+lbScale+') translate('+(lbPanX/lbScale)+'px,'+(lbPanY/lbScale)+'px)';
img.classList.toggle('zoomed',lbScale>1);
img.style.cursor=lbScale>1?'grab':'zoom-in';
document.getElementById('lbDots').style.opacity=lbScale>1?'0':'1';
// mostrar/ocultar flechas al hacer zoom
var show=lbImages.length>1&&lbScale<=1;
document.querySelector('.lb-prev').style.opacity=show?'1':'0';
document.querySelector('.lb-prev').style.pointerEvents=show?'':'none';
document.querySelector('.lb-next').style.opacity=show?'1':'0';
document.querySelector('.lb-next').style.pointerEvents=show?'':'none';
}
function lbZoomReset(){
lbScale=1; lbPanX=0; lbPanY=0;
var img=document.getElementById('lightbox-img');
if(img){
img.style.transition='transform .22s ease, opacity .2s';
img.style.transform='scale(1) translate(0,0)';
img.classList.remove('zoomed','dragging');
img.style.cursor='zoom-in';
}
document.getElementById('lbDots').style.opacity='1';
// restaurar flechas
var show=lbImages.length>1;
document.querySelector('.lb-prev').style.opacity=show?'1':'0';
document.querySelector('.lb-prev').style.pointerEvents=show?'auto':'none';
document.querySelector('.lb-next').style.opacity=show?'1':'0';
document.querySelector('.lb-next').style.pointerEvents=show?'auto':'none';
}
function lbZoomBy(delta,cx,cy){
var img=document.getElementById('lightbox-img');
var newScale=Math.max(lbMinScale,Math.min(lbMaxScale,lbScale+delta));
if(newScale===lbScale) return;
if(cx!==undefined&&cy!==undefined){
var rect=img.getBoundingClientRect();
var px=cx-rect.left-rect.width/2, py=cy-rect.top-rect.height/2;
lbPanX+=px*(lbScale-newScale); lbPanY+=py*(lbScale-newScale);
}
lbScale=newScale;
if(lbScale<=1){ lbPanX=0; lbPanY=0; }
lbApplyTransform(true);
}
// Clic simple: zoom in. Doble clic: reset zoom (y flechas vuelven)
var lbClickTimer=null;
document.getElementById('lightbox-img').addEventListener('click',function(e){
e.stopPropagation();
if(lbDragged){ lbDragged=false; return; }
if(lbClickTimer){
// Doble clic → reset zoom
clearTimeout(lbClickTimer); lbClickTimer=null;
lbZoomReset();
return;
}
lbClickTimer=setTimeout(function(){
lbClickTimer=null;
// Clic simple → zoom in solo si no está en zoom
if(lbScale<=1){ lbZoomBy(2, e.clientX, e.clientY); }
},220);
});
// Rueda de ratón: zoom in/out pero nunca por debajo de escala 1
document.getElementById('lightbox-img-wrap').addEventListener('wheel',function(e){
e.preventDefault();
if(e.deltaY>0){
// Reducir — pero no pasar de 1
var nuevoScale=Math.max(1, lbScale-0.5);
if(nuevoScale===lbScale) return;
lbScale=nuevoScale;
if(lbScale<=1){ lbPanX=0; lbPanY=0; }
lbApplyTransform(true);
} else {
lbZoomBy(0.5, e.clientX, e.clientY);
}
},{passive:false});
// Drag para paneo
document.getElementById('lightbox-img').addEventListener('mousedown',function(e){
if(lbScale<=1) return;
lbDragging=true; lbDragged=false;
lbDragSX=e.clientX; lbDragSY=e.clientY; lbDragPX=lbPanX; lbDragPY=lbPanY;
this.classList.add('dragging'); e.preventDefault();
});
document.addEventListener('mousemove',function(e){
if(!lbDragging) return;
var dx=e.clientX-lbDragSX, dy=e.clientY-lbDragSY;
if(Math.abs(dx)>3||Math.abs(dy)>3) lbDragged=true;
lbPanX=lbDragPX+dx; lbPanY=lbDragPY+dy;
lbApplyTransform(false);
});
document.addEventListener('mouseup',function(){ if(lbDragging){ lbDragging=false; document.getElementById('lightbox-img').classList.remove('dragging'); } });
// Cerrar fondo
document.getElementById('lightbox-overlay').addEventListener('click',function(e){ if(e.target===this) lbClose(); });
// Teclado
document.addEventListener('keydown',function(e){
if(!document.getElementById('lightbox-overlay').classList.contains('open')) return;
if(e.key==='Escape') lbClose();
if(e.key==='ArrowLeft'||e.key==='ArrowRight'){ if(lbScale<=1) lbMove(e.key==='ArrowLeft'?-1:1); }
if(e.key==='+'||e.key==='=') lbZoomBy(0.5);
if(e.key==='-') lbZoomBy(-0.5);
if(e.key==='0') lbZoomReset();
});
// Pinch zoom + swipe táctil
(function(){
var sx=0,sy=0,lastDist=0,pinching=false,tPanX=0,tPanY=0;
var el=document.getElementById('lightbox-overlay');
el.addEventListener('touchstart',function(e){
if(e.touches.length===2){ pinching=true; lastDist=Math.hypot(e.touches[0].clientX-e.touches[1].clientX,e.touches[0].clientY-e.touches[1].clientY); }
else { pinching=false; sx=e.touches[0].clientX; sy=e.touches[0].clientY; tPanX=lbPanX; tPanY=lbPanY; }
},{passive:true});
el.addEventListener('touchmove',function(e){
if(e.touches.length===2&&pinching){
e.preventDefault();
var dist=Math.hypot(e.touches[0].clientX-e.touches[1].clientX,e.touches[0].clientY-e.touches[1].clientY);
var cx=(e.touches[0].clientX+e.touches[1].clientX)/2, cy=(e.touches[0].clientY+e.touches[1].clientY)/2;
lbZoomBy((dist-lastDist)*0.018,cx,cy); lastDist=dist;
} else if(e.touches.length===1&&lbScale>1){
e.preventDefault();
lbPanX=tPanX+(e.touches[0].clientX-sx); lbPanY=tPanY+(e.touches[0].clientY-sy);
lbApplyTransform(false);
}
},{passive:false});
el.addEventListener('touchend',function(e){
if(pinching){ pinching=false; return; }
var dx=e.changedTouches[0].clientX-sx, dy=e.changedTouches[0].clientY-sy;
if(lbScale<=1&&Math.abs(dx)>Math.abs(dy)&&Math.abs(dx)>40){ lbMove(dx<0?1:-1); }
},{passive:true});
})();
function updateQuantity(c){const i=document.getElementById('quantity');let v=parseInt(i.value)||1;v+=c;if(v<1)v=1;if(v>parseInt(i.max))v=parseInt(i.max);i.value=v}
function showAlert(m,ok=true){const a=$('#alertMessage');a.html(`${m}`);a.css('background-color',ok?'#28a745':'#dc3545');a.fadeIn();setTimeout(()=>a.fadeOut(),3000)}
function addToCart(id,qty,co=false,variante='NEW',provId=null){
qty=parseInt(qty)||1;
$('#loaderOverlay').fadeIn();
var payload={ppo:'add',id:id,cant:qty,variante:variante};
if(provId!==null&&provId!==''&&provId!=='-1')payload.proveedor_id=provId;
$.post('controller/carro/functions.php',payload,function(r){
$('#loaderOverlay').fadeOut();
try{
const d=typeof r==='object'?r:JSON.parse(r);
if(d.success){updateCartCount();showAlert('Producto agregado correctamente');if(co)setTimeout(()=>window.location.href='envio.php',500)}
else showAlert(d.message||'Error',false)
}catch(e){
updateCartCount();showAlert('Producto agregado correctamente');
if(co)setTimeout(()=>window.location.href='envios.php',500)
}
}).fail(()=>{$('#loaderOverlay').fadeOut();showAlert('Error de conexión',false)})
}
function updateCartCount(){$.post('controller/carro/functions.php',{ppo:'count'},function(c){$('.cart-count').text(c)})}
// ── SCROLL TO TOP ──
document.getElementById('btnScrollTop').addEventListener('click',function(e){e.preventDefault();window.scrollTo({top:0,behavior:'smooth'})});
// ── FAB FLOTANTES ──
// Usa IntersectionObserver para detectar cuando los botones originales
// salen de pantalla — funciona perfecto en iOS y Android.
var fabIds = ['fabComprar','fabCarrito','fabCompartir','fabWsp'].filter(function(id){ return !!document.getElementById(id); });
var buttonsZone = document.getElementById('productButtons');
var scrollTopBtn = document.getElementById('btnScrollTop');
var fabDelay = [0, 70, 140, 210];
function setFabsVisible(visible){
fabIds.forEach(function(id, i){
var el = document.getElementById(id);
if(!el) return;
clearTimeout(el._fabTimer);
var delay = visible ? fabDelay[i] : fabDelay[fabIds.length - 1 - i];
el._fabTimer = setTimeout(function(){
if(visible){
el.classList.remove('fab-hidden');
el.classList.add('fab-visible');
el.style.animation = 'none';
void el.offsetHeight; // forzar reflow (necesario en Safari/iOS)
el.style.animation = 'fabBounceIn .45s cubic-bezier(.34,1.56,.64,1) both';
} else {
el.classList.remove('fab-visible');
el.classList.add('fab-hidden');
el.style.animation = 'none';
}
}, delay);
});
}
// Scroll-to-top: usar IntersectionObserver también (más confiable en móvil)
var fabVisible = false;
if('IntersectionObserver' in window){
// Observer para los botones (FABs)
var btnObserver = new IntersectionObserver(function(entries){
entries.forEach(function(entry){
var shouldShow = !entry.isIntersecting;
if(shouldShow !== fabVisible){
fabVisible = shouldShow;
setFabsVisible(fabVisible);
}
});
}, { threshold: 0, rootMargin: '0px' });
if(buttonsZone) btnObserver.observe(buttonsZone);
// Observer para el scroll-to-top (desaparece cuando estamos arriba)
var topSentinel = document.createElement('div');
topSentinel.style.cssText = 'position:absolute;top:400px;left:0;height:1px;width:1px;pointer-events:none';
document.body.insertBefore(topSentinel, document.body.firstChild);
var topObserver = new IntersectionObserver(function(entries){
scrollTopBtn.style.display = entries[0].isIntersecting ? 'none' : 'flex';
}, { threshold: 0 });
topObserver.observe(topSentinel);
} else {
// Fallback para navegadores muy viejos
window.addEventListener('scroll', function(){
var scrolled = (window.pageYOffset || document.documentElement.scrollTop) > 300;
scrollTopBtn.style.display = scrolled ? 'flex' : 'none';
if(buttonsZone){
var rect = buttonsZone.getBoundingClientRect();
var outOfView = rect.bottom < 0;
if(outOfView !== fabVisible){
fabVisible = outOfView;
setFabsVisible(fabVisible);
}
}
}, {passive:true});
}
// ── FAB COMPARTIR (con animación especial) ──
function shareFab(btn){
var title = btn.dataset.title || document.title;
var url = window.location.origin + '/' + btn.dataset.url;
function copiar(texto){
var ta=document.createElement('textarea');
ta.value=texto;ta.style.cssText='position:fixed;top:-9999px;left:-9999px;opacity:0';
document.body.appendChild(ta);ta.focus();ta.select();
try{ document.execCommand('copy'); mostrarCopiadoFab(btn); }
catch(e){ prompt('Copia este enlace:',texto); }
document.body.removeChild(ta);
}
if(navigator.share){ navigator.share({title:title,url:url}).catch(function(){ copiar(url); }); }
else if(navigator.clipboard){ navigator.clipboard.writeText(url).then(function(){ mostrarCopiadoFab(btn); }).catch(function(){ copiar(url); }); }
else { copiar(url); }
}
function mostrarCopiadoFab(btn){
btn.classList.add('fab-shared');
var orig = btn.innerHTML;
btn.innerHTML = '';
// Tooltip "¡Copiado!"
var tip = document.createElement('div');
tip.textContent = '¡Enlace copiado!';
tip.style.cssText = 'position:fixed;right:82px;bottom:' + (btn.getBoundingClientRect().top + 16) + 'px;background:#1a2332;color:#fff;font-size:11.5px;font-weight:700;padding:5px 11px;border-radius:6px;white-space:nowrap;z-index:9999;pointer-events:none;box-shadow:0 4px 12px rgba(0,0,0,.2);animation:fabBounceIn .3s ease both';
document.body.appendChild(tip);
setTimeout(function(){
btn.classList.remove('fab-shared');
btn.innerHTML = orig;
if(tip.parentNode) tip.parentNode.removeChild(tip);
}, 2200);
}
$(document).ready(function(){updateCartCount()});
function shareRel(btn){
const title = btn.dataset.title || document.title;
const url = window.location.origin + '/' + btn.dataset.url;
function copiar(texto){
const ta=document.createElement('textarea');
ta.value=texto;ta.style.cssText='position:fixed;top:-9999px;left:-9999px;opacity:0';
document.body.appendChild(ta);ta.focus();ta.select();
try{ document.execCommand('copy'); mostrarCopiado(btn); }
catch(e){ prompt('Copia este enlace:',texto); }
document.body.removeChild(ta);
}
if(navigator.share){ navigator.share({title,url}).catch(()=>copiar(url)); }
else if(navigator.clipboard){ navigator.clipboard.writeText(url).then(()=>mostrarCopiado(btn)).catch(()=>copiar(url)); }
else { copiar(url); }
}
function mostrarCopiado(btn){
const orig=btn.innerHTML;
btn.innerHTML='';
btn.style.cssText='background:#059669;border-color:#059669;color:#fff;position:relative';
const tip=document.createElement('div');
tip.textContent='¡Enlace copiado!';
tip.style.cssText='position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);background:#1a2332;color:#fff;font-size:11.5px;font-weight:700;padding:5px 11px;border-radius:6px;white-space:nowrap;z-index:9999;pointer-events:none;box-shadow:0 4px 12px rgba(0,0,0,.2)';
const arr=document.createElement('span');
arr.style.cssText='position:absolute;bottom:-5px;left:50%;transform:translateX(-50%);width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #1a2332';
tip.appendChild(arr);btn.appendChild(tip);
setTimeout(()=>{ btn.innerHTML=orig; btn.style.cssText=''; },2000);
}
// Aliases para el componente product_card (reusa las funciones existentes)
window.pcAddCart = function(id, btn, provId){
if (!id || btn.disabled) return;
btn.disabled = true;
// proveedor_id: 3er parametro, sino data-prov del boton, sino null
var prov = (typeof provId !== 'undefined' && provId !== null && provId !== '' && provId !== '-1')
? provId
: (btn.dataset && btn.dataset.prov !== undefined && btn.dataset.prov !== '' && btn.dataset.prov !== '-1' ? btn.dataset.prov : null);
var payload = {ppo:'add', id:id, cant:1};
if (prov !== null && prov !== '') payload.proveedor_id = prov;
$.post('controller/carro/functions.php', payload, function(r){
try {
const d = typeof r === 'object' ? r : JSON.parse(r);
if (d.success) {
btn.style.background = '#059669';
showAlert('Producto agregado correctamente');
updateCartCount();
setTimeout(()=>{ btn.style.background=''; btn.disabled=false; }, 1200);
} else { showAlert(d.message || 'Error', false); btn.disabled=false; }
} catch(e) {
btn.style.background = '#059669';
showAlert('Producto agregado correctamente');
updateCartCount();
setTimeout(()=>{ btn.style.background=''; btn.disabled=false; }, 1200);
}
}).fail(function(){ showAlert('Error de conexión', false); btn.disabled=false; });
};
window.pcShareProduct = function(btn){ return shareRel(btn); };