好的。我想先道歉,因爲我甚至不知道如何正確地標題這個問題。 我會盡力解釋: 我有一個工作代碼,這種工作方式,但它有點混亂,所以我試圖把它分成小函數。 整個過程是一個模擬滾動條:函數內部調用函數 - 故障:函數不執行
-div id =「滾動條」表示滾動條軌道。
-div id =「滾動條」的唯一孩子代表滾動條的拇指。
現在。每當document.documentElement中發生「onmousedown」事件時,函數checkAndPerform(e)就會被執行。 (e)獲取滾動條的邊框並調用以下功能:
-checkClick(e):它檢查滾動條內是否發生了單擊並且返回true或false。
-perform():如果checkClick的結果爲true,則它將拇指移至點擊位置。另外,它向下滾動滾動條操作的部分(部分ID =「ejercicios」)。最後,它爲document.documentElement添加一個「mousemove」EventListener,並附帶跟隨Me(e)函數。 這個followMe函數調用一個限制滾動到軌跡欄邊框的函數。之後,在「mousemove」處於活動狀態時,執行div和滾動部分的翻譯,最後調用函數release(),該函數在鼠標鍵釋放後添加「mouseup」EventListener以刪除followMe函數。
的代碼的想法來到這裏:
How can I retrieve all mouse coordinates between mousedown to mouseup event,在那裏你可以接受的答案該功能被稱爲「航跡」被調用troubleless(因爲它是在我以前的代碼)看到。
所以,在這裏它是困擾javascript代碼:
function getHeight(object) {
var height = object.getBoundingClientRect().bottom - object.getBoundingClientRect().top;
return height;
}
function checkClick(e) {
console.log("x:" + e.pageX, "y:" + e.pageY);
if (e.pageX > sBLeft - 5 && e.pageX < sBRight + 5 && e.pageY < sBBottom && e.pageY > sBTop) {
adentroBar = true;
console.log("meas adentro");
} else {
adentroBar = false;
console.log("meas afuera");
}
return adentroBar;
}
function scrollLimited(e) {
if (e.pageY < sBTop) {
translateY = 0;
} else if (e.pageY > sBBottom) {
translateY = getHeight(scrollBar) - getHeight(thumb);
} else {
translateY = e.pageY - sBTop - .5 * getHeight(thumb);
}
}
function followMe(e) {
scrollLimited;
thumb.style.transform = "translate3d(0," + translateY + "px,0)";
document.getElementById('ejercicios').scrollTop = translateY * ratio;
document.documentElement.addEventListener("mouseup", release, false);
}
function perform() {
if (adentroBar === true) {
translateY = e.pageY - sBTop - getHeight(thumb)/2;
}
thumb.style.transform = "translate3d(0," + translateY + "px,0)";
document.getElementById('ejercicios').scrollTop = translateY * ratio;
document.documentElement.addEventListener("mousemove", followMe, false);
}
function release() {
document.documentElement.removeEventListener("mousemove", followMe, false);
}
function checkAndPerform(e) {
var translateY, adentroBar, scrollBar = document.getElementById('scrollbar'),
thumb = scrollBar.getElementsByTagName("div")[0],
sBLeft = scrollBar.getBoundingClientRect().left,
sBRight = scrollBar.getBoundingClientRect().right,
sBTop = scrollBar.getBoundingClientRect().top,
sBBottom = scrollBar.getBoundingClientRect().bottom,
preg = document.getElementById('preguntas'),
ratio = preg.offsetHeight/(getHeight(scrollBar) - getHeight(thumb));
if (e.which === 1) {
checkClick;
perform;
}
}
document.documentElement.addEventListener("mousedown", checkAndPerform, false);
而且,這裏是一個jFiddle它:https://jsfiddle.net/pa0exs4q/ 我可以提供的情況下,你覺得有趣的工作代碼,但正如我剛纔所說,它是非常混亂和寫作。 問題是流中的第二個函數(checkClick),甚至沒有被調用。 我試圖稱它爲(checkClick(e)),在這種情況下它運行,但未能識別checkAndPerform中定義的變量。 在我的工作代碼中,一切都是唯一的功能,所以我認爲這可能是一個範圍問題,但我對任何想法都是開放的。 爲我的英語道歉,並提前致謝!
在此之後,我不得不學習「通過」和「通話」之間的區別,但正如您所說,它只是在將參數傳遞給每個功能後才起作用。除了一個..:S。對於那個我創建了一個屬性的對象,現在它的工作很棒!非常感謝! – Sourcerer
不客氣 - 樂於幫忙! –