Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Корекция скрипта для работы в Opera (https://javascript.ru/forum/misc/2030-korekciya-skripta-dlya-raboty-v-opera.html)

BackOrifice 23.10.2008 01:07

Корекция скрипта для работы в Opera
 
привет всем !!!
Я недавно начал интересоваться джава скриптами , и ещо не всё могу сделать сам.Нужна ваша помощь.

Значит есть у меня скрипт на сайте, благодаря которому направив курсор на картинку она меняется на другую, когда убираю курсор то картинка становется прежней.

ЭТОТ СКРИПТ РАБОТАЕТ ВЕЗДЕ КРОМЕ ОПЕРЫ !!!
Пожалусто помогите его подправить !!!

вот скрипт !!!

/****** User may alter these to change the fade effect ********/
var FadeInStep 	= 20;
var FadeOutStep 	= 20;
/****** Don't alter anything else **************/
document.write('<STYLE TYPE="text/css">.imgFader{ position:relative; filter:alpha(opacity=0); -moz-opacity:0.0 }</STYLE>');

if(!window.JSFX)
	JSFX=new Object();

JSFX.RolloverObjects=new Array();

JSFX.Rollover = function(name, img)
{
	JSFX.RolloverObjects[name]=new Image();
	JSFX.RolloverObjects[name].img_src = img;	
	if(!JSFX.Rollover.postLoad)
		JSFX.RolloverObjects[name].src = img;
}
JSFX.Rollover.postLoad = false;
JSFX.Rollover.loadImages = function()
{
	var i;
	for(i in JSFX.RolloverObjects)
	{
		r=JSFX.RolloverObjects[i];
		r.src=r.img_src;
	}
}
JSFX.Rollover.error = function(n)
{
		alert("JSFX.Rollover - An Error has been detected\n"
			+ "----------------------------------\n"
			+ "You must define a JSFX.Rollover in your document\n"
			+ "JSFX.Rollover(\""+n+"\",\"your_on_img.gif\")\n"
			+ "(check the spelling of your JSFX.Rollovers)");
}
/*******************************************************************
*
* Function    : getImg
*
* Description : In Netscape 4 images could be in layers so we might
*		    have to recurse the layers to find the image
*
*****************************************************************/
JSFX.getImg = function(n, d) 
{
	var img = d.images[n];
	if(!img && d.layers)  
		for(var i=0 ; !img && i<d.layers.length ; i++)
			img=JSFX.getImg(n,d.layers[i].document);
	return img;
}
/*******************************************************************
*
* Function    : findImg
*
* Description : gets the image from the document and reports an
*		    error if it cannot find it.
*
*****************************************************************/
JSFX.findImg = function(n, d) 
{
	var img = JSFX.getImg(n, d);

	/*** Stop emails because the image was named incorrectly ***/
	if(!img)
	{
		alert("JSFX.findImg - An Error has been detected\n"
			+ "----------------------------------\n"
			+ "You must define an image in your document\n"
			+ "<IMG SRC=\"your_image.ext\" NAME=\""+n+"\">\n"
			+ "(check the NAME= attribute of your images)");

		return(new Image());
	}
	return img;
}

JSFX.ImageFadeRunning=false;
JSFX.ImageFadeInterval=30;

/*******************************************************************
*
* Function    : imgFadeIn
*
* Description : This function is based on the turn_on() function
*		      of animate2.js (animated rollovers from [url]www.roy.whittle.com[/url]).
*		      Each image object is given a state. 
*			OnMouseOver the state is switched depending on the current state.
*			Current state -> Switch to
*			===========================
*			null		->	OFF.
*			OFF		->	FADE_IN
*			FADE_OUT	->	FADE_IN
*			FADE_OUT	->	FADE_OUT_IN (if the new image is different)
*			FADE_IN_OUT->	FADE_IN (if the image is the same)
*****************************************************************/
JSFX.imgFadeIn = function(img, imgSrc)
{
	if(img) 
	{
		if(img.state == null) 
		{
			img.state = "OFF";
			img.index = 0;
			img.next_on    = null;
		}

		if(img.state == "OFF")
		{
			/*** Vers 1.7 only load the ON image once ever ***/
			if(img.src.indexOf(imgSrc) == -1)
				img.src=imgSrc;

			img.currSrc = imgSrc;
			img.state = "FADE_IN";
			JSFX.startFading();
		}
		else if( img.state == "FADE_IN_OUT"
			|| img.state == "FADE_OUT_IN"
			|| img.state == "FADE_OUT")
		{
			if(img.currSrc == imgSrc)
				img.state = "FADE_IN";
			else
			{

				img.next_on = imgSrc;
				img.state="FADE_OUT_IN";
			}
		}
	}
}
/*******************************************************************
*
* Function    : imgFadeOut
*
* Description : This function is based on the turn_off function
*		      of animate2.js (animated rollovers from [url]www.roy.whittle.com[/url]).
*		      Each image object is given a state. 
*			OnMouseOut the state is switched depending on the current state.
*			Current state -> Switch to
*			===========================
*			ON		->	FADE_OUT.
*			FADE_IN	->	FADE_IN_OUT.
*			FADE_OUT_IN	->	FADE_IN. (after swapping to the next image)
*****************************************************************/
JSFX.imgFadeOut = function(img)
{
	if(img)
	{
		if(img.state=="ON")
		{
			img.state="FADE_OUT";
			JSFX.startFading();
		}
		else if(img.state == "FADE_IN")
		{
			img.state="FADE_IN_OUT";
		}
		else if(img.state=="FADE_OUT_IN")
		{
			img.next_on == null;
			img.state = "FADE_OUT";
		}
	}
}
/*******************************************************************
*
* Function    : startFading
*
* Description : This function is based on the start_animating() function
*	        	of animate2.js (animated rollovers from [url]www.roy.whittle.com[/url]).
*			If the timer is not currently running, it is started.
*			Only 1 timer is used for all objects
*****************************************************************/
JSFX.startFading = function()
{
	if(!JSFX.ImageFadeRunning)
		JSFX.ImageFadeAnimation();
}

/*******************************************************************
*
* Function    : ImageFadeAnimation
*
* Description : This function is based on the Animate function
*		    of animate2.js (animated rollovers from [url]www.roy.whittle.com[/url]).
*		    Each image object has a state. This function
*		    modifies each object and (possibly) changes its state.
*****************************************************************/
JSFX.ImageFadeAnimation = function()
{
	JSFX.ImageFadeRunning = false;
	for(i=0 ; i<document.images.length ; i++)
	{
		var img = document.images[i];
		if(img.state)
		{
			if(img.state == "FADE_IN")
			{
				img.index+=FadeInStep;

				if(img.index > 100)
					img.index = 100;

				if(img.filters)
					img.filters.alpha.opacity = img.index;
				else
					img.style.MozOpacity = img.index/101;

				if(img.index == 100)
					img.state="ON";
				else
					JSFX.ImageFadeRunning = true;
			}
			else if(img.state == "FADE_IN_OUT")
			{
				img.index+=FadeInStep;
				if(img.index > 100)
					img.index = 100;

				if(img.filters)
					img.filters.alpha.opacity = img.index;
				else 
					img.style.MozOpacity = img.index/101;

	
				if(img.index == 100)
					img.state="FADE_OUT";

				JSFX.ImageFadeRunning = true;
			}
			else if(img.state == "FADE_OUT")
			{
				img.index-=FadeOutStep;
				if(img.index < 0)
					img.index = 0;

				if(img.filters)
					img.filters.alpha.opacity = img.index;
				else
					img.style.MozOpacity = img.index/101;


				if(img.index == 0)
					img.state="OFF";
				else
					JSFX.ImageFadeRunning = true;
			}
			else if(img.state == "FADE_OUT_IN")
			{
				img.index-=FadeOutStep;
				if(img.index < 0)
					img.index = 0;

				if(img.filters)
					img.filters.alpha.opacity = img.index;
				else
					img.style.MozOpacity = img.index/101;

				if(img.index == 0)
				{
					img.src = img.next_on;
					img.currSrc = img.next_on;
					img.state="FADE_IN";
				}
				JSFX.ImageFadeRunning = true;
			}
		}
	}
	/*** Check to see if we need to animate any more frames. ***/
	if(JSFX.ImageFadeRunning)
		setTimeout("JSFX.ImageFadeAnimation()", JSFX.ImageFadeInterval);
}
/*******************************************************************


очень расчитываю на ваши богатые знания !!!

BackOrifice 23.10.2008 01:07

ВОТ ВТОРАЯ ЧАСТЬ СКРИПТА !!!

* Function    : hasOpacity
*
* Description : Tests if the browser allows Opacity
*
*****************************************************************/
JSFX.hasOpacity = function(obj)
{
	if(document.layers)
		return false;

	if(window.opera)
		return false;

	if(navigator.userAgent.toLowerCase().indexOf("mac") != -1)
		return false;

	return true;
}
/*******************************************************************
*
* Function    : fadeIn /fadeOut
*
* Description : Detects browser that can do opacity and fades the images
*		    For browsers that do not support opacity it just does an image swap.
*		    (I only know about NS4 but maybe IE on a Mac also ?)
*		    For these functions to work you need to name the image
*			e.g. for an image named "home" you need
*			<IMG .... NAME="home">
*		    and you need 2 images, the on and the off image
*****************************************************************/
JSFX.fadeIn = function(imgName, rollName)
{
	if(rollName == null)
		rollName=imgName;

	/*** Stop emails because the rollover was named incorrectly ***/
	if(!JSFX.RolloverObjects[rollName])
	{
		JSFX.Rollover.error(rollName);
		return;
	}

	var img = JSFX.findImg(imgName, document);
	if(JSFX.hasOpacity(img))
		JSFX.imgFadeIn(img, JSFX.RolloverObjects[rollName].img_src);
	else
	{
		if(img.offSrc==null)
			img.offSrc=img.src;
		img.src=JSFX.RolloverObjects[rollName].img_src;
	}
}
JSFX.fadeOut = function(imgName)
{
	var img = JSFX.findImg(imgName, document);
	if(JSFX.hasOpacity(img))
		JSFX.imgFadeOut(img);
	else
		img.src=img.offSrc;
}
/*******************************************************************
*
* Function    : imgOn /imgOff
*
* Description : Included these functions so you can mix simple and
*		    fading rollovers without having to include 2 ".js" files
*
*****************************************************************/
JSFX.imgOn = function(imgName, rollName)
{
	if(rollName == null)
		rollName=imgName;

	/*** Stop emails because the rollover was named incorrectly ***/
	if(!JSFX.RolloverObjects[rollName])
	{
		JSFX.Rollover.error(rollName);
		return;
	}
	var img = JSFX.findImg(imgName,document);
	if(img.offSrc==null)
		img.offSrc=img.src;
	img.src=JSFX.RolloverObjects[rollName].img_src;
}
JSFX.imgOff = function(imgName)
{
	var img = JSFX.findImg(imgName,document);
	img.src=img.offSrc;
}


/*************************************************************************/
/* Sort out bandwidth stealers */
/*************************************************************************/

Gvozd 23.10.2008 01:28

Нет, блин, ну вы издеваетесь!
370 строк морально устаревшего кода,и это еще разбирать?!
хоть бы выложили в нормальном виде.
для кодов такого следует выкладывать архив с ХТМЛ-страницей, и набором рисунков.
а уже если выложили в виде поста, то хотя бы в бебе-кот оформили бы!
дайте мне банхаммер чтоли?
ЗЫ так как из-за растройства мне даже туполень разобратся как он подключается к своему скрипту,я решил накатать ЭТО
<img onmousemove="this.src='img_2.jpg'" onmouseout="this.src='img_1.jpg'" src="img_1.jpg"  />

никто вам такое ... старье разгребать не станет

Octane 23.10.2008 03:28

Мдаа скрипт 2001 года :-) хотя даже document.write всего один раз используется :D
Что хоть не работает? Прозрачность наверное?
Вместо
img.style.MozOpacity

напишите
img.style.opacity

Если не поможет, лучше выкиньте этот скрипт сосем.
Пример скрипта, плавно изменяющего прозрачность, есть здесь, осталось только дописать смену изображения. Пробуйте, если не получится, задавайте вопросы…

BackOrifice 23.10.2008 08:45

ПОЖАЛУСТО ИЗВИНИТЕ МЕНЯ ЗА ТО ЧТО Я ТАК ПОХАБНО ОФОРМИЛ ВОПРОС !!!!
ОШИБКА СКРИПТА : В ОПЕРЕ КОГДА Я НАВАЖУ КУРСОР НА ФОТКУ ОНА НЕ МЕНЯЕТСЯ. В ФАЕРФОКСЕ И В ИЕ ВСЁ НОРМ.
ЕСЛЕ ВАМ ТЯЖЕЛО КОЛУПАТЬСЯ В ЭТОМ СТАРОМСКРИПТЕ ТО МОЖЕТ ДАДИТЕ КТОТО АНАЛОГИЧНЫЙ СКРИПТ ТОЛЬКО НОВЫЙ-РАБОЧИЙ СКРИПТ.

SunnyDay 23.10.2008 13:44

BackOrifice,
тебе уже дал Gvozd, рабочий скрипт)

BackOrifice 23.10.2008 15:13

Я полный ноль ((((
Значит сверху я вылаживал код джава скрипта fading.js

А вот сам код index.php может ктото обьяснит что там нетак !!!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.backorifice.skynet.kherson.ua">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Lineage Gracia Server Kill-Zone</title>
<link href="skins/index/lineagelive.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="http://backorifice/mw/skins/index/js/menuFX.js"></script>
<script type="text/javascript" src="http://backorifice/mw/skins/index/js/fading.js"></script>
<script type="text/javascript">
FadeInStep=20;
FadeOutStep=20;
	JSFX.Rollover("home",     "skins/index/images/menu_home_on.gif");
	JSFX.Rollover("news",     "skins/index/images/menu_news_on.gif");
	JSFX.Rollover("rules",    "skins/index/images/menu_rules_on.gif");
	JSFX.Rollover("forum",   "skins/index/images/menu_forum_on.gif");
	JSFX.Rollover("files",  "skins/index/images/menu_files_on.gif");
	JSFX.Rollover("db",  "skins/index/images/menu_db_on.gif");
	JSFX.Rollover("donate",   "skins/index/images/menu_donate_on.gif");
	JSFX.Rollover("top10",  "skins/index/images/menu_top10_on.gif");
	JSFX.Rollover("register",  "skins/index/images/menu_register_on.gif");
	JSFX.Rollover("tourn",  "skins/index/images/smenu-tourn-on.gif");
	JSFX.Rollover("event",  "skins/index/images/smenu-event-on.gif");
	JSFX.Rollover("update",  "skins/index/images/smenu-update-on.gif");
	JSFX.Rollover("articles",  "skins/index/images/smenu-articles-on.gif");
	JSFX.Rollover("media",  "skins/index/images/smenu-media-on.gif");
</script>
</head>
<body>
<table cellpadding="0" cellspacing="0" border="0" width="100%">

<!-- Header -->
<tr>
<td colspan="3" valign="top" align="center">
<div class="head-m"><div class="head-l"><div class="head-r">
</div></div></div>
</td>
</tr>
<!-- Header end -->


<!-- main table -->
<tr>
<td style="background: #152733; border-right: 1px solid #45525d; width: 194px;" align="left" valign="top">

<!-- menu -->
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td style="background: url(skins/index/images/menu_home.gif)"><a sp_eventwasset="on" href="index.php?id=start" onmouseover="JSFX.fadeIn('home')" onmouseout="JSFX.fadeOut('home')"><img style="opacity: 0;" src="skins/index/images/menu_home_on.gif" alt="Главная" name="home" class="imgFader" border="0" height="36" width="193" /></a></td>
</tr>
<tr>
<td style="background: url(skins/index/images/menu_news.gif)"><a sp_eventwasset="on" href="index.php?id=news" onmouseover="JSFX.fadeIn('news')" onmouseout="JSFX.fadeOut('news')"><img style="opacity: 0;" src="skins/index/images/menu_news_on.gif" alt="Новости" name="news" class="imgFader" border="0" height="36" width="193" /></a></td>
</tr>
<tr>
<td style="background: url(skins/index/images/menu_rules.gif)"><a sp_eventwasset="on" href="index.php?id=prav" onmouseover="JSFX.fadeIn('rules')" onmouseout="JSFX.fadeOut('rules')"><img style="opacity: 0;" src="skins/index/images/menu_rules_on.gif" alt="Правила" name="rules" class="imgFader" border="0" height="36" width="193" /></a></td>
</tr>
<tr>
<td style="background: url(skins/index/images/menu_forum.gif)"><a sp_eventwasset="on" href="forum.Lineage ][ Server/default.htm" onmouseover="JSFX.fadeIn('forum')" onmouseout="JSFX.fadeOut('forum')"><img style="opacity: 0;" src="skins/index/images/menu_forum_on.gif" alt="Форум" name="forum" class="imgFader" border="0" height="36" width="193" /></a></td>
</tr>
<tr>
<td style="background: url(skins/index/images/menu_files.gif)"><a sp_eventwasset="on" href="index.php?id=dovnload" onmouseover="JSFX.fadeIn('files')" onmouseout="JSFX.fadeOut('files')"><img style="opacity: 0;" src="skins/index/images/menu_files_on.gif" alt="Файлы" name="files" class="imgFader" border="0" height="36" width="193" /></a></td>
</tr>
<tr>
<td style="background: url(skins/index/images/menu_top10.gif)"><a sp_eventwasset="on" href="index.php?id=stat" onmouseover="JSFX.fadeIn('top10')" onmouseout="JSFX.fadeOut('top10')"><img style="opacity: 0;" src="skins/index/images/menu_top10_on.gif" alt="Топ 10" name="top10" class="imgFader" border="0" height="36" width="193" /></a></td>
</tr>
<tr>
<td style="background: url(skins/index/images/menu_register.gif)"><a sp_eventwasset="on" href="index.php?id=register" onmouseover="JSFX.fadeIn('register')" onmouseout="JSFX.fadeOut('register')"><img style="opacity: 0;" src="skins/index/images/menu_register_on.gif" alt="Регистрация" name="register" class="imgFader" border="0" height="36" width="193" /></a></td>
</tr>
</table>
<!-- menu end -->
<br />


пожалусто сделайте так чтобы этот ужас заработал 8"(

BackOrifice 23.10.2008 18:26

Я прописал скрипт от Gvozd !!! Он рабочий всё ок. Но мне нужно привести в порядок свой скрипт.Мой будет поприкольней.В моём скрипте при наводе курсора на картинку она меняется плавно.Есле быстро провести курсором по картинкам то получается какбы флеш.А так как я исползую этот скрипт для картинок в меню , то получается очень красиво.

Андрей Параничев 23.10.2008 21:36

Попробуйте убрать строчку
if(window.opera)
        return false;


Последние версии opera поддерживают filter: opacity.

BackOrifice 23.10.2008 22:32

(((

Убрал непомогло


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