Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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_Jquery_Html_Css - Fatal编程技术网

Javascript 制作垂直滑块

Javascript 制作垂直滑块,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我想创建一个固定高度的垂直菜单,当你按下箭头时,它可以上下滑动 我不知道如何使用偏移来知道跳转到哪里。 现在,我从下一个li项获取相对偏移量,然后跳到那里。但它没有做它应该做的。而且,这是不正确的。我想我必须知道UL的底部是否显示在div中。如果是这样,向下箭头就不必再移动了。但我怎么知道呢 //get next element var offsetNextLi = jQuery($nextElement).position(); $liScrolledto = $ne

我想创建一个固定高度的垂直菜单,当你按下箭头时,它可以上下滑动

我不知道如何使用偏移来知道跳转到哪里。 现在,我从下一个li项获取相对偏移量,然后跳到那里。但它没有做它应该做的。而且,这是不正确的。我想我必须知道UL的底部是否显示在div中。如果是这样,向下箭头就不必再移动了。但我怎么知道呢

    //get next element
    var offsetNextLi = jQuery($nextElement).position();

    $liScrolledto = $nextElement;

    jQuery("ul#inline_navigation").animate({
        scrollTop: offsetNextLi.top
    }, 500);
这是我的小提琴:


偏移是相对的,但您的示例具有恒定的li高度,因此您可以使用恒定的步进。或者计算下一个不可见的外部li元素。要做到这一点,我需要一点时间

这段代码没有经过优化,因此,它只是出于说教的原因。 代码looksup用于每次单击“ul”列表,y变量通过jQuery的scrollTop()函数获取相对坐标。 例如,步长也可以是常数59,或者像我之前计算的那样

然后检查y是否在顶部或底部打破边界,因此它向下查找高度,并将y与0向上检查。 上下的Rest几乎相同,只是符号从+变为-


希望这有帮助。代码可以更好地重用和优化,使用keypress也可以做到这一点。

您好,谢谢您的帮助。快速提问,为什么用函数($){}(jQuery)包装代码?这有优化的原因吗?或者只是因为你习惯了$?好的。步长=第一个子项的高度+一些边距。scrollTop=ul中隐藏的所有像素?但是为什么(h>=y)足够好呢?我的意思是,y(隐藏的像素)永远不是全高?它似乎确实有效,但我不完全理解。@acriel我使用函数($){…}(jQuery)作为包装,在内部匿名函数中使用$,1。为了方便起见,2。不要污染全局范围(内部的局部变量)@acriel(h>=y)表示底部的边界,您必须知道整个列表的高度(其他方法可以想象,如测量底部arrwow的位置,并将其与当前位置进行比较)。y是列表的当前位置,当您位于列表底部时,该位置与列表的高度相同。您可以查看您的浏览器控制台来检查这些值,以便对其有所了解。非常感谢您的详细说明!这有点令人困惑,因为jQuery文档说:“垂直滚动位置与可滚动区域上方视图中隐藏的像素数相同。如果滚动条位于最顶端,或者元素不可滚动,则该数字将为0。”[。但实际上,(h>=y)可以工作。
(function($) {
$(document).ready(function () {
     //SLIDE UP
    jQuery("#arrowup").on("click", function () {
        var $ul = $('#inline_navigation');
        var y = $ul.scrollTop();
        var $firstChild = $ul.children().first();
        var step = $firstChild.outerHeight() + parseInt($firstChild.css('marginBottom'),10);

        console.log('before up', y, step);
        if (y >= 0) {
            y -= step;
            console.log('after up', y);

            $ul.stop().animate({
                scrollTop: y
            }, 100);
        }
    });

    //SLIDE DOWN
    $("#arrowdown").on("click", function () {
        var $ul = $('#inline_navigation');
        var y = $ul.scrollTop();
        var h = $ul.height();
        var $firstChild = $ul.children().first();
        var step = $firstChild.outerHeight() + parseInt($firstChild.css('marginBottom'),10);

        console.log('before down', y, step);
        if (h >= y) {
            y += step;
            console.log('after down', y);

            $ul.stop().animate({
                scrollTop: y
            }, 100);
        }
    });

});
}(jQuery));