javascript - 根据窗口大小有条件固定 DIV

标签 javascript scrollmagic

我正在尝试编写一个脚本,如果屏幕具有一定宽度,该脚本将修复 DIV。这是我到目前为止所拥有的,但逻辑不正确,我不知道如何写。

var controller = new ScrollMagic();

var w = $(window).width();
if(w >= 500) {
    var sidebar = new ScrollScene()
        .triggerHook("0")
        .setPin("#sidebar-pin")
        .addTo(controller);   
}
$(window).on('resize',function(){
    if(w < 500) {
            controller.removePin("#sidebar-pin",true);
    } else {
    var sidebar = new ScrollScene()
        .triggerHook("0")
        .setPin("#sidebar-pin")
        .addTo(controller); 
  }
});

http://jsfiddle.net/gtowle/jxoewzoo/

我的目标逻辑是:

  1. 页面加载时,如果窗口宽度大于 500,则执行 A。如果不是,则不执行任何操作。
  2. 调整窗口大小时,如果窗口宽度小于 500,则执行 B,如果窗口宽度大于 640,则执行 A。

我认为我的问题是我不确定如何在调整窗口大小后触发#2。

最佳答案

第一个问题是您只计算了一次窗口宽度(在页面加载时)。
一旦您调整大小,它就不会更新。
这就是为什么整个调整大小逻辑没有任何效果。

您犯的另一个错误是调用 Controller 上的removePin方法。
这是一个场景方法。

最后,您的逻辑每次都会创建一个新场景,而不是更新现有场景。

以下是如何正确实现所需逻辑的方法:

var controller = new ScrollMagic();

var sidebar = new ScrollScene({triggerHook: 0})
    .addTo(controller);

// page load
if($(window).width() >= 500) {
    sidebar.setPin("#sidebar-pin");
}

// resize
$(window).on('resize',function(){
    var w = $(window).width();
    if(w < 500) {
        sidebar.removePin("#sidebar-pin",true);
    } else if (w >= 640) {
        sidebar.setPin("#sidebar-pin");
    }
});

这是你的 fiddle :http://jsfiddle.net/jxoewzoo/1/

希望这有帮助,
J

关于javascript - 根据窗口大小有条件固定 DIV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27052645/

相关文章:

javascript - ScrollMagic 插件正在运行,但不是 "tying"滚动动画

javascript - Google 地球插件渴望重新渲染

javascript - "old"手机不显示复选框复选标记,当通过 javascript 选中时

javascript - Angular2 (JavaScript) - 获取元素的值

javascript - jQuery:将 HTML 解析为文本

css - IE/Edge 滚动问题

javascript - anchor 标签在页面下方起作用,但不向上

javascript - 在特定条件下停止单击事件处理程序

javascript - GSAP timelineMax 错误,无法读取未定义的属性 'repeat'

javascript - 如何修复脚本?