jquery вопрос

Даже на тестовом форуме нельзя без флейма и флуда? Тогда вам сюда ;)
Аватара пользователя
Alecto
Сообщения: 571
Зарегистрирован: 05 авг 2014, 21:41

jquery вопрос

Сообщение Alecto »

подскажите выход...

есть функция, которая рассчитывает и устанавливает положение блоков слева/справа в зависимости смещения wrap при изменении размера окна, в зависимости от размера блока share42.

Код: Выделить всё

	function ExtendedButtonsPosition(){
		B = $('#wrap').offset().left - $('#share42').outerWidth() - 10;
		$('#share42').css('left', B + 'px');
		$('.ePosRight').css('right', B + 'px');
	}
функция (1) вызывается при изменении размера окна

Код: Выделить всё

	$(window).resize(function(){
		ExtendedButtonsPosition();
	});
и при загрузке страницы (2):

Код: Выделить всё

	$(document).ready(function () {
		ExtendedButtonsPosition();
	});

проблема заключается в том, что каждая кнопка блока share42 имеет справа еще и счетчик (span-элемент), который строится на jquery, поэтому при загрузке страницы этот элемент еще не сформирован и имеет ширину NULL
поэтому при загрузке страницы (2) блок выводится так:
1.jpg
1.jpg (18.14 КБ) 1966 просмотров
при ресайсе, все нормально (1), сам счетчик имеет ширину 17px, правильно просчитывает положение блока и все выглядит так:
2.jpg
2.jpg (19.32 КБ) 1966 просмотров
ставить всему блоку кнопок фиксированную ширину не хотелось бы, потому как в зависимости от количества репостов будет меняться счетчик, соответственно и ширина блока, соответственно надо менять положение.
скорее всего $(document).ready вызывается слишком рано. пробовал вызывать $('#share42').ready - не помогло.
сам счетчик управляется классом share42-counter, но и $('.share42-counter').ready - не работает

надо вызывать еще позже либо другой вариант :(

помогите решить задачку.

Аватара пользователя
Alecto
Сообщения: 571
Зарегистрирован: 05 авг 2014, 21:41

jquery вопрос

Сообщение Alecto »

вопрос снят. сделал по другому

Аватара пользователя
Alecto
Сообщения: 571
Зарегистрирован: 05 авг 2014, 21:41

jquery вопрос

Сообщение Alecto »

обнаружил, что соц.кнопка share42 на странице тем выбивает ошибку
TypeError: data[url] is undefined
...om/?callback=?&ids='+url,function(data){shares=data[url].shares||0;if(shares>0||...
share42...ion=853 (строка 2, столбец 503)
1.jpg
помогите отловить ошибку? она на моей стороне? или это скрипт?
погугли - такие ошибки известны, но как решить, так и не понял.

Отправлено спустя 41 минуту 30 секунд:
нашел причину ошибки:
скрипт так реагирует на "&" в адресе, поскольку ссылки в соц.сеть добавляются, а не работает часть, которая возвращает количество "лайкнутых" страниц, то проблема где-то здесь.
может у кого есть идеи, как заставить работать скрипт с темами?
Вложения
share42.zip
(3.49 КБ) 113 скачиваний

Аватара пользователя
Alecto
Сообщения: 571
Зарегистрирован: 05 авг 2014, 21:41

jquery вопрос

Сообщение Alecto »

мда, лечить бесполезно. ошибку вызывал счетчик фэйсбук.
вариант 1 - отключить кнопку фэйсбук.
вариант 2 - отключить jquery-счетчики, тем более что они из тем (проверял для вконтакте) - почему-то не работают.
склоняюсь к варианту 2, потому как пофиксить сможет только автор, попробую ему отписаться.

Аватара пользователя
Alecto
Сообщения: 571
Зарегистрирован: 05 авг 2014, 21:41

jquery вопрос

Сообщение Alecto »

надо выполнить действия со стилем изображений на странице тем: когда высота изображений, устанавливаемых стилем, превышает 500px, надо изменить параметры CSS, для чего составил код...

Код: Выделить всё

$('.highslide img').each(function () {
 		if ($(this).height() > 500) {
			$(this).css({ 'width': 'auto', 'height': '500px','max-height': '500px' });
		}
	});
но возникла проблема, на некоторых страницах действие выполняется только после повторной перезагрузки страницы.
пробовал ставить код в document ready - то же самое.
почему так происходит - не могу понять.

еще думаю попробовать вариант load - each, если такое возможно (есть сомнения что поможет), но не могу составить конструкцию.
может кто опытный подскажет, как поправить? или в чем может быть ошибка?

Отправлено спустя 23 минуты 37 секунд:
уже переделал через классы- все равно при первой загрузке страницы - условие не срабатывает, классы не меняются.
вторая и следующие загрузки - все работает.

Код: Выделить всё

$('.highslide img').each(function () {
 		if ($(this).height() > 500) {
			$(this).removeClass('highslide-horizontal').addClass('highslide-vertical');
		}
	});
помогите разобраться.

ostridm
Сообщения: 29
Зарегистрирован: 07 фев 2014, 22:04

jquery вопрос

Сообщение ostridm »

смотри мои посты на 2 странице

Аватара пользователя
Alecto
Сообщения: 571
Зарегистрирован: 05 авг 2014, 21:41

jquery вопрос

Сообщение Alecto »

да.
я тогда лепил полностью это все на jquery, потом переделал на CSS, твой совет был правильным.

но, мне не дает покоя ситуация, когда изображения меньше требуемого размера, а они все должны быть вписываться в окно 650px по ширине и 500px по высоте - ни больше, ни меньше.

что я сделал:
всем изображений при создании через ббкод присваивается класс

Код: Выделить всё

.highslide-horizontal {
    margin: 5px 0;
    max-width: 650px;
    width: 99%;
}
и здесь все нормально, стабильно и красиво. большие изображения не превышают 650 точек, маленькие вытягиваются до 650пх.
но, с вертикальными изображениями не все так красиво, как хотелось бы, они тоже вытягивыются по ширине до 650, но становятся очень большими.
через CSS можно убрать 99% ширину и вместо этого поставить ограничение по высоте, но тогда небольшие изображения не достигают требуемого размера.
вот изза этого я продолжил сыр-бор.

сделал второй класс

Код: Выделить всё

.highslide-vertical {
    height: 500px;
    max-height: 500px;
    width: auto;
}
в котором отключаю растягивание по горизонтали, включаю ограничение по высоте 500 и дотягивание высоты до 500 если изображение меньше требуемого размера.

т.е. по-умолчанию все изображения считаются горизонтальными отрабатываются первым стилем.

затем срабатывает функция jquery

Код: Выделить всё

// расчет высоты изображений, подмена классов
	function imageResize() {
		$('.highslide img').each(function () {
 			if ($(this).height() > 500) {
				$(this).removeClass('highslide-horizontal').addClass('highslide-vertical');
			}
		});
	}
которая определяет высоту изображения и меняет класс - все стабильно, красиво и так как мне хочется

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

пока ничего лучше не придумал, чем вызвать один раз функция для кэшированных изображений при формировании страницы

Код: Выделить всё

(function($) {
// пересчитываем высоту изображений при загрузке кэшированных изображений
	imageResize();
второй раз с задержкой в 1 сек.

Код: Выделить всё

// пересчитываем высоту для изображений, загружаемых в первый раз
	$(document).ready(function() {
		setTimeout(imageResize,1000);
	});
этот вариант работает приемлемо, не думаю, что он слишком грузный, так как скрипт отрабатывается при загрузке страницы, изображений максимум может быть несколько десятков, из которых функция обработает единицы, причем условие сроботает либо сразу, либо с задержкой в 1 сек.

как решить по другому - не знаю. попросил помощи, но наши мудрые гуру упорно молчат, наверное что-то знают.

Аватара пользователя
Татьяна5
Сообщения: 570
Зарегистрирован: 02 фев 2014, 15:05

jquery вопрос

Сообщение Татьяна5 »

Код: Выделить всё

.higslide-all {
max-width: 650px;
max-height: 500px;
}
Не?

Аватара пользователя
Alecto
Сообщения: 571
Зарегистрирован: 05 авг 2014, 21:41

jquery вопрос

Сообщение Alecto »

нет, потому что это будет работать только для изображений больше указанных параметров.
например, 640px по ширине - уже надо вытягивать.
Alecto писал(а):QR_BBPOST изображения меньше требуемого размера, а они все должны быть вписываться в окно 650px по ширине и 500px по высоте - ни больше, ни меньше.
Alecto писал(а):QR_BBPOST через CSS можно убрать 99% ширину и вместо этого поставить ограничение по высоте, но тогда небольшие изображения не достигают требуемого размера.

Алг
Сообщения: 645
Зарегистрирован: 18 фев 2014, 17:28

jquery вопрос

Сообщение Алг »

так а
min-width
min-height
выставить?

Ответить