Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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/jQuery不使用css的粘性位置:固定_Javascript_Jquery_Css Position_Sticky - Fatal编程技术网

Javascript/jQuery不使用css的粘性位置:固定

Javascript/jQuery不使用css的粘性位置:固定,javascript,jquery,css-position,sticky,Javascript,Jquery,Css Position,Sticky,我正在寻找一个Javascript/jQuery插件,用于粘性标题,它不会将元素的样式切换到位置固定。通常情况下,我都在用这个,效果很好 我正在制作一个带有jQuery动画的网站,我的一个div有一个宽度为100%的粘性标题。但当我将其向左移动时(例如),宽度:100%现在基于窗口的宽度,而不是其容器 那么,是否有一个现有的插件可以做与其他插件相同的事情,但保持位置:相对并计算scrollTop以应用为我的粘性标题的边距顶部?因此,我解决了我的问题!以下是我的javascript代码: 您必须将

我正在寻找一个Javascript/jQuery插件,用于粘性标题,它不会将元素的样式切换到位置固定。通常情况下,我都在用这个,效果很好

我正在制作一个带有jQuery动画的网站,我的一个div有一个宽度为100%的粘性标题。但当我将其向左移动时(例如),宽度:100%现在基于窗口的宽度,而不是其容器


那么,是否有一个现有的插件可以做与其他插件相同的事情,但保持位置:相对并计算scrollTop以应用为我的粘性标题的边距顶部?

因此,我解决了我的问题!以下是我的javascript代码:

您必须将top:0px设置为默认值

function relative_sticky(id, topSpacing){

if(!topSpacing){ var topSpacing = 0; }

var el_top = parseFloat(document.getElementById(id).getBoundingClientRect().top);
    el_top = el_top - parseFloat(document.getElementById(id).style.top);
    el_top = el_top * (-1);
    el_top = el_top + topSpacing;

    if(el_top > 0){
    document.getElementById(id).style.top = el_top + "px";
    } else{
    document.getElementById(id).style.top = "0px";
    }
}

window.onscroll = function(){

    relative_sticky("your_element_id", 10);
}
IE中不太流畅,因此我添加了一个延迟:

var delay = (function(){
  var timer = 0;
  return function(callback, ms){
    clearTimeout (timer);
    timer = setTimeout(callback, ms);
  };
})();

window.onscroll = function(){

    if(BrowserDetect.browser == "Explorer" || BrowserDetect.browser == "Mozilla"){
    // or your own way to detect browser

        delay(function(){
        relative_sticky("admin_users_head", 31);
        }, 200);
    }
    else{
    relative_sticky("admin_users_head", 31);
    }
}

所以,我解决了我的问题!以下是我的javascript代码:

您必须将top:0px设置为默认值

function relative_sticky(id, topSpacing){

if(!topSpacing){ var topSpacing = 0; }

var el_top = parseFloat(document.getElementById(id).getBoundingClientRect().top);
    el_top = el_top - parseFloat(document.getElementById(id).style.top);
    el_top = el_top * (-1);
    el_top = el_top + topSpacing;

    if(el_top > 0){
    document.getElementById(id).style.top = el_top + "px";
    } else{
    document.getElementById(id).style.top = "0px";
    }
}

window.onscroll = function(){

    relative_sticky("your_element_id", 10);
}
IE中不太流畅,因此我添加了一个延迟:

var delay = (function(){
  var timer = 0;
  return function(callback, ms){
    clearTimeout (timer);
    timer = setTimeout(callback, ms);
  };
})();

window.onscroll = function(){

    if(BrowserDetect.browser == "Explorer" || BrowserDetect.browser == "Mozilla"){
    // or your own way to detect browser

        delay(function(){
        relative_sticky("admin_users_head", 31);
        }, 200);
    }
    else{
    relative_sticky("admin_users_head", 31);
    }
}

为什么不想使用
位置:已修复
?另外,如果您知道解决方案,您可以尝试自己编写解决方案。因为我的标题的宽度为:100%位于比窗口宽度小的另一个div内。当div切换到position:fixed时,它会变大(宽度从同一点开始,但一直到窗口边缘),然后将100%更改为95%或其他值,请发布一些代码和/或提琴。另外,不要依赖jQuery插件;很容易依赖它们而不是自己编写代码。为什么不想使用
位置:fixed
?另外,如果您知道解决方案,您可以尝试自己编写解决方案。因为我的标题的宽度为:100%位于比窗口宽度小的另一个div内。当div切换到position:fixed时,它会变大(宽度从同一点开始,但一直到窗口边缘),然后将100%更改为95%或其他值,请发布一些代码和/或提琴。另外,不要依赖jQuery插件;这很容易依赖于它们而不是自己编写代码。这是旧的,但是你应该考虑使用RealestMyTimeFrimes来获得更平滑的动画。另一种方法可能是添加<代码>转换:TrSpCurter(0)。<或代码>到我的容器,它将使我的固定位置子元素相对于容器而不是VIEW PATH计算它的宽度。这是旧的,但是你应该考虑使用RestSimultFrimes来获得更平滑的动画。另一种方法可能已经添加了<代码>转换:TrpScess(0)。到我的容器,这将使我的固定位置子对象计算其相对于容器而不是视口的宽度。