Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   roktabs не работает в Опере (https://javascript.ru/forum/css-html-browser/3713-roktabs-ne-rabotaet-v-opere.html)

greatilya 17.05.2009 05:53

roktabs не работает в Опере
 
Roktabs - скрипт прокрутки контента, как бы вкладками. Так вот, в Опере он у меня не хочет изменять вкладки. Точнее щелкаю на вкладку, она активируется, но контент остается прежним. Вот посмотрите проблемную страницу.
Этот модуль идет для CMS Joomla. Но в тех поддержке Joomla, никто толком javascript не знает, вроде. Хотя может это просто задача сложная. Т.к. на эту тему там нет ответа.

Заранее благодарен!

Gvozd 17.05.2009 06:02

Только долгое и нудная отладко в стиле IE(деление пополам+alert)
все что могу предложить вам
ыормальных ошибок нету, поэтому ищем тот момент, когда сами табы "вроде сменяются", а контент еще нет
ну не мне учить вас дебагу не в firebug-е
увы, не могу помчь ничем кроме общих советов. мое знание браузеров не позволяет предположить почему так

greatilya 17.05.2009 06:41

ок. Спасибо буду стараться). Спасибо за оперативность).
Если у кого-нибудь будут ещё советы, буду рад услышать.
Хотя модуль относительно новый, вряд ли кто-то сталкивался с этой проблемой.

Сейчас ещё написал в тех. поддержку скрипта. Но там "американские" дядьки. Фиг ответят наверное. Кстати, замеал такую тенденцию, тех. поддержка на международном уровне у многих компаний плохо работает... Что очень печально.

greatilya 17.05.2009 14:13

Не получилось. JS закомпилен, или закодирован. Забыл как это правильно называется. вобщем вот он, с ним как я понимаю ничего нельзя сделать?

Gvozd 17.05.2009 16:05

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

а это вообще стандартный packer
у меня например заказчик как-то за 10 минут нагуглил и распаковал.
http://n2l.ru/3-chasa-seksa-ili-functionpacker/
работай на здоровье
кстати, я помню аналогичным способом другой код обсфуцировал.
там было в какой-то типа кодировке escape-последовательностями

x-yuri 17.05.2009 17:54

в общем, в opera если у элемента overflow: hidden, scrollWidth == 0, в отличие от остальных браузеров, поэтому неправильно работает Element.getSize, а за ним Fx.Scroll.ScrollTo...

greatilya 18.05.2009 09:31

Gvozd,
Вот оно! Это просто супер сервис! )

x-yuri,
Попробую поразбираться, попонимать о чем вы написали.... )))

greatilya 19.05.2009 19:26

нашел глюк)
Вот эта строка злополучная
return this.scrollTo(target.x - parent.x, target.y - parent.y);

Как я понял, пользуясь Яндексом что метод scrollTo глючит. Есть scrollIntoView(). не знаю можно ли его тут использовать, т.к. у неё всего один параметр: флаг.
Что можно сделать?

Gvozd 19.05.2009 19:51

Цитата:

Сообщение от greatilya
Как я понял, пользуясь Яндексом что метод scrollTo глючит.

пруфлинк?! не нашел
Цитата:

Сообщение от greatilya
Есть scrollIntoView(). не знаю можно ли его тут использовать

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

Kolyaj 19.05.2009 20:15

scrollIntoView принимает boolean, означающий снизу или сверху должен оказаться элемент.

x-yuri 19.05.2009 20:29

это, наверняка, не тот scrollTo, о котором вы думаете, в mootools.js есть как минимум еще 2 метода scrollTo... причем глючит Fx.Scroll.scrollTo... потому что там используется Element.getSize, который возвращает для оперы некорректный scrollWidth (по вышеуказанной мной причине)
попробуйте в него вставить alert и сравнить выдаваемые значения по сравнению с ff:
scrollTo: function(x, y) {
        if (this.timer && this.options.wait) return this;
        var el = this.element.getSize();
        var values = {
            'x': x,
            'y': y
        };
        for (var z in el.size) {
alert( el.scrollSize[z] );
            var max = el.scrollSize[z] - el.size[z];
            if ($chk(values[z])) values[z] = ($type(values[z]) == 'number') ? values[z].limit(0, max) : max;
            else values[z] = el.scroll[z];
            values[z] += this.options.offset[z];
        }
        return this.start([el.scroll.x, el.scroll.y], [values.x, values.y]);
    },


UPD:
return this.scrollTo(target.x - parent.x, target.y - parent.y);

можно в ff посмотреть, что такое this: console.log(this);

greatilya 20.05.2009 14:49

Сидел в коде mootools.js около 2 часов.
Отслеживал значения переменных. Сравнивал в браузерах. Опера как вы и говорили не корректную величину возвращает. Я принудительно прописал ей значения:
return this.start([554, 0], [values.x, values.y]);
    },

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

x-yuri 20.05.2009 16:24

и все-таки я ошибался... при таком коде:
<div id="asd" style="overflow: hidden;"><div style="width: 32767px;">asd</div></div>

scrollWidth внешнего div'а - 0px, если width внутреннего >= 32767px
p.s. все начинает работать, если заменить 50000px на 32766px

greatilya 21.05.2009 04:48

Подскажите а ко мне такой метод будет применим? Пробовал подставить ширину в код, не помогло
<div class="tabs-top">
		<div class="roktabs-wrapper" style="width: 554px;">
			<div class="roktabs dark">
				<!--<div class="roktabs-arrows">
					<span class="previous">&larr;</span>
					<span class="next">&rarr;</span>
				</div>-->
				<div class='roktabs-links' >
<ul class='roktabs-top'>
<li class="first active"><span>Камаэль</span></li>
<li ><span>Гномы</span></li>
<li ><span>Темные эльфы</span></li>
<li ><span>Эльфы</span></li>
<li ><span>Люди</span></li>
<li class="last"><span>Орки</span></li>
</ul>
</div>
				<div class="roktabs-container-tr">
					<div class="roktabs-container-tl">
						<div class="roktabs-container-br">
							<div class="roktabs-container-bl">
								<div class="roktabs-container-inner">
									<div class="roktabs-container-wrapper">
										<div class='roktabs-tab1'>
	<div class='wrapper'>
<p align="justify"><img src="images/stories/content_img/kamael.jpg" border="0" align="left" />На острове Душ, мира Lineage2, живет любопытная и свободолюбивая раса камаэль.<br />Эта раса была создана богиней, созидания и благородия, Einhasad. В расу был вселен дух ветра, который дал  бог ветра Сей.  Во времена титанов на расу камэль было наложено проклятие богиней Shilien, и теперь им необходимо пользоваться темной магией, чтобы иметь свободу, и бороться с врагами. Им приходится собирать души умерших, чтобы увеличить свои атакующие способности.<br />Характеристика: камэли - это раса воинов, и выбор профессии сводится к классам воинов.</p>	</div></div>
<div class='roktabs-tab2'>
	<div class='wrapper'>
<p align="justify"><img src="images/stories/content_img/dwarf.jpg" border="0" align="left" />Маленького роста, с умелыми руками, отличные коммерсанты,  хорошие воины  - это раса гномов. В мире  Lineage2 они живут  в северной части королевства Аден. Гномы были созданы богиней, созидания и благородия, Einhasad. Она вселила в расу гномов дух земли, который взяла у своей дочери богини Maphr. Богиня наделила их особыми возможностями, без которых не может  обойтись ни одна раса – это создание вещей. Они стали мастерами своего дела. Гномы отличные изготовители оружия, брони, ювелирных изделий и много другого.<br />Возможности: у них на много больше объем сумки, могут переносить  тяжелые вещи.</p>	</div></div>
<div class='roktabs-tab3'>
	<div class='wrapper'>
<p align="justify"><img src="images/stories/content_img/darkelf.jpg" border="0" align="left" />В мире Lineage2 существует еще одна раса эльфов – это темные эльфы. Во времена гигантов раса эльфов была едина. Но после гибели гигантов и потери власти, одна часть эльфйиского народа отделилась. Чтобы воевать с людьми для возвращения власти, но их усилия оказались напрасны, они проиграли. Темные эльфы стали веровать в богиню смерти Shilien, которая в свое время была изогнана богами за провинность.   <br />Характеристика: темные эльфы имеют серо-синюю кожу, волосы цвета серебра, рост у них значительно выше своих собратьев эльфов.</p>	</div></div>
<div class='roktabs-tab4'>
	<div class='wrapper'>
<p align="justify"><img src="images/stories/content_img/elf.jpg" border="0" align="left" />В лесах мира Lineage2 живет раса эльфов. Они были созданы богиней, создания и благородия, Einhasad. Богиня вселила в них дух воды, взятый у своей старшей дочери Шилен (которая впоследствии была лишена своего божественного дара, он был передан богине Еве). Во времена гигантов эльфы имели больше власти чем все остальные расы, но после того как гиганты отошли в небытие эльфы не смогли удержать свое положении. И были вынуждены уступить свое место.<br />Возможности: им доступны практически все профессии кроме профессий расы темных эльфов. У них повышена защита от, магических атак.</p>	</div></div>
<div class='roktabs-tab5'>
	<div class='wrapper'>
<p align="justify"><img src="images/stories/content_img/human.jpg" border="0" align="left" />В мире Lineage2 самой широко распространенной и обитающей практически на всем континенте  расой, есть люди. Благодаря тому, что они повышали свой интеллектуальный уровень, изучили эльфийскую магию досконально, они смогли добиться больших  результатов в изменении своей истории  и мира  Lineage2 в целом.<br />Люди были созданы богом – разрушения Gran Kain. Который создал свою форму по своему пониманию и добавил остатки: духа гнилой воды, духа гаснущего огня,  духа грязной земли и духа неуправляемого ветра, выпрошенные у детей-богов.</p>	</div></div>
<div class='roktabs-tab6'>
	<div class='wrapper'>
<p align="justify"><img src="images/stories/content_img/orc.jpg" border="0" align="left" />На северной окраине Элмора, в мире Lineage2 живет раса орков. Орки очень воинственная и сильная раса. Они были созданы богиней, создания и благородия, Einhasad.Богиня вселила в эту расу дух огня, который попросила у своего сына Paagrio. <br />После гибели гигантов, орки вели многочисленные воины за власть, вначале против эльфов, а потом и против людей. Но так и не добились желаемого результата. <br />И впоследствии им пришлось вернутся в свои владения.</p>	</div></div>
									</div>
								</div>
							</div>
						</div>
					</div>	
				</div>
							</div>
		</div>
	</div>
	
		</div>
	</div>

x-yuri 21.05.2009 06:08

сюда подставляли (http://www.mobam.net/modules/mod_rok...mpl/roktabs.js)?
var RokTabs = new Class({
    version: '1.3',
    options: {
        'scroll': RokTabsOptions
    },
    initialize: function(options) {
        this.setOptions(options);
        this.containers = $$('.roktabs-container-inner');
        this.tabsWrapper = $$('.roktabs-links');
        this.tabs = $$('.roktabs-links ul');
        this.panels = $$('.roktabs-container-wrapper');
        this.outer = $$(this.tabsWrapper.getParent());
        this.wrapper = $$(this.outer.getParent());
        this.fx = [];
        this.current = [];
        this.timer = [];
        this.tabsSize = [];
        this.tabScroll = [];
        this.panels.each(function(panel, i) {
            this.current[i] = 0;
            panel.setStyle('width', '50000px')
        },
        this);
        this.attachEvents()
    },

greatilya 21.05.2009 18:02

Ура!!!!!!!!! Счастью нет предела!!!!!! Спасибо!!!!!!!! Вам полный респект!!!!
Я ваш должник!)
Еще раз спасибо!


Часовой пояс GMT +3, время: 08:13.