Javascript 自定义滚动条错误

标签 javascript css html scrollbar

      var start_mouse_y = 0;
  var scroll_offset = 0;
  function SET_SCROLL(e){
    document.getElementById("online_list_scroll").draggable = true;
    start_mouse_y = e.clientY;
  }
  function ADJUST_SCROLL(e){
    dont_pass = (412 - set_scroll_height);
    mouse_y = e.clientY;
    scroll_top = parseInt(document.getElementById("online_list_scroll").style.top);
    scroll_offset = (mouse_y - scroll_top) + 46;
    new_top = scroll_top + (mouse_y - start_mouse_y);
    document.getElementById("DEBUG").innerHTML = "my: "+mouse_y+"<br>new_top: "+new_top+"<br>scroll_offset: "+scroll_offset+"<br>scroll_top: "+scroll_top;
    if(new_top <= 0){
      document.getElementById("online_list_scroll").style.top = 0+"px";
    }else if(new_top >= dont_pass){
      document.getElementById("online_list_scroll").style.top = dont_pass+"px";
    }else{
      document.getElementById("online_list_scroll").style.top = new_top+"px";
    }
    scroll_bottom = set_scroll_height + new_top;
    scroll_percent = scroll_bottom / 412;
    online_show = (document.getElementById("online_list").scrollHeight - 412) * scroll_percent;
    online_show = Math.round(online_show);
    document.getElementById("online_list").scrollTop = online_show;
  }
  var SCROLL_ON = 0;
  document.onmouseup = function(){ SCROLL_ON = 0; };
  document.onmousemove = function(event){ if(SCROLL_ON == 1){ADJUST_SCROLL(event);} };

JavaScript ^^

        <div style="float: left; width: 13px; position: relative; height: 412px;">
      <div id="online_list_scroll" style="width: 5px; position: absolute; top: 0px; left: 4px; border-radius: 4px; background-color: #3f3f3f; height: 15px;" onmousedown="if(SCROLL_ON == 0){ SET_SCROLL(event); SCROLL_ON = 1; }"></div>
    </div>

html^^

不知道为什么,滚动条的滚动速度非常快而且不稳定。它可以工作,但只是在上下滚动时突然跳动,就像你向一种方向移动时那样,它会越来越快地射击。

感谢您的帮助,整晚都在想办法解决这个问题。

最佳答案

您的本地变量有问题,以下代码有效。不是一般的东西,只是修复了代码。这里有代码和常见错误所在的注释。

//first make sure you have defined with var the variables you need.     
        var start_mouse_y = 0;
        var mouse_y = 0;
        var scroll_offset = 0;
        function SET_SCROLL(e) {
            document.getElementById("online_list_scroll").draggable = true;
            start_mouse_y = e.clientY;
// you need mouse_y to be initialized with start_mouse_y
            mouse_y = start_mouse_y;
        }

        function ADJUST_SCROLL(e) {
            var set_scroll_height = 0;
            var dont_pass = (412 - set_scroll_height);

// here you set the last mouse_y to be start_mouse_y or else it would be 
// a the first position of the mouse ( eg. 8 ) subtracted from the current ( eg. 50 )
// now remembering the last already added position (eg. 49) which is subtracted from
// the current (eg. 50 ) it works just fine

            start_mouse_y = mouse_y;
            mouse_y = e.clientY;
            var scroll_top = parseInt(document.getElementById("online_list_scroll").style.top);
            scroll_offset = (scroll_top- mouse_y ) + 46;

            var new_top = scroll_top + (mouse_y- start_mouse_y);

            console.log("my: " + mouse_y + "<br>new_top: " + new_top + "<br>scroll_offset: " + scroll_offset + "<br>scroll_top: " + scroll_top);
            if(new_top <= 0) {
                document.getElementById("online_list_scroll").style.top = 0 + "px";
            } else if(new_top >= dont_pass) {
                document.getElementById("online_list_scroll").style.top = dont_pass + "px";
            } else {
                document.getElementById("online_list_scroll").style.top = new_top + "px";
            }
            var scroll_bottom = set_scroll_height + new_top;
            var scroll_percent = scroll_bottom / 412;
            var online_show = (document.getElementById("online_list").scrollHeight - 412) * scroll_percent;
            online_show = Math.round(online_show);
            document.getElementById("online_list").scrollTop = online_show;
        }

        var SCROLL_ON = 0;
        document.onmouseup = function() {
            SCROLL_ON = 0;
        };
        document.onmousemove = function(event) {
            if(SCROLL_ON == 1) {ADJUST_SCROLL(event);
            }
        };

最好的问候,

关于Javascript 自定义滚动条错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8459638/

相关文章:

html - 使 ul 中的列表垂直居中

javascript - 单击更改图标

javascript 等待 DOM 元素实际绘制并完成

javascript - keydown 监听器 1 个字符关闭?

javascript - 为什么 React import 语句中有逗号?

javascript - 使用 jquery 在 body mouseup 事件后停止传播?

java - 支持来自 Apache FOP PDF 生成的外部 CSS 文件

javascript - 使用 WebSocket 发送位

html - 如何让网站在某个点停止向下滚动?

HTML 元素在 WordPress 中是不可见的