Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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 检测一个元素';当和绝对值位于相对值内时的位置_Javascript_Video_Video.js - Fatal编程技术网

Javascript 检测一个元素';当和绝对值位于相对值内时的位置

Javascript 检测一个元素';当和绝对值位于相对值内时的位置,javascript,video,video.js,Javascript,Video,Video.js,请不要杀了我,因为我肯定以前有人问过我这个问题,但当我环顾四周时,我觉得没有任何意义 基本上,当用户向下滚动查看视频时,我尝试使用下面的代码在我的网站上自动播放视频- var videos=document.getElementsByTagName(“视频”), 分数=0.8; 函数checkScroll(){ 对于(var i=0;i分数){ video.play(); }否则{ video.pause(); } } } window.addEventListener('scroll',ch

请不要杀了我,因为我肯定以前有人问过我这个问题,但当我环顾四周时,我觉得没有任何意义

基本上,当用户向下滚动查看视频时,我尝试使用下面的代码在我的网站上自动播放视频-

var videos=document.getElementsByTagName(“视频”),
分数=0.8;
函数checkScroll(){
对于(var i=0;i分数){
video.play();
}否则{
video.pause();
}
}
}
window.addEventListener('scroll',checkScroll,false);
window.addEventListener('resize',checkScroll,false);
但是,在我的页面上,video.js播放器似乎将视频设置为“绝对”位置,因此所有视频仅在用户在页面顶部滚动时播放,然后在用户向下滚动查看时暂停。我希望代码能够正确检测视频的位置

我想删除“绝对”位置,但我使用的是CDN版本的video.js CSS文件,所以我无法更改。我想我已经读过jquery.offset,但不知道如何使用它

这是网站,向下滚动可查找视频:


经过多次搜索,我终于找到了答案-

代码应该是这样工作的,以正确检测视频-

var videos = document.getElementsByTagName("video"),
fraction = 0.8;
function checkScroll() {

    for(var i = 0; i < videos.length; i++) {

        var video = videos[i];

          var x = 0,
              y = 0,
              w = video.offsetWidth,
              h = video.offsetHeight,
              r, //right
              b, //bottom
              visibleX, visibleY, visible,
              parent;

            parent = video;
            while (parent && parent !== document.body) {
              x += parent.offsetLeft;
              y += parent.offsetTop;
              parent = parent.offsetParent;
            }

            r = x + w;
            b = y + h;

        //var x = video.offsetLeft, 
        //    y = video.offsetTop, 
        //    w = video.offsetWidth, 
        //    h = video.offsetHeight, 
        //   r = x + w, //right
        //    b = y + h, //bottom
        //    visibleX, 
        //    visibleY, 
        //    visible;

            visibleX = Math.max(0, Math.min(w, window.pageXOffset + window.innerWidth - x, r - window.pageXOffset));
            visibleY = Math.max(0, Math.min(h, window.pageYOffset + window.innerHeight - y, b - window.pageYOffset));

            visible = visibleX * visibleY / (w * h);

            if (visible > fraction) {
                video.play();
            } else {
                video.pause();
            }

    }

}

window.addEventListener('scroll', checkScroll, false);
window.addEventListener('resize', checkScroll, false);
var videos=document.getElementsByTagName(“视频”),
分数=0.8;
函数checkScroll(){
对于(var i=0;i分数){
video.play();
}否则{
video.pause();
}
}
}
window.addEventListener('scroll',checkScroll,false);
window.addEventListener('resize',checkScroll,false);
var videos = document.getElementsByTagName("video"),
fraction = 0.8;
function checkScroll() {

    for(var i = 0; i < videos.length; i++) {

        var video = videos[i];

          var x = 0,
              y = 0,
              w = video.offsetWidth,
              h = video.offsetHeight,
              r, //right
              b, //bottom
              visibleX, visibleY, visible,
              parent;

            parent = video;
            while (parent && parent !== document.body) {
              x += parent.offsetLeft;
              y += parent.offsetTop;
              parent = parent.offsetParent;
            }

            r = x + w;
            b = y + h;

        //var x = video.offsetLeft, 
        //    y = video.offsetTop, 
        //    w = video.offsetWidth, 
        //    h = video.offsetHeight, 
        //   r = x + w, //right
        //    b = y + h, //bottom
        //    visibleX, 
        //    visibleY, 
        //    visible;

            visibleX = Math.max(0, Math.min(w, window.pageXOffset + window.innerWidth - x, r - window.pageXOffset));
            visibleY = Math.max(0, Math.min(h, window.pageYOffset + window.innerHeight - y, b - window.pageYOffset));

            visible = visibleX * visibleY / (w * h);

            if (visible > fraction) {
                video.play();
            } else {
                video.pause();
            }

    }

}

window.addEventListener('scroll', checkScroll, false);
window.addEventListener('resize', checkScroll, false);