Javascript / xhtml - определение общей ширины содержимого в div с помощью overflow: hidden

Я пишу фотогалерею на основе javascript с горизонтально прокручиваемой полосой миниатюр.

>> Моя текущая незавершенная работа находится здесь <<

Я хочу, чтобы полоса миниатюр перестала прокручиваться, когда дойдет до последней миниатюры. Для этого мне нужно найти общую ширину содержимого div - желательно без суммирования ширины всех миниатюрных изображений и полей.

Я поместил предупреждение в свою функцию window.onload, чтобы я мог тестировать различные функции измерения элементов в разных браузерах. в настоящее время отображается значение scrollWidth, которое обозначается как 1540 пикселей в IE и 920 пикселей в FireFox, Safari, Opera и т. д.

Значение 1540 является правильным для моих целей. Может ли кто-нибудь сказать мне, как получить это значение в FireFox и т. д.

Кстати, он тоже возвращает 1540 в Chrome

Pim Jager 08.01.2009 22:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
3 990
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Я думаю, вы ищете "offsetWidth". Для кроссбраузерности используйте прокрутку [Ширина / Высота] или смещение [Ширина / Высота], в зависимости от того, что больше.

var elemWidth = (elem.offsetWidth > elem.scrollWidth) ? elem.offsetWidth : elem.scrollWidth;
var elemHeight = (elem.offsetHeight > elem.scrollHeight) ? elem.offsetHeight : elem.scrollHeight;

В firefox 2 и scrollWidth, и offsetWidth равны 920 для элемента, который он использует alert () ("thumb_slide").

Crescent Fresh 08.01.2009 21:49

а в IE7 они оба возвращают 1540

Noel Walters 08.01.2009 21:54

document.getElementById ('thumb_window'). scrollWidth возвращает 1540 как в IE6, так и в firefox 2. Что говорит ваш IE7?

Crescent Fresh 08.01.2009 21:58

ура! IE7 сообщает 1540 для ширины прокрутки thumb_windows. Спасибо! Я отправлю ответ на свой вопрос через мгновение. с результатами также для Opera и Safari.

Noel Walters 08.01.2009 22:05

Что вам нужно сделать, так это найти последний элемент изображения в div, получить его положение по X относительно его контейнера, добавить его ширину и, возможно, добавить его горизонтальные поля, если они есть.

Псевдокод:

total_width = (last_image.x - container.x) + last_image.width + last_image.left_margin + last_image.right_margin

Это было бы довольно легко сделать с помощью JQuery, поскольку он специально имеет встроенную функциональность для получения .last (), получения относительного позиционирования и выборки ширины полей.

Ответ принят как подходящий

Возможно, вы просто ссылаетесь не на тот элемент.

document.getElementById('thumb_window').scrollWidth

дает мне 1540 на этой странице как в IE6, так и в firefox 2. Это то, что вы ищете?

Кстати, в IE6 миниатюры выходят за пределы правого скроллера.

Я тестирую с FF 3.05 - он возвращает 920. Еще не тестировал с IE6 - спасибо за внимание - отлично работает в IE7.

Noel Walters 08.01.2009 21:58

О, круто. FF2 сообщает 1540, FF3 920 ??

Crescent Fresh 08.01.2009 22:02

извините, пропустил-прочитал ваш пост. ширина прокрутки на thumb_window - это то, что мне нужно.

Noel Walters 08.01.2009 22:15

Проблема IE6 связана с "hasLayout", исправлена ​​добавлением "zoom: 1" в правило стиля для thumb_window.

Noel Walters 09.01.2009 02:24

Исправление: проблема ie6 привела к тому, что я установил размер окна большого пальца с использованием свойств CSS left и right вместо left и width.

Noel Walters 21.01.2009 00:57

Вы можете прокручивать изображения на стороне сервера и складывать их ширину. (В php для этого вы можете использовать функцию getImagesize()). Затем вы можете передать полную ширину всего изображения в javascript. Например:

$total_width=0;
foreach ($images as $image)
{
   $info=getimagesize($image['file_path'];
   $total_width=$total_width +  $info[0];
}

В javascript:

<script type = "text/javascript">
var total_width=<?=$total_width;?>;
</script>

Я не голосовал против вас, но вопрос конкретно заключается в том, чтобы избежать суммирования ширины всех изображений.

Soviut 08.01.2009 23:05

Извините, я, должно быть, пропустил это.

Click Upvote 08.01.2009 23:50

Вот столик: -

             thumb_window             thumb_slide
             scrollWidth offsetWidth  scrollWidth offsetWidth
IE7          1540        920          1540        1540
FF 3.05      1540        920          920         920
Opera 9.5    1540        920          920         920
Safari 3.2   1540        920          1540        920
Chrome 1.0   1540        920          1540        920

Другие вопросы по теме