如何获得滚动条缩略图的正确位置?

时间:2017-02-03 15:12:08

标签: javascript jquery html css nwjs

我试图检测滚动条拇指的正确位置。有人可以解释一下这是否可行。滚动条缩略图没有固定宽度。我使用的是nw.js,ES6和jQuery库。

以下是我的代码的简化提取。

class C {
    constructor() {
        win.on('resize', this._resize.bind(this));
        $('#divId').on('scroll', this._scroll.bind(this));
    }

    _getXScrollbarThumbPos() {
        let lpos = $('#divId').scrollLeft();
        let rpos = lpos + SCROLLBAR_THUMBNAIL_WIDTH; // FIXME how can I get the scrollbarThumbnailWidth
        return rpos;
    }

    _resize() {
        let x = this._getXScrollbarThumbPos();
        //..
    }

    _scroll() {
        let x = this._getXScrollbarThumbPos();
        //..
    }
}

调整大小和滚动侦听器工作正常,唯一的瓶颈是如何确定滚动条缩略图的宽度。 win是DOM窗口的nw.js包装器,请参阅here(此处未显示初始化,因为它与问题无关)。

1 个答案:

答案 0 :(得分:0)

这是我最终使用的解决方案。虽然我还没有找到一种方法来直接获得右侧滚动条 - 拇指位置的任何尺寸,因为动态宽度(我还没有检测到计算方法),我实际上已经能够解决问题; 通过确定总内容的宽度(即可查看+溢出的内容),并减去可视内容宽度并滚动到左侧内容宽度,我们可以在视口内确定可滚动内容的最大正确位置,(忽略任何可能的边框宽度)等于scollbar-thumb的正确位置。

class C {
    constructor() {
        win.on('resize', this._resize.bind(this));
        $('#divId').on('scroll', this._scroll.bind(this));
    }

    _getXScrollbarThumbPos() {
        // width of the content + overflow
        let totalWidth = $('#divId').scrollWidth;
        // width of the visible (non overflowing) content
        let viewWidth = $('#divId').width();
        // the amount of pixels that the content has been scrolled to the left
        let lpx = document.getElementById('#divId').scrollLeft;
        // the amount of pixels that are hidden to right area of the view
        let rpx = totalWidth - viewWidth - lpx;
        // represents the right position of the scrollbar-thumb
        console.log(rpx);
        return rpx;
    }

    _resize() {
        let x = this._getXScrollbarThumbPos();
        //..
    }

    _scroll() {
        let x = this._getXScrollbarThumbPos();
        //..
    }
}