javascript - 简单的自定义 JavaScript 滚动条

标签 javascript jquery global-variables scroller

我需要列出一些标题。一次只能看到其中 6 个。 我不允许使用任何外部库。 一切正常,除非我单击向下向下滚动列表,然后单击向上,列表仅在第二次单击后向上滚动。

我知道问题出在保存列表位置和函数的全局变量中,但我不明白为什么它们仅在第二次单击后更新,而不是第一次单击!

非常感谢您的帮助,请考虑到我目前只学习 JS。

html部分

       <div class="mailOptions">
        <div class="incProducts">
          <h3>Include Products</h3>
          <div class="moveOptUp"><span>UP</span></div>
          <nav class="allMailOptions">
            <div class="mailOpt" id="mailOpt_1">
              <span class="optWithMarks"></span>
              <span class="mailOptName">1 abcdefg</span>
              <span class="optMarked"></span>
            </div>
            <div class="mailOpt" id="mailOpt_2">
              <span class="optWithMarks"></span>
              <span class="mailOptName">2 abcdefg</span>
              <span class="optMarked"></span>
            </div>
            <div class="mailOpt" id="mailOpt_3">
              <span class="optWithMarks"></span>
              <span class="mailOptName">3 abcdefg</span>
              <span class="optMarked"></span>
            </div>
            <div class="mailOpt" id="mailOpt_4">
              <span class="optWithMarks"></span>
              <span class="mailOptName">4 abcdefg</span>
              <span class="optMarked"></span>
            </div>
            <div class="mailOpt" id="mailOpt_5">
              <span class="optWithMarks"></span>
              <span class="mailOptName">5 abcdefg</span>
              <span class="optMarked"></span>
            </div>
            <div class="mailOpt" id="mailOpt_6">
              <span class="optWithMarks"></span>
              <span class="mailOptName">6 abcdefg</span>
              <span class="optMarked"></span>
            </div>
            <div class="mailOpt hide" id="mailOpt_7">
              <span class="optWithMarks"></span>
              <span class="mailOptName">7 abcdefg</span>
              <span class="optMarked"></span>
            </div>
            <div class="mailOpt hide" id="mailOpt_8">
              <span class="optWithMarks"></span>
              <span class="mailOptName">8 abcdefg</span>
              <span class="optMarked"></span>
            </div>
            <div class="mailOpt hide" id="mailOpt_9">
              <span class="optWithMarks"></span>
              <span class="mailOptName">9 abcdefg</span>
              <span class="optMarked"></span>
            </div>
          </nav>
          <div class="moveOptDown"><span>DOWN</span></div>
        </div>
      </div>

js部分

    var targetOptTop = 1;
var targetOptDown = 7;
var targetOptLast = ($(".allMailOptions").children().length);


$('#popUpMail ').click(function(e) {
    event.preventDefault();
    //$('#popUp').removeClass('hide');
    $('.popUpEmail').addClass('show');
});

$('.cntrl-discard').click(function() {
    $('.popUpEmail').removeClass('show');
});

$('.mailOpt').click(function() {
    var id = ($(this).attr('id'));
    var idCheckBox = id.split("_");
    var idCheckBox = idCheckBox[1];

    $('.mailOpt').removeClass('activeOpt');
    $(this).addClass('activeOpt');

    $('.allIncQuotes').addClass('hide');
    $('#checkBl_' + idCheckBox).removeClass('hide');
});

function scrollMailDown(position) {
    console.log(targetOptTop);
    console.log(targetOptDown);

    if (targetOptDown < targetOptLast+1) {
        $('.mailOpt:nth-child(' + targetOptTop + ')').addClass('hide');
        $('.mailOpt:nth-child(' + targetOptDown + ')').removeClass('hide');
        targetOptTop += position;
        targetOptDown += position;
    };
};

function scrollMailUp(position) {
    console.log(targetOptTop);
    console.log(targetOptDown);

    if (targetOptTop >= 1) {
        $('.mailOpt:nth-child(' + targetOptTop + ')').removeClass('hide');
        $('.mailOpt:nth-child(' + targetOptDown + ')').addClass('hide');
        targetOptTop += position;
        targetOptDown += position;
    };
};

$('.moveOptDown').click(function() {
    scrollMailDown(+1);
});

$('.moveOptUp').click(function() {
    scrollMailUp(-1);
});

jsFiddle http://jsfiddle.net/A1ex5andr/qxHT5/1/

最佳答案

在删除类之前,您需要递减计数器,如下所示:

function scrollMailUp(position) {
    console.log(targetOptTop);
    console.log(targetOptDown);
        targetOptTop--;
        targetOptDown--;
    if (targetOptTop >= 1) {

        $('.mailOpt:nth-child(' + targetOptTop + ')').removeClass('hide');
        $('.mailOpt:nth-child(' + targetOptDown + ')').addClass('hide');

    };
};

这是你的 fiddle

关于javascript - 简单的自定义 JavaScript 滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23498177/

相关文章:

javascript - $watch 没有在函数之外更新数组?

javascript - 全局 JavaScript 变量在对象构造函数的内部变得未定义

jquery - 如何制作通过单击动画进出的css动画

javascript - 在ajax中使用特殊字符

class - C++ - 在以下情况下,为什么我必须包含 .cpp 文件和/而不是 .h 文件才能访问全局变量的值?

javascript - 确保一次只有一个 setTimeout 运行(处于事件状态)?

javascript - 当我进行ajax调用时,尝试使用 Angular 添加加载轮?

javascript - 粘性侧边栏停止在页脚上方 30 像素?

javascript - 在浏览器中检测 AJAX 请求(客户端)

jquery - 如何使用 jQuery 在 iF​​rame 中执行 "execCommand"?