Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于无限滚动的相交观察者API_Javascript_Api_Dom_Intersection Observer - Fatal编程技术网

Javascript 用于无限滚动的相交观察者API

Javascript 用于无限滚动的相交观察者API,javascript,api,dom,intersection-observer,Javascript,Api,Dom,Intersection Observer,我正在做一个twitch网络应用程序。我尝试使用Intersection observer API来实现无限滚动,而且效果很好。然而,我注意到,当无限滚动工作时,我的导航栏完全消失了。我猜问题是由“DOMContentLoaded”引起的,但不确定。多谢各位 这是我的代码笔链接: const clientID='5npghe3kytuifete3z9kvwnto50mqch'; const req=new XMLHttpRequest(); 函数名为ror(){ 警报(“错误”); } 函数g

我正在做一个twitch网络应用程序。我尝试使用Intersection observer API来实现无限滚动,而且效果很好。然而,我注意到,当无限滚动工作时,我的导航栏完全消失了。我猜问题是由“DOMContentLoaded”引起的,但不确定。多谢各位

这是我的代码笔链接:

const clientID='5npghe3kytuifete3z9kvwnto50mqch';
const req=new XMLHttpRequest();
函数名为ror(){
警报(“错误”);
}
函数getResp(url,回调){
请求打开('GET',url,true);
请求setRequestHeader('Client-ID',clientID);
req.setRequestHeader('Accept','application/vnd.twitchtv.v5+json');
请求发送();
req.onload=函数(){
如果(请求状态>=200&请求状态<400){
让数据
试一试{
data=JSON.parse(请求响应)
}捕捉(错误){
淋浴器();
返回;
}
回调(数据)
}否则{
淋浴器();
}
}
}
const navList=document.querySelector('.nav___列表')
const streamBox=document.querySelector('.stream_-box')
const streamItems=document.querySelector(“.streamItems”)
const langFilter=document.querySelector(“.langFilter”)
const langArr=['ALL','EN','ZH','ES','FR','DE','RU','KO','JA','PT','AR'];
常数urlRoot=https://api.twitch.tv/kraken/'
const topGameurl=`${urlRoot}游戏/top?limit=5`
const streamApi=`${urlRoot}流/`
设偏移量=0
document.addEventListener('DOMContentLoaded',()=>{
const target=document.querySelector(“.stream end”)
让选项={
root:null,
rootMargin:'30px',//查看整个视口
阈值:0.5,//如果页脚的50%
}
const observer=新的IntersectionObserver(handleIntersection,选项)
观察者,观察(目标)
})
函数handleIntersection(条目){
if(条目[0]。isIntersecting){
让gameTitle=document.querySelector(“.gameTitle”)
让gameURLname=encodeURIComponent(gameTitle.innerHTML)
const loadmorestreamUrl=createURL(streamApi、gameURLname、偏移量)
偏移量+=100
getData(loadmorestreamUrl)
}
}
函数createURL(url、游戏、偏移){
const streamUrl=`${url}?game=${game}&limit=20&offset=${offset}`
返回streamUrl
}
getResp(topGameurl,(数据)=>{
const topGames=[…data.top]
const result=topGames.reduce((结果,项目)=>{
结果+=`
  • ${item.game.name}
  • ` 返回结果 }, '') navList.innerHTML=结果 const gameName=encodeURIComponent(data.top[0].game.name) const streamUrl=createURL(streamApi、游戏名、偏移量) getData(streamUrl) }) navList.addEventListener('click',e=>{ streamItems.innerHTML=“” 让gameTitle=document.querySelector(“.gameTitle”) const gameName=e.target.innerHTML gameTitle.innerHTML=游戏名称 const gameNameURL=encodeURIComponent(gameName) const streamUrl=createURL(streamApi、gameNameURL、offset) getData(streamUrl) }) 函数getData(url){ getResp(url,(数据)=>{ const dataArrs=[…data.streams] map(dataArr=>{ 让streamItem=document.createElement('div') streamItem.classList.add('stream') streamItem.innerHTML=` 查看者:${dataArr.viewers}

    ${dataArr.channel.name}

    ${dataArr.channel.broadcase\u language.toUpperCase()}

    ` streamItems.appendChild(streamItem) }) }) }
    html,正文{
    字体大小:16px;
    框大小:边框框;
    字体系列:“Segoe UI”,塔荷马,日内瓦,Verdana,无衬线;
    背景:黑色;
    背景附件:固定;
    }
    .集装箱{
    宽度:90%;
    保证金:0自动;
    显示器:flex;
    弯曲方向:立柱;
    填充:2rem;
    溢出x:隐藏;
    }
    #标题{
    显示器:flex;
    证明内容:之间的空间;
    对齐项目:居中;
    颜色:#fff;
    边缘底部:1.2rem;
    }
    navbar先生{
    位置:相对位置;
    转化:translateX(0%);
    }
    .头衔{
    右边距:1rem;
    字号:2rem;
    字体系列:“Segoe UI”,塔荷马,日内瓦,Verdana,无衬线;
    字号:700;
    颜色:#741cf7;
    }
    .导航列表{
    显示器:flex;
    }
    .导航列表李{
    填充:.8rem.6rem;
    光标:指针;
    字号:1rem;
    字号:700;
    }
    .导航列表李:悬停{
    边界半径:.5rem;
    背景:#a87ceb;
    过渡:背景。3s轻松;
    }
    .nav__列表li+li{
    左边距:1 em;
    }
    #流箱{
    显示器:flex;
    弯曲方向:立柱;
    边界半径:8px;
    对齐项目:居中;
    填充:1.5雷姆;
    颜色:#fff;
    位置:相对位置;
    }
    .游戏名称{
    字号:2rem;
    边缘底部:1rem;
    字号:600;
    颜色:#741cf7;
    }
    .前二十名{
    字体大小:1.4rem;
    保证金底部:1.5雷姆;
    }
    .流动项目{
    显示器:flex;
    柔性流:行换行;
    宽度:100%;
    证明内容:中心;
    }
    .lang__选项{
    位置:绝对位置;
    顶部:2rem;
    右:7rem;
    }
    .lang___头衔{
    字号:1.2rem;
    颜色:#fff;
    }
    #语言{
    大纲:无;
    宽度:3rem;
    背景:透明;
    颜色:#741cf7;
    边界:无;
    字号:1rem;
    }
    .小溪{
    宽度:30%;
    保证金:1.5雷姆;
    背景色:rgba(255、255、255、15);
    背景滤镜:模糊(5px);
    光标:指针;
    }
    .预览{
    宽度:100%;
    垂直对齐:中间对齐;
    }
    .观众{
    显示:无;
    }
    .stream:hover>.viewers{
    显示:块;
    位置:绝对位置;
    z指数:-1;
    动画名称:移动;
    动画持续时间:.4s;
    动画计时功能:轻松;
    动画填充模式:正向;
    }
    @关键帧移动{
    从{
    顶部:0px;
    }
    到{
    顶部:-20px;
    }
    }
    .拖缆{
    显示器:flex;
    对齐项目:居中;
    填充:.5rem;
    位置:相对位置;
    颜色:#fff;
    }
    .标志{
    宽度:15%;
    边界半径:50%;
    保证金权利:.8rem;
    }
    郎先生{
    位置:绝对位置;
    权利:.5rem;
    底部:5雷姆;
    }
    .隐藏{
    显示:无;
    }
    .检查{
    显示:无;
    }
    .RWD开关{
    显示:无;
    }
    .游戏名称{
    颜色:#fff;
    }
    @媒体屏幕和屏幕(最大宽度:1024px){
    .lang__选项{
    销售时点情报系统
    
    function getResp(url, callback) {
      fetch(url, {
        headers: {
          'Client-ID': clientID,
          'Accept': 'application/vnd.twitchtv.v5+json'
        }
      })
      .then(response => response.json())
      .then(callback)
      .catch(showError)
    }