چطور كاري كنم كه وقتي موس روي آيكني ميره از سمت چپ موس منو باز بشه؟

اولا بگم من تو جاوا اسكريپت خيلي تازه كارم در واقع تا امروز كار نكرده بودم !!!
مشكل من اينه كه ميخوام وقتي موس رو روي جايي يا ايكني ميبرم به جاي باز شدن جاوا اسكريپت ها به سمت راست موس جاوا ها به سمت چپ موس باز بشن
به عنوان مثال تو همين سايت در اديتور روي يكي از ايكن ها موس رو نگ داريد به سمت راستش باز ميشه من ميخوام به سمت چپ باز بشه
البته من اين رو خودم در فایلی که میخواستم تغيير دادم:
کد:
document.getElementById(layer).style.left= x;
		document.getElementById(layer).style.left = x + 'px';
و من این رو left ها رو right کردم و شد این:

کد:
document.getElementById(layer).style.right = x;
		document.getElementById(layer).style.right = x + 'px';
ولی فقط در مرورگر firefox کار میکنه و در IE کار نمیکنه و بازم به سما راست موس باز میشه
من راهنمایی کلی و کد میخوام اگه لازمه بگید تا همه فایل رو هم بزارم
ممنون
 

mazoolagh

Active Member
فكر ميكنم منظور شما همان tootip هست كه وقتي موس روي يك عنصر صفحه (يعني فقط براي تصويرنيست) قرار ميگيره يك textbox ظاهر ميشه.
اگر در طراحي عنصر از خاصيت title يا alt استفاده شده باشه كه فكر نميكنم بشه جاشو تعيين كرد (شايد هم بشه ولي من راهشو نميدونم)
ولي شما ميتوني خودت هر كاري رو با onmouseover انجام بدي و از جمله ميتوني اون textbox يا حتي يك عكس ديگه رو هر جاي صفحه كه خواستي نمايش بدي
 
سلام دوست عزيز من تا اينجاش رو که ميدونم
ولي همون دستکاري توي onmouseover رو ميخوام ببينم براي IE چيه چون توي mozilla firefox داره قشنگ کار ميکنه ولي تو َآي اي نه
لعنت به IE و مايکروسافت اميدوارم تا چند سال ديگه نسلشون منقرض بشه
شما يه ايميج اينجا بزار و کاري کن که از سمت راست به چپ باز بشه توضيحش بعد اگه شد کدش رو بزار من بيام وردارم
ببين ته پر روام من
:lol:
 

mazoolagh

Active Member
آقا شما بيخود عصباني نشو - خيالت راحت باشه كه نه مايكروسافت منقرض ميشه نه نرم افزارهاي open source و رايگان فراگير ميشه - اونهايي كه پول دادن فحش نميدن فعلا ما كه به هيچ كدومشون پول نداديم - بگذريم

يك زحمت بكش همون كد كامل صفحه رو بذار يك نگاهي بكنم بهت بگم چكارش كني
اولين فرصت هم يك نمونه كد استاندارد(يعني مستقل از مرورگر) ميذارم فقط شما يا بقيه دوستان كه اينجا سر ميزنن زحمت بكشين روي هر مرورگري كه دارين تستش كنين و نتيجه رو هم اينجا بنويسين كه خيرش به همه برسه
 
دوست عزيز بر خلاف نظر شما به نظر من تا چند سال ديگه open source کاملا غالب خواهد شد و نرم افزار ها و برنامه هايي نظير ويندوز و IE کنار خواهند رفت
همين الان در دنياي حرفه اي ها و سرور ها لينوکس و بروزر هاي اوپن سورس غالب هستند.
البته جديدا ويندوز داره سعي ميکنه که با دادن SP2 و ارايه ويندوز ارزان قيمت و اين جور مسايل خودش رو برسونه ولي من بعيد ميدونم که بتونه مقابله کنه
در مورد اينکه گفتيد مجاني استفاده ميکنيم بايد بگم کلا فلسفه اوپن سورس اينه که همه بايد در زمينه کار اوپن سورس به هم کمک کنن حالا از جواب دادن به سوال و اشتراک اطلاعات گرفته تا برنامه نويسي و غيره و خود من هم سعي ميکنم همين کار رو بکنم و علت برتري اوپن سورس هم همينه توجه کنيد که تازه 4 سال از به وجود اومدن برنامه هاي اوپن سورس گذشته در نتيجه صبر کنيد در آينده نتيجه رو ببينيد

اينم کد اصلي فايل من :
کد:
// PHP Layers Menu 1.0.7 (c) 2001, 2002 Marco Pratesi <[email protected]>

DOM = (document.getElementById) ? 1 : 0;
NS4 = (document.layers) ? 1 : 0;
IE4 = (document.all) ? 1 : 0;
var loaded = 0;	// to avoid stupid errors of Microsoft browsers
Konqueror = (navigator.userAgent.indexOf("Konqueror") > -1) ? 1 : 0;
// We need to explicitly detect Konqueror
// because Konqueror 3 sets IE4 = 1 ... AAAAAAAAAARGHHH!!!
Opera5 = (navigator.userAgent.indexOf("Opera 5") > -1 || navigator.userAgent.indexOf("Opera/5") > -1 || navigator.userAgent.indexOf("Opera 6") > -1 || navigator.userAgent.indexOf("Opera/6") > -1) ? 1 : 0;

// it works with NS4, Mozilla, NS6, Opera 5 and 6, IE
currentY = -1;
function grabMouse(e) {
	if ((DOM && !IE4) || Opera5) {
		currentY = e.clientY;
	} else if (NS4) {
		currentY = e.pageY;
	} else {
		currentY = event.y;
	}
	if (DOM && !IE4 && !Opera5 && !Konqueror) {
		currentY += window.pageYOffset;
	} else if (IE4 && DOM && !Opera5 && !Konqueror) {
		currentY += document.body.scrollTop;
	}
}
if ((DOM || NS4) && !IE4) {
	document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE);
}
document.onmousemove = grabMouse;

function popUp(menuName,on) {
	if (loaded) {	// to avoid stupid errors of Microsoft browsers
		if (on) {
//			moveLayers();
			if (DOM) {
				document.getElementById(menuName).style.visibility = "visible";
				document.getElementById(menuName).style.zIndex = 1000;
			} else if (NS4) {
				document.layers[menuName].visibility = "show";
				document.layers[menuName].zIndex = 1000;
			} else {
				document.all[menuName].style.visibility = "visible";
				document.all[menuName].style.zIndex = 1000;
			}
		} else {
			if (DOM) {
				document.getElementById(menuName).style.visibility = "hidden";
			} else if (NS4) {
				document.layers[menuName].visibility = "hide";
			} else {
				document.all[menuName].style.visibility = "hidden";
			}
		}
	}
}

function setleft(layer,x) {
	if (DOM) {
		document.getElementById(layer).style.left = x;
		document.getElementById(layer).style.left = x + 'px';
	} else if (NS4) {
		document.layers[layer].left = x;
	} else {
		document.all[layer].style.pixelLeft = x;
	}
}

function settop(layer,y) {
	if (DOM) {
		document.getElementById(layer).style.top = y;
		document.getElementById(layer).style.top = y + 'px';
	} else if (NS4) {
		document.layers[layer].top = y;
	} else {
		document.all[layer].style.pixelTop = y;
	}
}

function setwidth(layer,w) {
	if (DOM) {
		document.getElementById(layer).style.width = w;
		document.getElementById(layer).style.width = w + 'px';
	} else if (NS4) {
//		document.layers[layer].width = w;
	} else {
		document.all[layer].style.pixelWidth = w;
	}
}

function moveLayerY(menuName, ordinata, e) {
	if (loaded) {	
	// to avoid stupid errors of Microsoft browsers
	//alert (ordinata);
	// Konqueror: ordinata = -1 according to the initialization currentY = -1
	// Opera: isNaN(ordinata), currentY is NaN, it seems that Opera ignores the initialization currentY = -1
		if (ordinata != -1 && !isNaN(ordinata)) {	// The browser has detected the mouse position
			if (DOM) {
				// attenzione a "px" !!!
				if (e && e.clientY) { // just use the pos of the mouseOver event if we have it
					document.getElementById(menuName).style.top = e.clientY + 'px';
				} else {
					appoggio = parseInt(document.getElementById(menuName).style.top);
					if (isNaN(appoggio)) appoggio = 0;
					if (Math.abs(appoggio + ordinata_margin - ordinata) > thresholdY)
						document.getElementById(menuName).style.top = (ordinata - ordinata_margin) + 'px';
				}

			} else if (NS4) {
					if (Math.abs(document.layers[menuName].top + ordinata_margin - ordinata) > thresholdY)
						document.layers[menuName].top = ordinata - ordinata_margin;
			} else {
				if (Math.abs(document.all[menuName].style.pixelTop + ordinata_margin - ordinata) > thresholdY)
					document.all[menuName].style.pixelTop = ordinata - ordinata_margin;
			}
		}
	}
}

که من اون خط ها رو که بالا نوشتم تغيير دادم
ممنون
 

mazoolagh

Active Member
بذار اين بحث رو بعدا يك جاي ديگه ادامه بديم - فعلا برگرديم سر سوال شما

اين صفحه رو يك نگاهي بنداز و سورش رو هم ببين -
http://m.1asphost.com/mazoolagh/tooltip.htm
فكر ميكنم اين بايد در هر مرورگري جواب بده - فقط بيزحمت نتيجه رو بگو چي شد
تا وقته من هم يك نگاهي به اين سورس ميندازم
 
اين در موزيلا کار نميکنه حالا
من که چيزي از جاوا سرم نميشه اصلا
گفتم که امروز مجبوري نگاه کردم
تا آخر عمرمم شايد دو سه بار ديگه لازمم بشه
در هر حال من هلو برو تو گلو ميخوام
وگرنه همين که در فاير فاکس کار ميکنه براي من بسه
چون براي قسمت مديريت ميخوام و مدير هم بهتره با فاير فاکس کار کنه
 

mazoolagh

Active Member
در firefox كار ميكنه (تستش كردم) ولي در mozilla هاي ورژن پايين ممكنه كار نكنه
 
بله الان کار میکنه سورسش عوض شده نسبت به دفعه قبل که من دیدم
حالا چجوری میشه این رو روی اون چیزی که من دارم اعمال کرد
منظورم اینه که توی IE شما کجا رو عوض کردی که از راست به چپ شد؟
من توی اون دو خط باید چه خطی رو برای آی ای اضافه کنم
من چیزی بلد نیستم آخه
 

mazoolagh

Active Member
دفعه اول كه شما صفحه رو ديدي براي IE نوشته بودم (چون مشكل شما در IE بود) بعد كه گفتي در firefox كار نميكنه بالكل عوضش كردم تا حالت آموزشي پيدا كنه و درش چند نكته هست كه توضيح ميدم و شما ميتوني ايده رو بكار بگيري و قسمتهاي لازمش رو استفاده كني.

نكته اول اين كه يك قسمت اضافه كردم كه نوع مرورگر بيننده رو مشخص ميكنه (البته در client site چون يك صفحه html ساده هست و نه asp-aspx-php) زبان رو هم از vbscript به javascript تغيير دادم چون مرورگرهاي خانواده netscape نميدونم به چه دليل احمقانه اي از vbscript پشتيباني نميكنن - در حاليكه IE در باز كردن هيچ صفحه اي مشكل نداره (دوستان لطفا اينجا بحث و دعوا در اين مورد راه نندازين كه كدوم بهتره!)

کد:
function browser_type(){

if(navigator.appName.indexOf("Microsoft") >= 0){
	return("IE") ;
	}

if(navigator.appName.indexOf("Netscape") >= 0){
   	return("NS") ;
    }
}
از اين تابع براي نحوه reference به عناصر صفحه استفاده كردم چون IE و NS از متدهاي مختلفي براي مشخص كردن يك عنصر صفحه استفاده ميكنن.

مثال براي IE
کد:
window.tt2.style.visibility="visible" ;

مثال براي NS
کد:
document.all.tt2.style.visibility="visible" ;

بعدش هم براي اينكه نحوه محاسبه رو نشون بدم اين انتخاب رو كه tooltip كجا نمايش داده بشه و چه متني داشته باشه رو هم اضافه كردم. بهر حال كد خيلي ساده اي هست و شما ميتوني فقط از همون قسمت كه لازم داري استفاده كني

ضمنا روي opera 7.54 هم تست كردم با اون هم درست نشون ميده.
 
ببین من میدونم آی ای تو اون خط if به همون DOM فایر فاکس و اپرا هم به همون جا میان ولی عمل نمیکنه برای اون دو تا
مثلا من برای عوض کردن جای باز شده از سمت چپ به راست یه خط اینجا اضافه کردم :
کد:
if (DOM) {
            // attenzione a "px" !!!
            if (e && e.clientY) { // just use the pos of the mouseOver event if we have it
               document.getElementById(menuName).style.top = e.clientY + 'px';
            }

و شد این:
کد:
if (DOM) {
            // attenzione a "px" !!!
            if (e && e.clientY) { // just use the pos of the mouseOver event if we have it
               document.getElementById(menuName).style.top = e.clientY + 'px';

[color=red]               document.getElementById(menuName).style.top = e.clientX + 'px';
 [/color]
            }

و این در هر سه بروزر کار میکنه
ولی درست در تابع بالاییش getelementById(layers) کار نمیکنه با دو بروزر دیگه به نظر من که چیز عجیبیه
 

mazoolagh

Active Member
فكر ميكنم به اسامي layer و layers حساس هست. براي اسم متغيرها و عناصر چيزهاي ديگه بذار
 

جدیدترین ارسال ها

بالا