スクロールマージンを上下別に設定したい。

  1. 下部は5行ぐらいでいいけど、上部はその倍以上は欲しいとかあるので。基本、上から下に書いていって参照するのは上のほうだし、上の情報量は多い方がいいかな、と。

    10行に設定すると下はちょっと空き過ぎだし。タイプライタースクロール(下1/4,固定スクロールOFF)もなんか違うし(入力始めるとスクロールされて視線が外れる)。固定スクロールはスクロールが伴うのでカーソルが自由に動かせない。

    ────
    let marginTop = 8; // 目的の行数-2
    let cursorY = document.selection.getActivePointY(mePosView);
    if(cursorY < window.scrollY+marginTop) {
    window.scrollY = cursorY - marginTop; // 負数の処理は本体にお任せ
    }
    ────

    でも出来るんだけど(下は設定にお任せ)、カーソル移動イベント後にスクロール位置調整でちょっとカクつくんですよね。

     |  ほげ  |  返信
  2. ご意見ありがとうございます。

    ご要望が多ければ検討してみたいと思います。と言いたいところですが…、スクロールマージンを活用されているユーザさんはたぶん初めてですね ^^;

    Mery 公開以来、スクロールマージンが邪魔とか廃止を求める声は多いのですが、便利という声はほぼゼロです…。(個人的には気に入っているのですが ^^)

    スクロールマージンの便利さをもっと突き詰めたものがタイプライタースクロールだったり固定スクロールだったりします。

    これらの機能は確かにご要望の動作と若干異なるとは思いますが、きちんとした執筆ソフトにインスパイアされて実装した機能なので、今後、本格的な執筆ソフト (Scrivener とか) へ移行される場合にも違和感が少ないものと思いますから、最初はちょっと扱いづらいかもしれませんが慣れてみるというのはいかがでしょうか?

    > でも出来るんだけど(下は設定にお任せ)、カーソル移動イベント後にスクロール位置調整でちょっとカクつくんですよね。

    マクロ、試させていただきました。

    短いコードなのに上下でスクロールマージン変わってますね、すごい!カクつくと言われて注意して見てれば確かにキャレット位置がちょっとビクンとする感じはありますが、ええ…。これダメなんですか…。

    と、とりあえずご意見は今後の開発の参考にさせていただきますね。(MeryWiki の開発室のメモのほうに書いておきますので)

     |  Kuro  |  返信
  3. > 短いコードなのに上下でスクロールマージン変わってますね、すごい!カクつくと言われて注意して見てれば確かにキャレット位置がちょっとビクンとする感じはありますが、ええ…。これダメなんですか…。

    考え方自体は簡単な話なので。上はScrollYで判るけど、表示されてる最下行の求め方が判らなかったので本体に丸投げです。はい。最初は両方自前でやろうとしたんですが、上を狭く下を広くしたい場合にどうやればいいかはさっぱり。

    気にしなければ十分使えるので、私が気にしすぎなんでしょうね。実現したい機能自体はこれで出来ているので、優先度は低めでも全然構いません。

     |  ほげ  |  返信
  4. >実現したい機能自体はこれで出来ているので、

    アウトラインから移動したらスクロール位置が勝手にトップに戻ってしまって、このままじゃ使えない事に気付きました。キーボード操作でアウトラインに移動→ENTERで選択すると問題無いけど、マウスで選択するとカーソル自体は目的の位置に行ってるけどcursorYに-1が返ってきてて、スクロール位置がトップに戻ってしまう。

    ────
    let marginTop = 8; // 目的の行数-2
    let cursorY = document.selection.getActivePointY(mePosView);
    if(0 < cursorY && cursorY < window.scrollY+marginTop) {
    window.scrollY = cursorY - marginTop;
    }
    ────
    とりあえずこれで問題なくなりました。if文に「0 < cursorY && 」を追加しただけです。マウスで移動した直後は上部のマージンはMeryの設定分になります。

     |  ほげ  |  返信
スポンサーリンク