gpt4 book ai didi

javascript - 如何使用纯 Javascript 同步两个滚动条?

转载 作者:行者123 更新时间:2023-11-30 15:53:33 24 4
gpt4 key购买 nike

我有一个 <DIV>和一个 <TEXTAREA> ,问题是元素(将接收同步)滚动的次数超过预期,而不是按百分比滚动。

到目前为止,我已经设法做到了这一点:

function syncScroll(from, to)
{
var sf = from.scrollHeight - from.clientHeight,
st = to.scrollHeight - to.clientHeight;

if (sf < 1) {
return;
}

var p = (sf / 100) * from.scrollTop;

to.scrollTop = (st / 100) * p;
}


window.onload = function() {
var currentScrollEvt, timer;

var editor = document.querySelector(".editor");
var preview = document.querySelector(".preview");

preview.innerHTML = editor.value;

editor.onscroll = function() {
if (currentScrollEvt === "preview") {
return;
}

clearTimeout(timer);

currentScrollEvt = "editor";

syncScroll(editor, preview);

timer = setTimeout(function() {
currentScrollEvt = null;
}, 200);
};

preview.onscroll = function() {
if (currentScrollEvt === "editor") {
return;
}

clearTimeout(timer);

currentScrollEvt = "preview";

syncScroll(preview, editor);

timer = setTimeout(function() {
currentScrollEvt = null;
}, 200);
};
};
html, body {
padding: 0;
margin: 0;
height: 100%;
}

* {
box-sizing: content-box;
}

body {
display: flex;
}

.editor, .preview {
flex: 1;
}

.preview {
background-color: #f00;
overflow: auto;
float: right;
}
<textarea class="editor">
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
a <br>
</textarea>

<div class="preview"></div>

最佳答案

你的百分比计算有误,试试这个:

    var p = from.scrollTop / sf * 100;

关于javascript - 如何使用纯 Javascript 同步两个滚动条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38936582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com