- Home
- Categorie
- Coding e Sistemistica
- Javascript & Framework
- Ottimizzare posizione e funzione script
-
Ottimizzare posizione e funzione script
Ciao
Sto utilizzando questo script per aprire una finestra al click del mouse
<script type="text/javascript">
function getposOffset(overlay, offsettype){
var totaloffset=(offsettype=="left")? overlay.offsetLeft : overlay.offsetTop;
var parentEl=overlay.offsetParent;
while (parentEl!=null){
totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
parentEl=parentEl.offsetParent;
}
return totaloffset;
}function overlay(curobj, subobj){
if (document.getElementById){
var subobj=document.getElementById(subobj)
subobj.style.left=getposOffset(curobj, "left")+"px"
subobj.style.top=getposOffset(curobj, "top")+"px"
subobj.style.display="block"
return false
}
else
return true
}function overlayclose(subobj){
document.getElementById(subobj).style.display="none"
}</script>Avrei bisogno di apportare però due modifiche.
La prima riguarda chiusura della finestra a qualsiasi click del mouse in qualsiasi punto della pagina; per adesso invece, posso utilizzare solamente:
<a href="#" onClick="overlayclose('subcontent'); return false">Close</a>La seconda modifica riguarda la posizione. La nuova finestra si apre coprendo il link, mentre io vorrei farla apparire sotto. Ho provato a fare così
style="position:absolute top:50%;
ma quando clicco, l'attributo "absolute" va a farsi benedire e il layout della pagina pure.
Come posso fare?
-
per il 1° problema.....se metti l'onclick al body...dovresti risolvere
per il 2° nello script prova a fare così:
subobj.style.left=getposOffset(curobj, "left")+"px"
subobj.style.top=((getposOffset(curobj, "top")*1)+25)+"px"fammi sapere!
-
per il 2° nello script prova a fare così:
subobj.style.left=getposOffset(curobj, "left")+"px"
subobj.style.top=((getposOffset(curobj, "top")*1)+25)+"px"Grande! Funziona perfettamente, grazie!!
Riguaro all'onclick, non c'è un sistema per integrarlo direttamente nello script o nel tag di richiamo? Potrei anche provarci da solo, ma ho sempre paura di combinare pasticci riguardo la compatibilità dei browser.
Aggiungo una nuova richiesta e poi giuro che mi fermo qui
Come posso collegare lo script esternamente? Nel senso che, vorrei mettere lo script in un file .js e poi richiamarlo nella pagina. La stringa di richiamo so come funziona, ma non so come modificare il codice dello script...basta togliere <script type="text/javascript"> e </script> o c'è altro da fare?
Ad ogni modo, grazie 1000 Digital
-
punto 1:
document.onclick = function(){ alert("Ecco il click!!!"); }punto 2:
Si, togli i tag dello sript e lo incolli in un documento *.jspunto 3:
Che mi ringrazzi a fare....sono qui apposta!
hehehe, comunque....di nientepunto 4:
Potrei anche provarci da solo, ma ho sempre paura di combinare pasticci riguardo la compatibilità dei browser.
Per imparare bisogna sbagliare...cerca di trovare tutti i modi "per non far funzionare" uno script....e poi trova il solo modo in cui funzioni!!!!;)
Se hai bisogno...siamo tutti qui!!!!
-
Per imparare bisogna sbagliare...cerca di trovare tutti i modi "per non far funzionare" uno script....e poi trova il solo modo in cui funzioni!!!!;)Il modo più saggio e simpatico per dire: perdici la vita fin quando non avrai imparato
Anche se il tuo compito è aiutare i somari come me, ti ringrazio ugualmente perchè non sempre si ha la voglia o l'interesse necessario per farlo (ho fatto il moderatore anch'io per qualche tempo...;) )
Come avrai capito sono bianchissimo in fatto di javascript, quindi sono costretto a chiederti, dove va messa questa stringa?
document.onclick = function(){ alert("Ecco il click!!!"); }Devo anche rompere il giuramento che fatto prima, perchè ho ricordato un'altra richiesta che volevo proporre...:D
Praticamente io ho la mia pagina, nella quale inserisco lo script vero e proprio tra gli head (o il richiamo), il tag per richiamarlo tra i body e un div che racchiude il contenuto da aprire al click (subcontent).
C'è la possibilità di spostare quest'ultimo in un secondo file e richiamarlo? Non so se sono chiaro..In pratica
index.html
finestra da richiamare.html
script.jsHo già pasticciato un pò, ma non credo sia cosa da niente...
Penso che ormai ti sei fatto un'idea di cosa cerco, quindi se hai qualche altro script bello e pronto da scaricare, sono disposto a buttare il mio...
Se non si può fare, fa niente
-
Il modo più saggio e simpatico per dire: perdici la vita fin quando non avrai imparato
Nono, Tomas Edison, prima di riuscire a creare la lampadina, ha sbagliato un sacco di volte, ma lui diceva ad ogni fallimanto:
"ho trovato un'altro modo per non creare una lampadina"la stringha, va messa in pagina, o nel js, al posto del'allert, metti la funzione per far scomparire il div.
non ho capito bene la 2° parte!
-
@Digital Daigor said:
Nono, Tomas Edison, prima di riuscire a creare la lampadina, ha sbagliato un sacco di volte, ma lui diceva ad ogni fallimanto:
"ho trovato un'altro modo per non creare una lampadina"Vero
Nel mio caso però, di modi per rovinare uno script ne ho già trovati tanti...:DTi faccio un esempio live di quello che voglio ottenere, così mi dici se il mio script va bene oppure devo cercare qualcosa di diverso.
Su youtube, nel menù in alto, c'è il pulsante "sito" con la bandierina; se clicchi, apre una finestra. Ecco, questo è semplicemente quello che voglio riuscire a fare.
Inoltre, il codice della finestra che si apre con tutte le nazioni, vorrei poterlo mettere in un file diverso e richiamarlo con lo script all'interno della pagina principlale. Si può fare?
-
Aggiorno: ho risolto il problema della chiusura con il click ovunque aggiungendo un altro po di codice...
Ora però torno ad avere problemi con la posizione. Se il link si trova all'estremità destra della pagina, la finestra aprendosi, esce fuori dai margini spaginando. Ho fatto uno scarabocchio con paint per spiegarmi meglio.
Il nuovo script è questo:
function getposOffset(overlay, offsettype){
var totaloffset=(offsettype=="left")? overlay.offsetLeft : overlay.offsetTop;
var parentEl=overlay.offsetParent;
while (parentEl!=null){
totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
parentEl=parentEl.offsetParent;
}
return totaloffset;
}function overlay(curobj, subobjstr, opt_position){
if (document.getElementById){
closealloverlay();
var subobj=document.getElementById(subobjstr)
document.onclick=function(e){
clicktohide(curobj, subobjstr, e)
}
subobj.style.display=(subobj.style.display!="block")? "block" : "none"
var xpos=getposOffset(curobj, "left")+((typeof opt_position!="undefined" && opt_position.indexOf("right")!=-1)? -(subobj.offsetWidth-curobj.offsetWidth) : 0)
var ypos=getposOffset(curobj, "top")+((typeof opt_position!="undefined" && opt_position.indexOf("bottom")!=-1)? curobj.offsetHeight : 0)
subobj.style.left=getposOffset(curobj, "left")+"px"
subobj.style.top=((getposOffset(curobj, "top")*1)+15)+"px"
return false
}
else
return true
}function closealloverlay()
{
var oDivs = document.getElementsByTagName("DIV");
var i;for (i = 0 ; i < oDivs.length ; i++)
{
if (oDivs*.className == "OverlayDiv")
{
overlayclose(oDivs*.id);
}
}
}function overlayclose(subobj){
document.getElementById(subobj).style.display="none"
}function clicktohide(linkobj, subobj, e){
var currentnode=(window.event)? event.srcElement : e.target
var hidesubobj=true
while (currentnode.tagName!="BODY" && currentnode.tagName!="HTML"){
if (currentnode.id==subobj || currentnode==linkobj){
hidesubobj=false
break
}
currentnode=currentnode.parentNode
}
if (hidesubobj)
overlayclose(subobj)
}
-
fai un controllo prima di settare la posizione....
if((posx+divwidth)>larghezza_schermo)
{
posx = larghezza_schermo-(posx+divwidth);
}questo è un esempio....devi riadattarlo!