הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [שאלה -Javascript] מה לא תקין בקוד הרנדומלי? (https://hosts.co.il/forums/showthread.php?t=20071)

Homie 17-04-06 17:15

[שאלה -Javascript] מה לא תקין בקוד הרנדומלי?
 
שלום לכל המשתמשים היקרים,

לפני דקות ספורות יצרתי לי סקריפט שמציג לוגו רנדומלי.

אבל למרות זאת, הוא אינו מציג את הלוגו כראוי.

הקוד:
HTML קוד:

var logo = new Array()

logo[1] = '/style/logos/logo1.swf'
logo[2] = '/style/logos/logo2.swf'
logo[3] = '/style/logos/logo3.swf'
logo[4] = '/style/logos/logo4.swf'

var j = 0
var p = logo.length;

var preBuffer = new Array()
for (i = 0; i < p; i++){
  preBuffer[i] = new Image()
  preBuffer[i].src = logo[i]
}

var whichLogo = Math.round(Math.random()*(p-1));
function showLogo(){
document.write('<object classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" id="obj1" ');
document.write('codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" ');
document.write('border="0" width="780" height="161">
');
document.write('"<param name="movie" value="+logo[whichLogo]+">');
document.write('<param name="quality" value="High">');
document.write('<embed src="+logo[whichLogo]+" ');
document.write('pluginspage="http://www.macromedia.com/go/getflashplayer" ');
document.write('type="application/x-shockwave-flash" name="obj1" width="780" ');
document.write('height="161" quality="High">
</object>');
}

showLogo();

מה הבעיה פה?

כשהלוגו מוצג, רואים רק לבן, וכתוב Movie not loaded, מה לא נטען? אני גם ניסיתי קישור מלא.

תודה מראש, אלי.

(חזרתי :) מהטיול)

עריכה: ניסיתי ככה:
HTML קוד:

var Logo = new Array()

Logo[1] = "/style/logos/logo1.swf";
Logo[2] = "/style/logos/logo2.swf";
Logo[3] = "/style/logos/logo3.swf";
Logo[4] = "/style/logos/logo4.swf";

var L = Logo.length;
var whichLogo = Math.round(Math.random()*(L-1));
function showLogo(){
document.write('<object classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" id="obj1" ');
document.write('codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" ');
document.write('border="0" width="780" height="161">
');
document.write('"<param name="movie" value="+Logo[whichLogo]+">');
document.write('<param name="quality" value="High">');
document.write('<embed src="+Logo[whichLogo]+" ');
document.write('pluginspage="http://www.macromedia.com/go/getflashplayer" ');
document.write('type="application/x-shockwave-flash" name="obj1" width="780" ');
document.write('height="161" quality="High">
</object>');
}

showLogo();

וגם לא עובד, אין שגיאת JS, אבל הלוגו לא מוצג, רואים רק לבן..:(

תודה מראש.

BlueNosE 17-04-06 21:55

HTML קוד:

document.write('"<param name="movie" value="+Logo[whichLogo]+">');
איפה מצויין המשתנה Logo['whichLogo']?
זה whichLogo ולא מערך במשתנה Logo...

אותה טעות גם בקוד הראשון.

עריכה:
אני חושב שהבנתי.
אתה רוצה לקרוא ללוגו שהמפתח שלו הוא whichLogo..
אממ.. תנסה להפוך את whichLogo לקטע במערך עצמו.. זאת אומרת להפוך אותו לLogo לעשות השמה לתוך whichLogo

Homie 17-04-06 23:00

ציטוט:

נכתב במקור על ידי BlueNosE
HTML קוד:

document.write('"<param name="movie" value="+Logo[whichLogo]+">');
איפה מצויין המשתנה Logo['whichLogo']?
זה whichLogo ולא מערך במשתנה Logo...

אותה טעות גם בקוד הראשון.

עריכה:
אני חושב שהבנתי.
אתה רוצה לקרוא ללוגו שהמפתח שלו הוא whichLogo..
אממ.. תנסה להפוך את whichLogo לקטע במערך עצמו.. זאת אומרת להפוך אותו לLogo לעשות השמה לתוך whichLogo

הבנתי, אבל זה עדיין לא מערך במשתנה.

עומר, יש לך מושג איך לתקן את זה? זה קצת דחוף.

תודה מראש.

MasterNir 18-04-06 00:52

קוד:

var whichLogo = Math.round(Math.random()*(L-1));
אמור להיות חילוק, לא כפל...
ככה:
קוד:

var whichLogo = Math.round(Math.random()/(L-1));
היגיון, יש לך מספר לא ידוע (random), נסמן ב-y, ואתה רוצה שייכנס לטווח בין 0 ל-X... אם תכפיל את y (בהנחה שהוא שלם וחיובי [במילים אחרות גדול מ-1]) ב-x תקבל תוצאה הגדולה מ-x ומ-y.
אתה צריך לחלק, רמז לכך יכול להיות round שמטרתה לעגל (כפל של שני מספרים שלמים יתן שלם, חילוק לעומת זאת יכול להחזיר מספר עשרוני) ולמעשה במקרה של כפל הפונקציה מיותרת, בעוד שבמקרה של חילוק היא נחוצה.

Homie 18-04-06 06:46

ציטוט:

נכתב במקור על ידי MasterNir
קוד:

var whichLogo = Math.round(Math.random()*(L-1));
אמור להיות חילוק, לא כפל...
ככה:
קוד:

var whichLogo = Math.round(Math.random()/(L-1));
היגיון, יש לך מספר לא ידוע (random), נסמן ב-y, ואתה רוצה שייכנס לטווח בין 0 ל-X... אם תכפיל את y (בהנחה שהוא שלם וחיובי [במילים אחרות גדול מ-1]) ב-x תקבל תוצאה הגדולה מ-x ומ-y.
אתה צריך לחלק, רמז לכך יכול להיות round שמטרתה לעגל (כפל של שני מספרים שלמים יתן שלם, חילוק לעומת זאת יכול להחזיר מספר עשרוני) ולמעשה במקרה של כפל הפונקציה מיותרת, בעוד שבמקרה של חילוק היא נחוצה.

לא עובד :(

תוכל בבקשה להביא לי את הקוד כולו מתוקן.

והבנתי מה הבעיה פחות היותר, הוא לא לוקח את ה-+Logo[whichLogo]+

יעני בדקתי במקור של העמוד HTML, ואני רואה שהוא קורא לשם של הקובץ:
HTML קוד:

+Logo[whichLogo]+.swf

MasterNir 18-04-06 14:31

אה, לא שמתי לב לזה קודם... אתה אמור להוסיף ' לפני הפלוס הראשון ואחרי הפלוס השני, לשרשר את המשתנה של הלוגו לשני מחרוזות (לפניו ואחריו).

לדוגמה את השורה הזאת:
HTML קוד:

document.write('"<param name="movie" value="+Logo[whichLogo]+">');
אתה אמור לשנות שתראה ככה:
HTML קוד:

document.write('"<param name="movie" value=" ' +Logo[whichLogo]+ ' ">');
בהצלחה

Homie 18-04-06 17:12

ציטוט:

נכתב במקור על ידי MasterNir
אה, לא שמתי לב לזה קודם... אתה אמור להוסיף ' לפני הפלוס הראשון ואחרי הפלוס השני, לשרשר את המשתנה של הלוגו לשני מחרוזות (לפניו ואחריו).

לדוגמה את השורה הזאת:
HTML קוד:

document.write('"<param name="movie" value="+Logo[whichLogo]+">');
אתה אמור לשנות שתראה ככה:
HTML קוד:

document.write('"<param name="movie" value=" ' +Logo[whichLogo]+ ' ">');
בהצלחה

שוב לא מציג את הלוגו,

הוא שינה את שם הלוגו ל-undefined.

....

MasterNir 18-04-06 18:05

תעשה document.write ל-whichLogo ותכתוב מה התוצאה...

BlueNosE 18-04-06 18:20

וואלה שמתי לב למשהו לא בסדר בשורה ולא הבנתי מה אז חשבתי שזה הקריאה למשתנה..
חח
אממ, אני לא ממש מבין.
HTML קוד:

var whichLogo = Math.round(Math.random() / (L-1));
נניח שקיבלנו את המספר.. 63.
L שווה ל4. L-1 שווה ל3.
אוקיי, מבצע:
63 / 3
נותן 21.
כלומר יקרא לLogo[21].
לא נדמה לי שקיים..
עדיף כבר לעשות פונקצייה רנדומלית שבוחרת מספרים בטווח של בין 0 ל3..
לא זוכר אותה כרגע מצטער אני יכול לחפש באיציק1 (סט אפ.. שכחתי.. S: )


כל הזמנים הם GMT +2. הזמן כעת הוא 04:07.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ