Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Перевести код с prototype в jquery (https://javascript.ru/forum/jquery/13622-perevesti-kod-s-prototype-v-jquery.html)

alexey_samara 06.12.2010 20:25

Перевести код с prototype в jquery
 
Здравствуйте!
Появилась проблема совместимости данных фреймворков.
Дело в том, что в джумле по умолчанию используется mootools. Я в некоторых местах использую jquery (с включенным noConflict). Код на jquery работает прекрасно.
Но появилась необходимость использовать следующий скрипт, который написан (до кучи) на prototype:

window.t1PodObj=null;
window.nbaHomepage=function(){};


function nbaHomepageT1Init(){
	t1PodObj=new nbaHomepage.t1PodNav("nbaT1PodNav","nbaT1PC");
	t1PodObj.setT1Timer(4000);
	t1PodObj.startRotation();
}

nbaHomepage.t1PodNav=

function(t1ThumbContainer,t1ContPrefix){
	var nbaT1PodNav=$(t1ThumbContainer);
	var nbaT1ContPrefix=t1ContPrefix;
	var nbaT1Timeout=7000;
	var navArry=[];
	var lastPosition=0;
	var t1PodTimer=null;
	var isErr=false;
	this.startRotation=_startRotation;
	this.doRotate=_doRotate;
	this.stopRotate=_stopRotate;
	this.doThumbOver=_doThumbOver;
	this.showHideT1=_showHideT1;
	this.setT1Timer=_setT1Timer;
	
	function _startRotation(){
		try{
			navArry=nbaT1PodNav.getElementsBySelector('li');
			_getOverlayDiv(navArry[lastPosition]).addClassName("nbaSpanOverlay");
			_setMouseOverEvents();
			_doRotate();
		}
		catch(eRR){}
	}

	function _setT1Timer(timeVal){
		nbaT1Timeout=timeVal
	}

	function _setMouseOverEvents(){
		for(var i=0;i<navArry.length;i++){
			try{
				var iElement=nbaT1ContPrefix+i;
				navArry[i].observe('mouseover',_thumbHandler.bindAsEventListener(Event,true,i));
				navArry[i].observe('mouseout',_thumbHandler.bindAsEventListener(Event,false,i));
				$(iElement).observe('mouseover',function(e){_stopRotate();});
				$(iElement).observe('mouseout',function(e){_doRotate();});
			}
			catch(_eRR){
				isErr=true;alert("setMouseOverEvents(): Content element with ID [ "+iElement+"] was not found in the DOM");
				break;
			}
		}
	}
	
	function _thumbHandler(e){
		var argArry=$A(arguments);
		argArry.shift();
		if(argArry[0]){
			_doThumbOver(argArry[1])
		}else{
			_doRotate();
		}
	}
	
	function _doRotate(){
		if(!isErr){
			t1PodTimer=setTimeout(
				function(){
					_showHideT1()
				}
			,nbaT1Timeout);
		}
	}
	
	function _stopRotate(){
		clearTimeout(t1PodTimer);
		t1PodTimer=null;
	}
	
	function _doThumbOver(thumbId){
		_stopRotate();
		try{
			$(nbaT1ContPrefix+lastPosition).hide();
			_getOverlayDiv(navArry[lastPosition]).removeClassName("nbaSpanOverlay");
			$(nbaT1ContPrefix+thumbId).show();
			_getOverlayDiv(navArry[thumbId]).addClassName("nbaSpanOverlay");
			lastPosition=thumbId;
		}
		catch(_eRR){
			alert("doThumbOver(): Content element with ID [ "+(nbaT1ContPrefix+lastPosition)+"] or [ "+(nbaT1ContPrefix+thumbId)+"] was not found in the DOM");
		}
	}
	
	function _showHideT1(){
		var nextPosition=((lastPosition+1)>navArry.length-1)?0:(lastPosition+1);
		var currContent=nbaT1ContPrefix+lastPosition;
		var nextContent=nbaT1ContPrefix+nextPosition;
		try{
			_getOverlayDiv(navArry[lastPosition]).removeClassName("nbaSpanOverlay");
			_getOverlayDiv(navArry[nextPosition]).addClassName("nbaSpanOverlay");
			$(currContent).hide();
			$(nextContent).show();
			_doRotate();
		}
		catch(_eRR){
			isErr=true;s
			alert("t1PodNav._showHideT1(): Content element with ID [ "+currContent+"] or [ "+nextContent+"] was not found in the DOM");
		}
		lastPosition=nextPosition;
	}
	
	function _getOverlayDiv(liElement){
		var liFirstChild=liElement.firstDescendant();
		var liFirstChildDivs=liFirstChild.getElementsBySelector('div')
		return liFirstChildDivs[0];
	}
}


в <body> прописан :
onload="nbaHomepageT1Init();"


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

alexey_samara 07.12.2010 13:31

все, отбой! нашел решение на jquery :victory:
ui-tabs называется;)

monolithed 07.12.2010 16:52

Блин ну нафига захламлять сеть такими сайтами где и jQuery и MooTools и Prorotype и ExtJS в придачу юзеру навесят?!


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