Hirdetés

2024. május 3., péntek

Gyorskeresés

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2014-02-25 10:20:57

LOGOUT.hu

JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)

Összefoglaló kinyitása ▼

Hozzászólások

(#3751) SirRasor válasza Sk8erPeter (#3749) üzenetére


SirRasor
őstag

Na így már világos a dolog; akkor viszont legalább +1 dolog, amihez majd érteni fogok :D

Közben végignéztem/megtanultam az AJAX oktatóanyagot és már működik is, amit meg akartam csinálni :)

Make Love not war!

(#3752) martonx válasza Zedz (#3750) üzenetére


martonx
veterán

Miért akarsz újratöltetni egy szkriptet? :F

Én kérek elnézést!

(#3754) The DJ


The DJ
addikt

Megint jövök a hülye kérdéseimmel :) Van egy weboldal, Wordpress alapú, hangmintákat lehet rajta meghallgatni. Ez a megvásárolt sablon beépített funkciója. Minden működik, a terméklapon van egy gomb, kattintásra elindul a bal oldalsávban található lejátszó és játssza a hanganyagot.

Namármost...azt kellene megoldani, hogy ne kattintásra induljon el a lejátszás, hanem automatikusan a terméklapra érkezve. Tudom, hülye ötlet (nekem is ez volt az első reakcióm), de meg kell valósítani. A lejátszó, amit használnak egy módosított (?) jplayer. Erre már rájöttem. Van is a dokumentációjában szó az autoplay-ről, tehát még támogatja is. De akárhogy próbálom belehackelni nem megy. Megint kiütközik az, hogy se Javascript, se PHP nyelven nem "beszélek". Feltöltöttem pastebin-re az erre vonatkozó pár sort. Valaki lenne olyan kedves és áldozna rám az idejéből pár percet, hogy ránézzen? Köszönöm előre is!

Pastebin: [link]

https://wpszaki.hu - Minden, ami WordPress, cikkek kezdőknek és haladóknak.

(#3755) martonx válasza The DJ (#3754) üzenetére


martonx
veterán

IDézek a dokumentációból:

ready: function() { // The $.jPlayer.event.ready event
$(this).jPlayer("setMedia", { // Set the media
m4v: "m4v/presentation.m4v"
}).jPlayer("play"); // Attempt to auto play the media
},

Én kérek elnézést!

(#3756) The DJ válasza martonx (#3755) üzenetére


The DJ
addikt

Ezt megtaláltam én is, próbálkozom másfél órája egyedül mindenféle módon, de nem sikerült a pastebin-es kódba beleapplikálni a dokumentációban látható részt.

Gondolom ezt a részt kellene szerkesztenem:

// Create click handlers for the different tracks
$(".demo-container .track").click(function(e) {
my_trackName.text($(this).text());
my_jPlayer.jPlayer("setMedia", {
mp3: $(this).attr("href")
});
if((opt_play_first && first_track) || (opt_auto_play && !first_track)) {
my_jPlayer.jPlayer("play");
}
first_track = true;
$(this).blur();
return false;
});

Próbáltam így:

// Create click handlers for the different tracks
$(".demo-container .track").click(function(e) {
my_trackName.text($(this).text());
my_jPlayer.jPlayer("setMedia", {
mp3: $(this).attr("href")
}).jPlayer("play");
if((opt_play_first && first_track)) {
my_jPlayer.jPlayer("play");
}
first_track = true;
$(this).blur();
return false;
});

De semmi. Én ehhez nagyon kevés vagyok sajnos.

https://wpszaki.hu - Minden, ami WordPress, cikkek kezdőknek és haladóknak.

(#3757) Sk8erPeter válasza martonx (#3755) üzenetére


Sk8erPeter
nagyúr

De elméletileg nagyon gyors rákukkantás alapján jónak kéne lennie a pastebines kód alapján, kiemelve a lényeget, közé pontokat téve:

var my_jPlayer = $("#jquery_jplayer"),

....

// Some options
var opt_play_first = true, // If true, will attempt to auto-play the default track on page loads. No effect on mobile devices, like iOS.
opt_auto_play = true, // If true, when a track is selected, it will auto-play.
opt_text_playing = "Now playing", // Text when playing
opt_text_selected = "Track selected"; // Text when not playing

....

// Instance jPlayer
my_jPlayer.jPlayer({
ready: function () {
$(".demo-container .track-default").click();
},
.....
});

$(".demo-container .track").click(function(e) {
...
my_jPlayer.jPlayer("setMedia", {
mp3: $(this).attr("href")
});
if((opt_play_first && first_track) || (opt_auto_play && !first_track)) {
my_jPlayer.jPlayer("play");
}
...
});

Szerk.:

Ja, most, hogy egy kicsit gondolkodtam is, MIUTÁN leírtam mindezt :DDD, rájöttem, hogy ebből f@szság is kisülhet:
$(".demo-container .track-default").click();
azt sem tudjuk, hány elemet tartalmaz ez a .track-default, bár feltételezem, csak egyet.
Na de a franc tudja, hogy ez egyáltalán elindítja-e valóban a lejátszást.
Habár el kéne neki, na jó, nekem ehhez most túlságosan péntek este van. :D

[ Szerkesztve ]

Sk8erPeter

(#3758) Sk8erPeter válasza The DJ (#3756) üzenetére


Sk8erPeter
nagyúr

Na, akkor próbálkozzunk.

Van ez a rész:

ready: function () {
$(".demo-container .track-default").click();
},

ezt cseréld le erre:

ready: function () {
// $(".demo-container .track-default").click();
$(this).jPlayer("setMedia", {
mp3: $('.demo-container .track:first-child').attr("href")
}).jPlayer("play"); // Attempt to auto play the media
},

most ezt csak úgy gyorsan összekalapáltam, szóval nem garantálok semmit, amúgy is csak tesztelés erejéig kéne kipróbálni.

Szerk.:
persze a legjobb lenne élőben látni az oldalt... :)

[ Szerkesztve ]

Sk8erPeter

(#3759) The DJ válasza Sk8erPeter (#3758) üzenetére


The DJ
addikt

Köszönöm!

Kicseréltem, de nincs változás. Ugyanúgy kattintásra indul a sample. Az oldalt is meg tudom mutatni, nem titok. Erről lenne szó: [link] Ez itt épp egy terméklap. A sample gomb ott van a kiskép alatt, arra kattintva indul el a bal oldalon a lejátszó. Az lenne a cél hogy minden terméklap megnyitásakor automatikusan elinduljon ez a sample. Természetesen ebből mindig csak egy darab van.

https://wpszaki.hu - Minden, ami WordPress, cikkek kezdőknek és haladóknak.

(#3760) Sk8erPeter válasza The DJ (#3759) üzenetére


Sk8erPeter
nagyúr

Most egyben sikerült jól elcseszerintened a kódot valami módosítással :D

Pl.:

//]]>
</script>

ehelyett ez kéne, hogy legyen:

//]]>
</script>

(ami zárja a legvégén ezt: //<![CDATA[)

aztán ezt is elcseszerintetted:

$(".demo-container .track")ready: function() {

miért lett ebből ready, és akkor már miért nincs ott előtte egy pont? :)
Egyáltalán ezt minek változtattad? :)

Szóval ezeket javítsd, mert így nehéz tesztelni.

Sk8erPeter

(#3761) The DJ válasza Sk8erPeter (#3760) üzenetére


The DJ
addikt

A CDATA zárót a Wordpress rontja el. A kódban tökéletesen szerepel, bár szerintem ez nem okoz problémát.

A másik tényleg az én próbálkozásom egyik maradványa, azt javítottam (azaz visszatettem az eredetit).

https://wpszaki.hu - Minden, ami WordPress, cikkek kezdőknek és haladóknak.

(#3762) Sk8erPeter válasza The DJ (#3761) üzenetére


Sk8erPeter
nagyúr

"A CDATA zárót a Wordpress rontja el."
Így, hogy elrontja, legalább rávilágít, hogy nem jól csinálod :DDD
Külső JS-fájlba érdemes pakolni az ilyesmit, pluginnel behúzni, stb., nem tudom, mi ennek a szabályos módja WordPress-ben (már beszéltünk a Weblapkészítés topicban a plugin/modul/komponens készítésének előnyeiről a gányolás-tákolás-taknyolás kombó helyett), de az ilyen inline kód amúgy sem gyorsítótárazható a böngésző által, nehézkes karbantartani, és így tovább.

Na, de lépjünk az érdemi részre, most látom, hogy eleve el van rontva a zárójelezés, érdemes ilyenkor para esetén megnyitni a konzolt Ctrl+Shift+I-vel vagy F12-vel, aztán rákattintani a Console fülre, láss csodát, para:

"Uncaught SyntaxError: Unexpected token (
(index):517"

ergo a kimenet 517. sorban van egy zárójelezési para, ha ezt megnézed a source-ban:

if((opt_play_first && first_track)) || (opt_auto_play && !first_track)) {
my_jPlayer.jPlayer("play");
}

itt a zárójel tök káoszos (ez mondjuk egy rendes IDE-ben vagy akár szövegszerkesztőben is látszik, ha a kurzort odateszed, IDE (pl. NetBeans, Eclipse, ilyesmik) még szól is érte), tehát cseréld erre:

if( (opt_play_first && first_track) || (opt_auto_play && !first_track) ) {
my_jPlayer.jPlayer("play");
}

Amúgy ha parád van, és nincs tisztességes IDE kéznél, akkor sokat segít, ha bedobod ide a kódodat:
http://www.jshint.com/
ellát mindenféle tanácsokkal, hogy mit kéne javítanod a kódodon.

Na, a lényeg, alakítsd vissza az eredetire a kódodat teljesen, javítsd ki ezt a zárójelezési parát, aztán jelezz, mire jutottál. :)

[ Szerkesztve ]

Sk8erPeter

(#3763) The DJ válasza Sk8erPeter (#3762) üzenetére


The DJ
addikt

"Külső JS-fájlba érdemes pakolni az ilyesmit, pluginnel behúzni, stb"

Ha tehetem én így csinálom, ez viszont most a sablonkészítők sara. Ez így egy az egyben maga a theme egyik PHP fájljában található. Javascript, PHP, CSS, minden egy helyen. Nem a legelegánsabb, de már nem is annyira izgat, csak működne minden. Jó ideje szenvedek ezzel a honlappal (szívességből ráadásul) és olyan dolgokat csináltam már meg rajta, amikre nem is tudtam, hogy képes vagyok :DDD Viszont ez a Javascriptes autoplay most megint feladta a leckét.

A hiba megint az én figyelmetlenségem. Az egész estét erre szántam rá, de így a végére már alig látok. Mindenesetre javítottam a zárójel problémát is.

A segítséget és a tippeket viszont hálásan köszönöm!

https://wpszaki.hu - Minden, ami WordPress, cikkek kezdőknek és haladóknak.

(#3764) martonx válasza The DJ (#3763) üzenetére


martonx
veterán

"Nem a legelegánsabb" - a létező legkókányabb megoldás.

[ Szerkesztve ]

Én kérek elnézést!

(#3765) Sk8erPeter válasza The DJ (#3763) üzenetére


Sk8erPeter
nagyúr

Eleve nem értem, sablonban mit keres a jPlayer komplett kódja. Abszolút nem sminkelési feladat egy komplett lejátszó működésre bírása, kódjának beillesztése, ilyesmik. A sminkelés körébe az tartozik, hogy maga a jPlayer-lejátszó hogy nézzen ki. Nem maga a működési logika.
Szóval az egybecseszésről oké, hogy nem Te tehetsz, de attól még undormány marad. :P :DDD

Na, de a parára visszatérve most hirtelen nem ugrik be, miért is nem működik, de javítsd már a JavaScriptes parákat előbb, például ezt, az ajax.js fájlodban:

//Add Event Listener to search form
$("#searchform").submit(function(e) {
location.hash = '?s=' + $("#s").val(return str.replace(/\s+/g, '%20'));
e.preventDefault();
});

erre jelez hibát, joggal, mivel a zárójelben nyomatsz egy return-t, aminek semmi értelme.
Miután javítottuk a triviális hibákat, azután tudunk továbbmenni, minden ilyen nagy hiba számíthat.

[ Szerkesztve ]

Sk8erPeter

(#3766) The DJ válasza Sk8erPeter (#3765) üzenetére


The DJ
addikt

Egyre inkább kezdem belátni, hogy ez a sablon egy gány munka. Ráadásul ezért fizetett a tulajdonos. Elvileg jár azonnali support hozzá. Erről meg annyit, hogy a privát fórumban 3 hete feltett kérdésemre azóta sem érkezett egy válasz sem.

Az ajax.js fájlban található hibát javítottam. Viszont ahogy lentebb görgettem megláttam ott is ugyanazt a jplayer kódot, mint amit pastebin-re töltöttem fel a PHP fájlból. :F Akkor lehet azt kellene inkább szerkesztgetni?

https://wpszaki.hu - Minden, ami WordPress, cikkek kezdőknek és haladóknak.

(#3767) Sk8erPeter válasza The DJ (#3766) üzenetére


Sk8erPeter
nagyúr

"Viszont ahogy lentebb görgettem megláttam ott is ugyanazt a jplayer kódot, mint amit pastebin-re töltöttem fel a PHP fájlból. :F Akkor lehet azt kellene inkább szerkesztgetni?"
B@szki... :DDD Hát ha ilyenek vannak, ne csodálkozz, hogy nem műxik a kód. :DDD
Nyilván szedd ki az egyiket, és ja, csak azt módosítsd, az legalább külön fájlban van.
Gondolom már így is bele kellett tákolnod vmelyik fájlba, szóval nem ront a helyzeten. :D
Na, lényeg, hogy csak egy helyen legyen minden ilyen kód, csak egy helyen szerkeszd, és akkor tovább tudunk lépni. Ergo az egész korábbit, amiről dumáltunk, szedd ki, ahogy van. Hagyd meg azt a kódot eredeti formájában, ami van az ajax.js-ben. Ha ez megvan, teszteld le, aztán szólj, mi a pálya.

Sk8erPeter

(#3768) The DJ válasza Sk8erPeter (#3767) üzenetére


The DJ
addikt

Kiszedtem a PHP fájlból a player javascript kódját. Az oldal és a sample hallgatás továbbra is működik, úgyhogy a duplikáció elvileg megszüntetve és így már a JS kód is külön van.

Tehát itt van a lényeg: [link]

https://wpszaki.hu - Minden, ami WordPress, cikkek kezdőknek és haladóknak.

(#3769) Sk8erPeter válasza The DJ (#3768) üzenetére


Sk8erPeter
nagyúr

Na várj, eleve miért kell duplaklikkelni a sample-feliratra, hogy elinduljon a lejátszás?
"Double click on the title to start the sample"
Most nem volt kedvem keresgélni, hogy mitől függ, meg hol van ez beállítva, de ha eleve duplaklikkelni kell a lejátszáshoz, akkor a ready-n belül nem sima .click() kéne, hanem .dblclick().

Tehát megpróbálhatnád első körben így:

ready: function () {
$(".demo-container .track-default").click();
},

HELYETT:

ready: function () {
$(".demo-container .track-default").dblclick();
},

Ergo ez duplaklikkelni fog, rögtön betöltődés után, nem sima klikkelni.
Meglátjuk, így jó-e.
Ha igen, akkor értelmesebb lenne eleve megszüntetni azt, hogy dupla klikkre működjön, mert az tök hülyeség. :) Most nem kotortam át a kódot, de megírhatnád, hogy azért mi felelős. :)

Sk8erPeter

(#3770) The DJ válasza Sk8erPeter (#3769) üzenetére


The DJ
addikt

"Na várj, eleve miért kell duplaklikkelni a sample-feliratra, hogy elinduljon a lejátszás?"

Mert ez a sablon eredetileg audio anyagok eladására lett tervezve és az admin felületen van lehetőség több sample hanganyagot is feltölteni, mivel ugye ha egy 16 tracket tartalmazó CD-t akarsz eladni, akkor szeretnéd, hogy mindegyik dalba bele lehessen hallgatni. Ez a funkció a tulajnak nem kell, mivel neki csak egy sample hanganyag van minden termékhez, viszont a lejátszás csak duplakattal indul, mivel az első kattintás ugye kiválasztja a zenét, a második pedig indítja. Csak ez itt kicsit okafogyott, mert nincs mit kiválasztani egy sample fájl esetén. :) A dupla klikkes angol szöveget is már én írtam oda, hogy egyértelmű legyen a dolog.

Az általad javasolt cserét megejtettem az ajax.js fájlban, de az eredmény továbbra is ugyanaz: Minden működik, de csak dupla kattintással, ahogy eddig is. Magától nem indul el így sem. Makacs egy jószág.

https://wpszaki.hu - Minden, ami WordPress, cikkek kezdőknek és haladóknak.

(#3771) Sk8erPeter válasza The DJ (#3770) üzenetére


Sk8erPeter
nagyúr

"mivel ugye ha egy 16 tracket tartalmazó CD-t akarsz eladni, akkor szeretnéd, hogy mindegyik dalba bele lehessen hallgatni"
Ez egyáltalán nem indokolja, hogy duplaklikkelni kelljen. :U Szóval nem magyaráztál meg igazából ezzel még semmit. :D
Egy playlistnél miért kéne, hogy duplaklikkre működjön? Semmi logika abban, hogy első klikkre ki legyen választva a szám, második klikkre induljon el. Nem is így szoktak működni a lejátszók. A YouTube-on sem így működik. A jPlayer hivatalos oldalán sem így működik:
http://jplayer.org/latest/demo-02-video/
meg úgy általában nem így szokott működni. :D Mert totál logikátlan. EGY kattintásra ki kéne választania a számot, és elindítani.

Azt meg nem értem, hogy miért nem működik. Igazából debuggolni kellene, hogyan fut le a kód. Felrakhatnál egy jsFiddle-demót is róla, hogy ki tudjuk próbálni, külön működik-e. Működnie kéne elvileg, csak agyalni kéne rajta, most miért nem teszi, nekem sajna most nincs időm tesztelni... :( Viszont a külön jsFiddle-demó gyorsíthatna a dolgon.

Viszont azt kéne kiderítened, hogy ez a duplaklikkelési kényszer HOL kerül beállításra, mert az fontos lehet.

[ Szerkesztve ]

Sk8erPeter

(#3772) bazsika33


bazsika33
csendes tag

Jó estét, Lenne 1 kérdésem, íme:

Az a gondom h van közel 100 markerem és jó lenne ha a térkép center-ét a html-ben tudnám megadni (tehát a Fehérház html-en a Fehérház marker-je legyen a térképem központja). A js-be alapból meg kell vmi center-t adni (és így minden html-ben ugyanaz lesz a center - még akkor is ha a center-t a html-ben is megadom...).
Bocsánat, kicsit láma vagyok ehhez a témához. Ami eddig van azt is hetek alatt sikerült összehoznom. De legalább ismerkedem a témával......
Tehát azt szeretném h a center-t a html-ben tudjam beállítani. Minden további adatot pedig a js-em tartalmazza.
Tippek? Egyáltalán meg lehet ezt oldani vhogyan? Köszi...

Tehát tömören a kódok:

---------- HTML ----------
<script>
function initialize() {
var mapOptions = {
zoom: 13,
center: new google.maps.LatLng(20.805121,20.436148),
mapTypeId: google.maps.MapTypeId.NORMAL
};

var map = new google.maps.Map(document.getElementById('map-canvas'),
mapOptions);
}

function loadScript() {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&' +
'callback=initialize';
document.body.appendChild(script);
}

window.onload = loadScript;

</script>

---------- JS ----------
var map;
var marker;
var icon;
var image;
var link;
var to_html;
var from_html;
var infowindow;
function initialize() {
var mapOptions = {
center: new google.maps.LatLng(10.777916,10.270348),
zoom: 13,
mapTypeId: google.maps.MapTypeId.NORMAL,

};
var map = new google.maps.Map(document.getElementById("map_canvas"),
mapOptions);

// -------------- MARKER 1

var myLatlng = new google.maps.LatLng(0.805121,0.436148);
var marker1 = new google.maps.Marker({
position: myLatlng,
map: map,
icon: new google.maps.MarkerImage('../img/b.png'),
tooltip: '...'
});

var tooltip1 = new Tooltip({map: map}, marker1);
tooltip1.bindTo("text", marker1, "tooltip");
google.maps.event.addListener(marker1, 'mouseover', function() {
tooltip1.addTip();
tooltip1.getPos2(marker1.getPosition());
});
google.maps.event.addListener(marker1, 'click', function() {
map.setCenter(this.getPosition());
map.setZoom(15);
window.location.href = marker.url;
});

google.maps.event.addListener(marker1, 'mouseout', function() {
tooltip1.removeTip();
});
// -------- END OF 1st MARKER

// -------------- MARKER 2

var myLatlng = new google.maps.LatLng(1.883236,1.443302);
var marker2 = new google.maps.Marker({
position: myLatlng,
map: map,
icon: new google.maps.MarkerImage('../img/c.png'),
tooltip: '...'
});

var tooltip2 = new Tooltip({map: map}, marker2);
tooltip2.bindTo("text", marker2, "tooltip");
google.maps.event.addListener(marker2, 'mouseover', function() {
tooltip2.addTip();
tooltip2.getPos2(marker2.getPosition());
});

google.maps.event.addListener(marker2, 'mouseout', function() {
tooltip2.removeTip();
});
// -------- END OF 2nd MARKER
}

(#3773) Sk8erPeter válasza bazsika33 (#3772) üzenetére


Sk8erPeter
nagyúr

Mindezt rakd fel kérlek jsFiddle-re, hogy ne nekünk kelljen vele tökölnünk:

http://jsfiddle.net

értelemszerűen mindenféle kódot a saját panelébe, HTML-t a HTML-hez, JavaScript-kódot a JavaScript-panelbe, CSS-kódot a CSS-panelbe, aztán mentsd el a Save-re kattintva, majd a kapott URL-t dobd be ide nekünk.

Sk8erPeter

(#3774) bazsika33 válasza Sk8erPeter (#3773) üzenetére


bazsika33
csendes tag

JS google map problémám a következő:

http://jsfiddle.net/kxQw8/
Nekem nem jelenik meg semmi, sztem rosszul töltöttem be... De ehhez annyira nem értek.
Amúgy a térkép itt található: http://googlemap.friweb.hu/

Tehgát: minden egyes markerhez a saját html oldalán a marker centerjét szeretném beállítani. Tehát pl. a parlament html-en a parlament marker-je legyen a térképem központja.
A js-be meg kell adni egy centert és így minden html-ben jelenleg ugyanaz lesz a center (lánchíd) - még akkor is ha a centert a html-ben is megadom. Nekem ez a bajom...

Tehát azt szeretném h a centert a html-ben tudjam beállítani. Minden további adatot pedig a js-em tartalmazza.
Közel 100 marker esetén ez nagy könnyítés lenne...
Tippek? Egyáltalán meg lehet ezt oldani vhogyan? Köszi...

(#3775) Jim-Y válasza bazsika33 (#3774) üzenetére


Jim-Y
veterán

ezt többféleképp is meg lehet oldani, az egyik, hogy a js-ben le tudod kérdezni az url-t, ki tudod nyerni belőle, hogy melyik oldalon vagy épp, és e szerint be tudod állítani a centert.

Például felveszel egy olyan js objectet amiben a kulcsok a html oldalak nevei, értékek a latlng-ok.

var centers = {
elsoldal: new google.maps.LatLng(47.499014,19.043840),
masodik: new google.maps.LatLng(47.499014,19.043840)
stb...
}

majd lekéred az url-t, ynílván az vmi http://enoldalam.hu/elsooldal.html lesz, ebből kinyered, hogy elsooldal, majd kikeresed az ehhez a kulcshoz tartozó értéket a centers objektumban és beállítod centernek.

Másik megoldás lehet, hogy a html kódba valahogy beégeted a koordinátákat, erre asszem vannak megoldások valamilyen data-* módszerrel, majd a js-ben lekéred a DOM-ból ezt az értéket még inicializálás előtt és beállítod centernek.

üdv

(#3776) Sk8erPeter válasza bazsika33 (#3774) üzenetére


Sk8erPeter
nagyúr

Így már működik a példád:
http://jsfiddle.net/kxQw8/2/
De igazából csak működőképessé tettem jsFiddle-ön, érdemben nem módosítottam rajta.

"Tehgát: minden egyes markerhez a saját html oldalán a marker centerjét szeretném beállítani. Tehát pl. a parlament html-en a parlament marker-je legyen a térképem központja."
Annyira nem jó ötlet, hogy minden egyes helyszínhez újabb és újabb HTML-fájlokat hozol létre, mondjuk a 30. helyszínnél már el fogsz gondolkozni rajta, hogy biztos nincs-e egyszerűbb megoldás. Query stringbe kellene belerakni a helyszínek neveit.

"A js-be meg kell adni egy centert és így minden html-ben jelenleg ugyanaz lesz a center (lánchíd) - még akkor is ha a centert a html-ben is megadom. Nekem ez a bajom...
[...]
Tehát azt szeretném h a centert a html-ben tudjam beállítani."

Hogy a "HTML-ben is megadom", meg a "HTML-ben tudjam beállítani", azt nem egészen értem, mivel itt is JavaScript-kódban adtad meg a kezdőkoordinátákat. Persze amúgy HTML-kódba is bepasszírozhatod a már említett data-* attribútumokkal (erre kell gondolni: http://html5doctor.com/html5-custom-data-attributes/), csak nem biztos, hogy érdemes.

Több markert így tudsz értelmesen kezelni:
https://developers.google.com/maps/documentation/javascript/examples/icon-complex

Itt van egy Places API-val összekötött térképes kereső:
https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete
amint a találatra mész, középre rakja.

Érdemes megnézni itt a demókat:
https://developers.google.com/maps/documentation/javascript/examples/

A saját kódodban itt adtad meg a középponti koordinátákat:
var myLatlng = new google.maps.LatLng(47.506999, 19.045489);

Ez itt van:
https://maps.google.com/maps?ll=47.499014,19.045299&z=13&t=m&hl=en-US&mapclient=apiv3
lásd az URL-ben ezt a részt: maps?ll=47.499014,19.045299
(tehát a query stringben ez a lényeg: ll=47.499014,19.045299
Tehát az eredmény azt mutatja, amit megadtál neki.

Sk8erPeter

(#3777) bazsika33 válasza Sk8erPeter (#3776) üzenetére


bazsika33
csendes tag

A 0ról kezdtem felépíteni a gmap-omat, kevéske tudással. Néztem mintákat, fórumokat, ollóztam össze innen-onnan. Mivel a markerek száma folyamatosan nőni fog, így az adatokat mfképpen 1 js-ben szeretném tárolni. És a lényeg az lenne h az összes pont (az újak is) az összes html-en megjelenjen.

Konkrétan a data megoldásban tudnátok segíteni? Berakni vhogyan a parlament html-be a partlament marker 'latlng'-jét ide (hogy az legyen a parlament html-en a térképem centerje):
<div id="map">
<div id="map_canvas" style="width:100%; height:400px"></div>
</div>

(#3778) Sk8erPeter válasza bazsika33 (#3777) üzenetére


Sk8erPeter
nagyúr

Itt beírtam, hogy "Parlament, Budapest", vagy "Országház", vagy " 1055 Budapest, Kossuth Lajos tér 1-3.", vagy ahogy épp rátalálsz, aztán alul a "Click to see this area on Google Maps"-nél kattints (láthatod fölévitellel az URL-t):

Google Maps coordinates

https://maps.google.com/maps?ll=47.507121,19.045669&z=17&t=m&hl=en-US&mapclient=apiv3

(vagy az új Google Maps új URL-je szerint:
https://www.google.com/maps/preview#!data=!1m4!1m3!1d4716!2d19.045669!3d47.507121
)

természetesen ll=47.507121,19.045669 az érdekes. Ez a felhasználandó koordináta.

Ez alapján nézd meg a kódot jól, felhasználtam a map divjénél a data-attribútumokat, és a JavaScript-kódban is ezzel babráltam:
http://jsfiddle.net/kxQw8/4/

Konkrétan:
HTML:
<div id="map_canvas" style="width:100%; height:400px" data-map-center-lat="47.507121" data-map-center-lng="19.045669"></div>

JS:
var map_canvas = document.getElementById("map_canvas");
var center_lat = map_canvas.getAttribute('data-map-center-lat');
var center_lng = map_canvas.getAttribute('data-map-center-lng');
// ...

Szerk.:
még annyi, hogy az általad felhasznált Tooltipes kód nem tudom, honnan származik, de hiányos, mivel exceptionöket dobál nem létező metódusok felhasználása miatt.
Rákerestem, hátha meglelem a forrását, akkor ezt találtam:
http://stackoverflow.com/questions/19383522/google-maps-api-v3-multiple-tooltips-with-custom-content
Ezt Te kérdezted meg? :)

[ Szerkesztve ]

Sk8erPeter

(#3779) bazsika33 válasza Sk8erPeter (#3778) üzenetére


bazsika33
csendes tag

Köszönöm, erre gondoltam. Működik, igen... :-)
Még a tooltipet kellene visszaügyeskedni. A régiben működött. Nem én kérdeztem meg, de szinte biztos h innen vettem a kódot :-)

(#3780) bazsika33 válasza Sk8erPeter (#3778) üzenetére


bazsika33
csendes tag

A kód nagy része egyébként innen van...
Szóval most már lehet a centert a html-ben módosítani (köszönet érte Sk8erPeter-nek), de a tooltip így nem működik...

(#3781) bazsika33 válasza Sk8erPeter (#3778) üzenetére


bazsika33
csendes tag

Picit buheráltam rajta és már jónak tűnik. :))
Még egy kérdés: nem lehetne h a 'lat' 'lng' mellett a zoom mértékét is a html-ben lehessen állítani?

(#3782) Sk8erPeter válasza bazsika33 (#3781) üzenetére


Sk8erPeter
nagyúr

Konkrétan mit buheráltál a Tooltipen, mivel bírtad működésre?

"Még egy kérdés: nem lehetne h a 'lat' 'lng' mellett a zoom mértékét is a html-ben lehessen állítani?"
Az előző után már nem kéne, hogy túl nagy trouvaille legyen :)

A HTML eddig így nézett ki:

<div id="map_canvas" style="width:100%; height:400px" data-map-center-lat="47.507121" data-map-center-lng="19.045669"></div>

helyette legyen PÉLDÁUL ilyen (a data-attribútumokat teljesen tetszőlegesen találhatod ki, a "data-map-center-lng és hasonló neveket én adtam csak hasraütésre! Lehetett volna akár data-pityipalko is!):

<div id="map_canvas" style="width:100%; height:400px" data-map-center-lat="47.507121" data-map-center-lng="19.045669" data-map-zoom-level="15"></div>

A JS-kódba pedig kerüljön bele mondjuk ezután a sor után:
var center_lng = map_canvas.getAttribute('data-map-center-lng');
ez:
var zoomLevelAttr = map_canvas.getAttribute('data-map-zoom-level');
var zoomLevel = (zoomLevelAttr)? zoomLevelAttr : 13;

aztán

var mapOptions = {
..........
zoom: zoomLevel,
..........
};

hasonlóan bármilyen adatot bedrótozhatsz így a HTML-kódba, csak valami hasonló sémát kövess.

Szerk.:
Itt még egy pár percig percig próbálkoztam életre kelteni a Tooltipet, azzal játszottam, hogy definiáltam egy eseménykezelőt a térkép load eventjére, meg bemásoltam egy az egyben a Tooltip kódját, beraktam az inherit(Tooltip, google.maps.OverlayView); részt az initialize() függvénybe, aztán sikerült elcseszerinteni a dolgot, és végül most itt nem működik a térkép, és rohadtul nem volt most kedvem, agyam energiám folytatni :D De mintát vehetsz, itt benne van már a zoom-beállítás, csak náám múúkodik: http://jsfiddle.net/kxQw8/7/

[ Szerkesztve ]

Sk8erPeter

(#3783) bazsika33 válasza Sk8erPeter (#3782) üzenetére


bazsika33
csendes tag

Köszönöm a segítséget, a térkép lényegében működik. Egyedül a html-ből állítható zoom nem megy.
jsfiddle.net

(#3784) Sk8erPeter válasza bazsika33 (#3783) üzenetére


Sk8erPeter
nagyúr

Tudod, mi volt a gond?
Ez:

var zoomLevelAttr = map_canvas.getAttribute('data-map-zoom-level');
var zoomLevel = (zoomLevelAttr)? zoomLevelAttr : 13;

így önmagában hibátlan, DE ezt a hibát írja:
"Uncaught InvalidValueError: invalid argument to setZoom: 3 "
Az oka pedig az, hogy a zoomLevel string típusú lesz, miközben számot vár...
Ezért javítani kell így:

var zoomLevel = (zoomLevelAttr)? parseInt(zoomLevelAttr, 10) : 13;

így már integerré konvertálja.

A Google Maps tesztelésénél a Google Maps scriptfájljainak betöltési módja miatt a jsFiddle-nél problémák tapasztalhatók, úgyhogy felraktam JS Binre:
http://jsbin.com/EzeBUTe/2/edit

A custom tooltip itt sem működik, de azzal nem foglalkoztam. De mivel írtad, hogy rájöttél, mi a baja, úgyhogy megoszthatnád. :)

[ Szerkesztve ]

Sk8erPeter

(#3785) SirRasor


SirRasor
őstag

Hoi!

Tudtok olyanról, hogy az IE10 meg a legújabb chrome nem támogatná az alábbi utasítást?

document.getElementById("azonosító").style="display:block";, vagy akár visiblity:visible.
Egyszerűen nem jelenik meg a DIV, de FF alatt gyönyörűen működik.

CSS-ben a visiblity:hidden/display:none-val próbálkoztam, hogy legyen kezdő érték. Amikor kiszedtem, akkor működött, tehát a CSS parancsokat tudják értelmezni külön-külön a böngészők. Esetleg még arra tudok gondolni, hogy ennél a 2 böngészőnél ha beállítok értéket CSS-en keresztül, akkor JS-sel nem engedi megváltoztatni azokat. Csinálhatnak ilyet?

[ Szerkesztve ]

Make Love not war!

(#3786) Sk8erPeter válasza SirRasor (#3785) üzenetére


Sk8erPeter
nagyúr

Ez azért van, mert rosszul használod. :)
helyesen:

var myElement = document.getElementById('akarmi');
myElement.style.display = "block"; // ez a lényeg, az nem jó, h "display:block"

vagy
myElement.style.display = "none";

és így tovább.

Sk8erPeter

(#3787) SirRasor válasza Sk8erPeter (#3786) üzenetére


SirRasor
őstag

Hmm így tényleg működik. Az a vicces, hogy az én rossz megoldásomat egy lynda.com-os oktatóvideóból néztem :W Így viszont kész csoda, hogy FF-ban működött :)

Nagyon köszönöm!

Make Love not war!

(#3788) Sk8erPeter válasza SirRasor (#3787) üzenetére


Sk8erPeter
nagyúr

Nem ismerem ezeket a lynda.com-os videókat, de ezek szerint kellő fenntartással kell őket kezelni... :D Szívesen!

[ Szerkesztve ]

Sk8erPeter

(#3789) bazsika33 válasza Sk8erPeter (#3784) üzenetére


bazsika33
csendes tag

Tökéletes...
Mindegyik tooltip nálam tökéletesen működik. (de én azt használom ami itt található.)
Da ha már tooltip, akkor azzal annyi gond lehet h ha a marker a térkép alsó részében van, akkor bizony nem az egész része látszik... (bár talán ez már css probléma)
Köszönöm a segítséget, itt az eredmény...

(#3790) LógaGéza


LógaGéza
addikt

Üdv!

Még most kezdek ismerkedni a Javascriptekkel, de sajnos a matek részén elakadtam (mint a régi iskolás időkben :O )

Van egy scriptem, aminek egy része a következő:

$("#price").html(Dollar((amt*0.1)+(((amt*0.1) < 15.01) ? 0.3 : 0)) + " Euro");

Ennél elvileg ha 100-at írok az amt-nek, akkor 40 Euro-t ad ki. Na ez érdekelne, hogy ezt hogy számolja ki, mert nem jövök rá :W

"Go to work, get married, have some kids, pay your taxes, pay your bills, watch your tv, follow fashion, act normal, obey the law, and repeat after me: I AM FREE"

(#3791) Jim-Y válasza LógaGéza (#3790) üzenetére


Jim-Y
veterán

Dollar( (amt*0.1) + ( ( (amt*0.1) < 15.01) ? 0.3 : 0 ) ) + " Euro"
10 + 10 < 15.01 ha igen akkor 0.3, egyébként 0 + "Euro"

Tehát Dollar(10+0.3)+"Euro", azt nem tudjuk, hogy a Dollar függvény mit csinál.

[ Szerkesztve ]

(#3792) LógaGéza válasza Jim-Y (#3791) üzenetére


LógaGéza
addikt

Tényleg az kimaradt.

function Dollar (val) {
var str,pos,rnd=0;
if (val < .995) rnd = 1;
str = escape (val*1.0 + 0.005001 + rnd);
pos = str.indexOf (".");
if (pos > 0) str = str.substring (rnd, pos + 3);
return str;
}

Viszont akkor tényleg nem értem hogy jön ki a 40.00 Euro :F

"Go to work, get married, have some kids, pay your taxes, pay your bills, watch your tv, follow fashion, act normal, obey the law, and repeat after me: I AM FREE"

(#3793) Jim-Y válasza LógaGéza (#3792) üzenetére


Jim-Y
veterán

Sehogy nem jön ki a 40, szerintem valami szemét maradt a kódodban mert a

Dollar(10.3) 10.30 -t ad eredményül. Mit akarsz amúgy elérni ezzel a függvénnyel? a matek sosem volt az erősségem :))

Meg mi az az escape függvény ott a közepén?:D

[ Szerkesztve ]

(#3794) fordfairlane válasza LógaGéza (#3790) üzenetére


fordfairlane
veterán

Sem elvileg, sem gyakorlatilag nem 40 eurót ad ki. A kapott amt értéket 0.1-gyel szorozza, és ha 150-nél kisebb az amt, hozzáad még 0.3-at. Ennyit csinál ez az egész.

Mondjuk a Dollar nevű függvény eléggé zavaros.

[ Szerkesztve ]

x gon' give it to ya

(#3795) LógaGéza válasza Jim-Y (#3793) üzenetére


LógaGéza
addikt

Elnéztem, 10,30-at kell adnia... :W

A 40.00-ra ez a függvény van:

$("#price").html(Dollar((amt*0.4)+(((amt*0.4) < 15.01) ? 0.3 : 0)) + " Euro");

Ez egy "mini-webáruházhoz" hasonlítható legjobban. 1 termék van, abból 2 típus. Eddig Euróval lehetett csak fizetni, én azt akarom megoldani, hogy lehessen Forinttal is - bár lehet egyszerűbb lenne azt megoldani, hogyha a Forint van kiválasztva, akkor az Euro értékét szorozza meg 300-al, és köszönöm...

A Dollar függvényhez én nem nyúltam egyáltalán, az készen jött valahonnan.

[ Szerkesztve ]

"Go to work, get married, have some kids, pay your taxes, pay your bills, watch your tv, follow fashion, act normal, obey the law, and repeat after me: I AM FREE"

(#3796) fordfairlane válasza LógaGéza (#3795) üzenetére


fordfairlane
veterán

Ez ugyanaz a képlet, csak nem 0.1, hanem 0.4-es szorzóval.

x gon' give it to ya

(#3797) LógaGéza válasza fordfairlane (#3796) üzenetére


LógaGéza
addikt

Tudom, de így legalább kijön a keresett összeg.

"Go to work, get married, have some kids, pay your taxes, pay your bills, watch your tv, follow fashion, act normal, obey the law, and repeat after me: I AM FREE"

(#3798) fordfairlane válasza LógaGéza (#3797) üzenetére


fordfairlane
veterán

Maradt még kérdés?

x gon' give it to ya

(#3799) Sk8erPeter válasza LógaGéza (#3795) üzenetére


Sk8erPeter
nagyúr

Ez a Dollar() függvény, meg annak felhasználási módja úgy, ahogy van, rossz, ne ilyenből próbáld megtanulni a JavaScriptet. :) Nem tudom, honnan származik a függvény, de felejtős. Már eleve a neve félrevezető, nem is értem, honnan kapta. :) Azt sem tudom, mire jó, hogy amennyiben 0 és 1 közötti számot adok be neki, akkor levágja az elejéről a 0-t, és marad a tizedespont utáni rész, aminél ráadásul be van drótozva a pont (nincs lehetőség ennek átadására), pedig ez országfüggő lehet, lásd mi például a tizedesvesszőt használjuk. De mivel itt "Dollar" a függvény neve, biztos úgy gondolták, ez helyénvaló lesz. :DDD Az sincs lekezelve benne, mi van, ha negatív számot adok meg. :P
A lényeg nagyon röviden: ez a függvény mindössze két tizedesre kerekít, semmi mást nem csinál. Ha beadod neki, hogy 10, akkor csinál belőle 10.00-t. Ha úgy hívod meg, hogy mondjuk Dollar(10123.5678), akkor stringként visszaad neked "10123.57"-et. Igazából ennyi.

Erre viszont ennél jóval értelmesebb, rövidebb és legfőképp JÓL MŰKÖDŐ megoldások is vannak, lásd:
http://stackoverflow.com/questions/11832914/round-up-to-2-decimal-places-in-javascript

Előző példával élve:
var myNumber = 10123.5678;
var fixedPointNumberAsAString = parseFloat(myNumber).toFixed(2);
// eredmény: "10123.57"

VAGY:
var myNumber = 10123.5678;
var fixedPointNumber = Math.round(myNumber * 100) / 100;
// eredmény: 10123.57

Utóbbi esetben számot fogsz kapni eredményül, nem pedig egy stringet.

[ Szerkesztve ]

Sk8erPeter

(#3800) TomyLeeBoy


TomyLeeBoy
tag

Üdv. Egy kis segítségre lenne szükségem. Van egy oldalon két táblázat, mind a kettő sorainak színe megváltozik rámutatással, ezt onmouseover="this.style.background='#FFFF66';" -al, illetve onmouseout párjával oldottam meg. Mindkét táblázatban kattintásra egy új színt kap a sor, ami úgy is marad következő kattintásig, tehát "kijelölődik", ehhez csináltam egy js funkciót, nem túl bonyolult, működik szépen.

A lényeg az lenne, ha az egyik táblázatban kattintok egy sorra, ahhoz van egy sor "társítva" a másik táblázatban id alapján, így egy kattintással mindkettő háttérszínének meg kellene változnia, módosítottam is a js funkciót ennek megfelelően.

Órákig kerestem a hibát miért nem működik, mire rájöttem hogy működik, csak nem látszik az eredmény.
Kattintok az 1-es táblázatban, megváltozik a sor színe, úgy is marad. A másik táblázatban lévő, hozzá tartozó soron látszólag semmi változás. Ráhúzom az egeret, lehúzom róla és megváltozik annak a színe is a kijelöltre.

Tehát a lényeg, hogy a második táblázat sorának is megváltozik a háttérszín értéke

document.getElementById(rowid).style.background = rowcolor;

ettől, csak nem látszik amíg valami nem történik vele (pl ráhúzom az egeret). Hogyan lehetne megoldani hogy "frissüljön" is egyből, és látszódjon is az új szín?

Remélem érthető a probléma. :)

Az idő sebessége: 1s/s

Copyright © 2000-2024 PROHARDVER Informatikai Kft.