2

Aceエディターを使用すると、次の点を除いて問題なく動作します。行の開始と終了。画面に収まらないドキュメントの行が少なくとも1行ある場合、水平スクロールは不完全です。行頭のカレットの場合、ビューをhスクロールすると、カレットが行頭にあるときにビューが完全にスクロールバックしないため、カレットは表示されません。迷惑。そして、行末のカレットについても同じです(右にフラッシュされないのではなく、まったくスクロールしないようですが、別のバグがある可能性があります。修正方法を知っている人はいますか?また、どのバージョンが影響を受けますか?

(ああ、そうです、言及するのを忘れました:側溝が有効になっています。)

(編集II:Google Chrome 18.0.1025.162を使用)

(E#3:言及するのを忘れた:Shift +スクロールホイールを使用して、手動で修正し、左いっぱいにスクロールすることができます。(E4:...そしてそれは単なる手がかりであり、解決策ではありません。余分な手動マウス操作を行う必要はありません。 。))

(Edit#N:ガターを非表示にすることができました: "editor_loaded.renderer.setShowGutter(false);"。問題は解決しません。)

4

1 に答える 1

1

さて、('WarFox'によって)要求されたように、ローカルリポジトリから直接、バージョン0.2.0でスクロールの問題を回避するために私がしたことは次のとおりです。HTH、YMMV。もちろん、このバージョンまたは任意のバージョンを変更する保証はありません。this.scrollCursorIntoViewのコードは次のように変更されます。

this.scrollCursorIntoView = function() {
    var log = function (s) { 
        // console.log("### scrollCursorIntoView ###: " + s); 
    };
    // log("(scrollCursorIntoView...)");
    function loge(expr) {
        var value = eval(expr);
        log("" + expr + " => " + value);
    }

    // the editor is not visible
    if (this.$size.scrollerHeight === 0)
        return;

    var pos = this.$cursorLayer.getPixelPosition();

    var left = pos.left + this.$padding;
    log("left = " + left);
    var top = pos.top;
    log("top = " + top);

    if (this.scrollTop > top) {
        this.scrollToY(top);
    }

    if (this.scrollTop + this.$size.scrollerHeight < top + this.lineHeight) {
        this.scrollToY(top + this.lineHeight - this.$size.scrollerHeight);
    }

    var scrollLeft = this.scroller.scrollLeft;

    var left_ = left - this.characterWidth;
    log("(scrollLeft > left): " + scrollLeft + " > " + left);
    log("(scrollLeft > left_): " + scrollLeft + " > " + left_);
    if (scrollLeft > left_) {
        this.scrollToX(left_);
    } else {
        log("NOT (scrollLeft > left): " + scrollLeft + " > " + left);
        log("NOT (scrollLeft > left_): " + scrollLeft + " > " + left_);
    }

    loge("scrollLeft");
    log("scrollLeft = " + scrollLeft);
    log("this.$size.scrollerWidth = " + this.$size.scrollerWidth);
    log("left = " + left);
    log("this.characterWidth = " + this.characterWidth);

    var right_side_scroll_yes = scrollLeft + this.$size.scrollerWidth < left + this.characterWidth;
    if (right_side_scroll_yes) {
        log("(right side scroll...)");
        //loge("this.layerConfig.width");
        if (left > this.layerConfig.width) {
            log("right #1");
            log("this.layerConfig.width = " + this.layerConfig.width);
            this.$desiredScrollLeft = left + 2 * this.characterWidth;
            this.scrollToX(this.$desiredScrollLeft);
        } else {
            log("right #2");
            var tmp = Math.round(left + this.characterWidth - this.$size.scrollerWidth);
            loge("tmp");
            this.scrollToX(tmp);
        }
    } else {
        log("NOT (right_side_scroll_yes): " + scrollLeft + " > " + left);
    }
};

明らかに、ロギング呼び出しはデバッグ以外には必要ありません。

于 2013-11-28T14:03:56.297 に答える