Восстановление позиции скроллинга в ПолеHTMLДокумента

1. fixin 4288 27.04.25 18:10 Сейчас в теме
Написал небольшую обработку для тестирования.
Если устанавливаю Документ.body.scrollTop, получается прокрутить.

Но как получить текущую позицию скроллинга? Когда считываю Документ.body.scrollTop, получаю всегда ноль.

windows.scrollY вообще не работает, с него пробовал начинать.
Прикрепленные файлы:
ПроверкаПрокрутки.epf
Вознаграждение за ответ
Показать полностью
Найденные решения
22. vadim1011985 103 30.04.25 23:14 Сейчас в теме
(18) добавьте стиль для id numbers
Overflow:auto;
Height :80%

И получайте и устанавливаете scrollTop не для Body а для блока div id = numbers.
29. fixin 4288 04.05.25 18:39 Сейчас в теме
(22) Как ни странно, но это действительно работает.
я просто все body обернул в div с ID scroller.

CSS:
       .scroller {
            Overflow:auto;
			Height :100%
        }



И вот теперь могу получать scroller.ScrollTop:


scroller = Элемент.Документ.getElementById("scroller"); 
Если scroller <> Неопределено Тогда
	ПозицияY = scroller.scrollTop;
КонецЕсли;



А я уж думал, все, амба... Спасибо за наводку.
Прикрепленные файлы:
ПроверкаПрокрутки2.epf
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. user-z99999 74 28.04.25 09:37 Сейчас в теме +0.3 $m
(1)
в коде JS нужно написать функцию, примерно так:
function Message1C(n, my_key_name)
{                  
	document.getElementById('my_key_name').innerHTML = my_key_name; 
   document.getElementById('my_number_foto').innerHTML = n;   
	plusSlides(n);
}  


Поправь её для себя, чтобы она возвращала позицию скролла
let x = window.scrollX || window.pageXOffset;
let y = window.scrollY || window.pageYOffset;

а в 1с нужно вызвать функцию и получить результат из неё, ниже тоже код примерный:
ЭтотОбъект.КоличествоФото =  " <a on click=""Message1C(0,'СсылкаВбраузере')"">Ссылка</a></div>" + Символы.ПС;
9. fixin 4288 28.04.25 09:43 Сейчас в теме
(8) мимо. В браузере 1С window.ScrollY всегда равен нулю. window.pageyoffset тоже равно нулю.
Вообще все методы на прокрученной до конца вниз странице дают 0:

function bus_scroll_click(event) {
	//alert('click');
	var bus_scroll = document.getElementById("bus_scroll");
	bus_scroll.setAttribute("scrollY", window.scrollY);
	bus_scroll.setAttribute("pageYOffset", window.pageYOffset);  
	bus_scroll.setAttribute("document_documentElement_scrollTop", document.documentElement.scrollTop);  
	bus_scroll.setAttribute("document_body_scrollTop", document.body.scrollTop);  
	
}

Показать
Прикрепленные файлы:
10. user-z99999 74 28.04.25 10:06 Сейчас в теме
(9) Забудь про 1с.
Просто в браузере на js функция должна возвращать значения. Можешь вывести их на экран.

Как получиться, вспомни об 1с.
из 1с вызови эту функцию.
11. fixin 4288 28.04.25 10:07 Сейчас в теме
(10) это код браузера. Всё по нулям
12. user-z99999 74 28.04.25 10:10 Сейчас в теме
(11) Значит это не возможно сделать на html + js
)))

Но, как получится, только тогда мучить 1с, не раньше.
13. fixin 4288 28.04.25 10:40 Сейчас в теме
(12) рано сдаетесь. Может кто победит ещё
27. Torin57 45 01.05.25 10:33 Сейчас в теме
(1) Не по теме вопрос, но может у тебя такая разработка есть.
В ОСВ по 62 счету в 1С Бухгалтерии есть суммы с плюсом и с минусом. Их нужно "схлопнуть". Сделать ручную операцию по 62 счету, которая эти суммы взаимно зачтет. Причем так, чтобы обороты не увеличивались.
Документ «Корректировка долга» не выполнил свою функцию корректно. Поэтому пришлось сделать ручной операцией, но бухгалтер все равно остался недоволен, потому что увеличились обороты.
Есть ли у тебя обработка, которая правильно сформирует проводки по "схлопыванию" сумм с плюсом и с минусом на 62 счете? Или может ты что-то подобное видел.
30. fixin 4288 04.05.25 18:40 Сейчас в теме
2. starik-2005 3179 27.04.25 20:22 Сейчас в теме
Вот что на это может пояснить дипсик.
Чтобы получить позицию вертикального скроллера (вертикальную прокрутку) в JavaScript, можно использовать следующие свойства:
1. Для всего документа (страницы):
javascript

// Совместимый способ (работает в большинстве браузеров)
const scrollPosition = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;

console.log(scrollPosition); // Выведет текущую позицию скролла по вертикали

2. Для конкретного элемента с прокруткой:
javascript

const element = document.getElementById('scrollable-element');
const scrollPosition = element.scrollTop;

console.log(scrollPosition); // Позиция скролла внутри элемента

3. Современный способ (лучшая практика):
javascript

const scrollPosition = window.scrollY; // Только для вертикального скролла
// или
const scrollPosition = window.scrollX; // Для горизонтального скролла

console.log(scrollPosition);

Пример отслеживания скролла:
javascript

window.addEventListener('scroll', function() {
const scrollPosition = window.scrollY;
console.log('Текущая позиция скролла:', scrollPosition);
});

Примечания:

window.scrollY и window.pageYOffset - это современные и предпочтительные способы.

document.documentElement.scrollTop работает лучше в некоторых случаях (например, в режиме quirks mode).

Для элементов с overflow: auto или overflow: scroll используйте свойство element.scrollTop.

Выберите подходящий вариант в зависимости от того, нужно вам отслеживать прокрутку всей страницы или конкретного элемента.
Показать
3. fixin 4288 27.04.25 20:56 Сейчас в теме
(2) я чуть выше писал, что ScrollY всегда возвращает ноль. Такое ощущение, что 1С рассматривает документ как не скроллируемый.

Я написал небольшой файл HTML+JS, где выполняется onScroll. Так вот в браузере все ОК, а в 1С onScroll не вызывается тупо.

function addTextToEnd(text) {
    // Создаем новый элемент параграфа
    const paragraph = document.createElement('p');
    // Устанавливаем текст для параграфа
    paragraph.textContent = text;
    // Добавляем параграф в конец body
    document.body.appendChild(paragraph);
}              
                  
                

window.addEventListener('scroll',()=>{
	addTextToEnd("Scroll Y: " + window.scrollY);
	//console.log(document.documentElement.scrollTop || document.body.scrollTop);
});   
Показать
4. Anterian 27.04.25 21:53 Сейчас в теме
(3) Можно вопрос, а в 1с js можно писать оказывается, да? Офигеть, не знал
5. fixin 4288 27.04.25 23:32 Сейчас в теме
(4) можно. Но не в 1с, а в поле браузера
Anterian; +1 Ответить
6. пользователь 28.04.25 09:07
Сообщение было скрыто модератором.
...
7. пользователь 28.04.25 09:07
Сообщение было скрыто модератором.
...
14. starik-2005 3179 28.04.25 19:57 Сейчас в теме
(3)
я чуть выше писал, что ScrollY всегда возвращает ноль
А тебя не смутило "Современный способ"? В 1С вебкит - это достаточно несвежий движок.
15. fixin 4288 28.04.25 21:19 Сейчас в теме
(14) мне нужны не размышления, а результат. Как прокрутить в вебките, знаю, как получить текущую позицию прокрутки - нет.
18. fixin 4288 29.04.25 12:56 Сейчас в теме
(17) насколько я понял, совет заключается в слушателе события scroll.
Так вот один и тот же html код в браузере ловит событие scroll, а в полетхтмл документа не ловит.
Такое ощущение, что все поле хтмл документа 1с считает одним большим полотном, которое прокручивает не средствами браузера, а своими

Хотя я ещё попробую и выложу версию со слушателем сюда.
19. starik-2005 3179 29.04.25 20:36 Сейчас в теме
(18) Ну так сделай div и в нем мути.
20. fixin 4288 30.04.25 12:45 Сейчас в теме
(19) это из серии "вырезание аппендикса через прямую кишку"
23. starik-2005 3179 30.04.25 23:35 Сейчас в теме
(20) Это из серии "как все нормальные посоны делают это".
Кстати, ты в курсе про встроенный в 1С отладчик JS? Контрл+Шифт+Альт+Ф12. Там и консолька есть. Погляди в свойства глазками своими.
25. fixin 4288 01.05.25 00:15 Сейчас в теме
(24) ты б обработку приложил...
(23) про отладку не в курсе, спасиб.
26. starik-2005 3179 01.05.25 00:20 Сейчас в теме
(25) Какую обработку? На картинке? Так это фрма, в ней один реквизит типа строка, выведенный в поле ХТМЛ, в коде строке присваивается "хтмл/боди/див стайл = блабла" - т.е. строка. Код на картинке - это тот самый документ.боди.скроллтоп. Для разных позиций скролла он у меня показывает разные цЫфры.
28. vadim1011985 103 01.05.25 12:43 Сейчас в теме
(26) Гению 1с этого не понять
24. starik-2005 3179 30.04.25 23:56 Сейчас в теме +0.2 $m
(20) В общем хз, что ты там куришь, но вот я не поленился и в линухе своем залез глянуть. В итоге у меня работает один из методов, который дипсик выдал. Смотри картинку.
ЗЫ: ну ты же понимаешь, что див тут просто для того, чтобы в принципе скроллбар был виден, да? Ну т.е. что это не скорлл внутри дива...
Прикрепленные файлы:
21. vadim1011985 103 30.04.25 22:58 Сейчас в теме +1.5 $m
(18) Так оно и есть. Если в стилях для Body задать высоту например как height: 100% то появляется вторая полоса прокрутки которая получает и возвращает scrollTop
22. vadim1011985 103 30.04.25 23:14 Сейчас в теме
(18) добавьте стиль для id numbers
Overflow:auto;
Height :80%

И получайте и устанавливаете scrollTop не для Body а для блока div id = numbers.
29. fixin 4288 04.05.25 18:39 Сейчас в теме
(22) Как ни странно, но это действительно работает.
я просто все body обернул в div с ID scroller.

CSS:
       .scroller {
            Overflow:auto;
			Height :100%
        }



И вот теперь могу получать scroller.ScrollTop:


scroller = Элемент.Документ.getElementById("scroller"); 
Если scroller <> Неопределено Тогда
	ПозицияY = scroller.scrollTop;
КонецЕсли;



А я уж думал, все, амба... Спасибо за наводку.
Прикрепленные файлы:
ПроверкаПрокрутки2.epf
16. пользователь 28.04.25 22:59
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот