8Dle
Авторизация

Проблема position:relative и dle_js.js в DLE 9.0-9.2

При вёрстке шаблонов для DLE я часто использую приём для размещения блоков на сайте с помощью position:relative; и position:absolute; - это очень удобный, семантически-правильный, валидный и т.д. способ решения сложных, на первый взгляд вариантов оформления.
Примером может служить тот же шаблон Turnion.
Но вот незадача: при использовании position: relative; для блоков, расположенных на странице (по расчётам браузера) ниже позиции top: 0px; (а это все блоки, кроме шапки) и являющихся родителем для комментариев, возникает очень неприятный "эффект" при добавлении, редактировании и удалении комментариев - страница прокручивается не до верха комментария, а до верха страницы.

А дело всё в том, что в DLE 9.2 в файле engine/classes/js/dle_js.js (для версии 9.0 это js_edit.js) есть функция scrollTop - это эффект прокрутки страницы до редактируемого, удаляемого или добавляемого комментария.
И функция эта использует для определения позиции текущего элемента функцию position(), которая получает значение позиции элемента top и left относительно отступов его предка., а так как у предка задано свойство position:relative; скрипт думает что его позиция top:0; left:0; и соответственно проматывает страницу в позицию top: 70; left: 0; что и даёт столь неприятный эффект прокрутки до начала страницы.

Я уже давно обещался заняться этой проблемой (когда даже толком и не знал чем она вызвана), и вот наконец, нашлось время.
Почитал документацию по jquery и легко нашёл альтернативную функцию определения позиции элемента - offset() - она получает текущие значения отступов относительно документа для первого элемента в наборе, что в нашем случаи более разумный подход, в принципе как и в любом другом.

Ну и подведя итог всему вышесказанному - инструкция по "излечению" этого бага будет выглядеть так:

- открываем engine/classes/js/dle_js.js (для версии 9.0 это js_edit.js) любым текстовым редактором (лучше notepad++);
- находим все вхождения position(), их будет 4 для DLE 9.2 (для DLE 9.0 - 3);
- заменяем все вхождения на offset();
- надеемся на то, что разработчики пофиксят эту проблему в новой версии DLE;

К сожалению, без правки кода движка эту проблему не решить никаким другим способом, кроме перевёрстки шаблона без использования position:relative.

Жмите на Кнопу ниже, или подписывайтесь!


Читайте также
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
гидра
hydraurl.com
Обрезная доска на опалубку по привлекательной цене. Доставка. Звоните
tdmuravey.ru


Dle это движок который изначально проектировался для создания новостных сайтов, но по мере своего развития движка значительно расширил свою функциональность и стал универсальным средством разработки и сопровождения сайтов и блогов различной направленности и тематики. По сравнению с другими бесплатными (и некоторыми платными) CMS системами движок dle обладает довольно обширными возможности.

Авторизация