Avatar billede pvtsommer Nybegynder
29. marts 2006 - 23:48 Der er 17 kommentarer og
1 løsning

Gennemsigtig boks der fortæller afstand fra venstre top hjørne

Hej

Jeg har tidligere fået hjælp til et lignende spørgsmål, som findes her:
http://www.eksperten.dk/spm/638856

Der var det afstanden fra venstre til højre, som skulle bruges. På daværende tidspunkt troede jeg ikke at jeg fik brug for andet, men det gjorde jeg altså desværre.

Jeg skal bruge slet og ret samme funktion, bare hvor det er en mindre kasse, som skal bevæges rundt på både x og y aksen, inden for den givne bredde og højde.

Den gamle kode som OleBole stod for var ca: http://brainstar.dk/stribe/

Idéen er nu at denne boks skal kunne trækkes rundt, over det hele, hvor jeg ligesom at jeg selv kunne justerer bredden, selv skal kunne justerer højden på det område hvor den må trækkes.

Nogen der kan hjælpe?

Da det er lidt et dobbeltarbejde (da olebole jo har brugt sin tid på det en gang) sætter jeg denne gang pointene til 200 :)
Avatar billede pvtsommer Nybegynder
29. marts 2006 - 23:49 #1
En lille tilføjelse:

Den skal i øvrigt på samme måde returnere højden i en text box også. (som jo selvfølgelig vil blive skjult som type="hidden" :)

Håber på lidt hjælp her.
Avatar billede pvtsommer Nybegynder
30. marts 2006 - 01:16 #2
Ps. Det er i øvrigt også vigtigt at den ikke ødelægger den anden function. Så hvis de gældende funktioner kunne kaldes noget andet, ville det bare være super. Ellers lægger jeg det selvfølgelig bare i to filer, og inkluderer efter behov ;) - De skal aldrig bruges samtidig, men ville være rart at kunne have det samlet.
Avatar billede roenving Novice
31. marts 2006 - 16:31 #3
Hvordan skal du have afstanden ?-)

-- som to værdier, der fortæller hhv. vertikal og horisontal afstand eller som een værdi, der fortæller en afstand i pixels ?o]
Avatar billede pvtsommer Nybegynder
31. marts 2006 - 16:46 #4
Det skal være i pixels.

Altså hvis den box er 30 pixels nede og 50 pixels oppe, skal der i input-x være 30, og input-y 50.

:) - Tror det var den nemmeste måde at forklare det på.
Avatar billede pvtsommer Nybegynder
31. marts 2006 - 16:57 #5
Så læste jeg lige hvad du skrev. Tror jeg fik forklaret det herover, men for god ordens skyld:
"som to værdier, der fortæller hhv. vertikal og horisontal afstand " - Det var den rigtige.
Avatar billede roenving Novice
31. marts 2006 - 17:19 #6
I så fald er det bare at fordoble alle nogetX-ting med også en nogetY-ting, og aflæse top i stedet for left på de værdier ...

Prøv selv !-)
Avatar billede pvtsommer Nybegynder
31. marts 2006 - 17:23 #7
Ok, jeg vil forsøge så :D
Avatar billede pvtsommer Nybegynder
31. marts 2006 - 17:43 #8
Det vil ikke virke.. Hvad har jeg overset?

/*  Handy wrapper funktioner  */
var d=document;
function gE(id){return d.getElementById(id)};
function pI(s){return parseInt(s)};
function gXe(e){e=e||window.event;if(!e.srcElement)e.srcElement=e.target;
if(typeof e.clientX=="undefined"){e.clientX=e.pageX;e.clientY=e.pageY}
if(!e.preventDefault)e.preventDefault=function(){this.returnValue=false};
return e};
/********************************/

/*  Constructor for slider objektet  */
function SliderObject(sliderID, fieldXID, fieldYID) {
// Opret reference til objektet selv.
// - nødvendig ved callback fra event-handlers
    var me = this;
    this.oSlid = gE(sliderID); // Slider elementet
    this.oXField = gE(fieldXID); // X Feltet, der skal opdateres
    this.oYField = gE(fieldYID); // Y Feltet, der skal opdateres
    this.minXValue = 0; // Default X minimums værdi
    this.maxXValue = 650; // Default X  maximums værdi
    this.minYValue = 0; // Default Y minimums værdi
    this.maxYValue = 180 // Default Y maximums værdi
// Den samlede bredde af sliderens venstre- og højre-border
    this.borderXOffset = pI(this.oSlid.style.borderLeftWidth) + pI(this.oSlid.style.borderLeftWidth);
    this.borderYOffset = pI(this.oSlid.style.borderTopWidth) + pI(this.oSlid.style.borderTopWidth);
    this.oDownX = null; // Indeholder senere X-værdien for brugerens klik
    this.oDownY = null; // Indeholder senere Y-værdien for brugerens klik
// Sæt event-handler på slideren
    this.oSlid.onmousedown = function(e){me.mDown(e)};
    return this; // returner objektet
}
var _p = SliderObject.prototype;
_p.mDown = function(e) {
    var me = this; // Reference til objektet selv
    e = gXe(e); // Skab et X-browser event-objekt
// Gem documentets event-handlers til senere brug
    this.docEventCache = {"move":d.onmousemove, "up":d.onmouseup};
// Sæt event-handelers på dokumentet
    d.onmouseup = function(e){me.mUp(e)};
    d.onmousemove = function(e){me.mMove(e)};
// Gem venstre-værdien for brugerens klik - minus sliderens venstre-offset
    this.oDownX = e.clientX - pI(this.oSlid.style.left);
    this.oDownY = e.clientY - pI(this.oSlid.style.top);
}
_p.mMove = function(e) {
// Sæt max-værdien for sliderens left
    var x, maxXL = this.maxXValue-(this.oSlid.offsetXWidth-this.borderXOffset);
    var y, maxYL = this.maxYValue-(this.oSlid.offsetYWidth-this.borderYOffset);
    e = gXe(e); // Skab et X-browser event-objekt
    x = e.clientX - this.oDownX; // Udregn den nye venstre-værdi
    x = e.clientY - this.oDownY; // Udregn den nye venstre-værdi
// Juster, hvis værdien er under min eller over max
// - sæt den nye værdi på slideren
    this.oSlid.style.left = ((x<this.minXValue)? this.minXValue : (x>maxXL)? maxXL : x) + "px";
    this.oSlid.style.top = ((y<this.minYValue)? this.minYValue : (y>maxYL)? maxYL : y) + "px";
}
_p.mUp = function() {
// Opdater elementet i formen
    this.oXField.value = pI(this.oSlid.style.left);
    this.oYField.value = pI(this.oSlid.style.top);
// Retabler dokumentets event-handlers
    d.onmouseup = this.docEventCache.up;
    d.onmousemove = this.docEventCache.move;
}

var oSlider = null;
window.onload = function(){
    oSlider = new SliderObject("alph_box", "sliderX", "sliderY");
    oSlider.maxXValue = 650;
    oSlider.maxYValue = 180;
}

Jeg har tilføjet endnu et input felt, med id sliderY :)
Avatar billede pvtsommer Nybegynder
31. marts 2006 - 17:46 #9
Mit venstre input er i øvrigt med det samme:
input id="sliderX": 0
input id="sliderY": NaN

hvor de begge før var standard valuen...
Avatar billede pvtsommer Nybegynder
31. marts 2006 - 17:48 #10
Glem min sidste besked: "Mit venstre input er i øvrigt med det samme:
input id="sliderX": 0
input id="sliderY": NaN

hvor de begge før var standard valuen..."

Det passer ikke...
Avatar billede pvtsommer Nybegynder
31. marts 2006 - 17:49 #11
Det er til gengæld hvad den skriver når man trykker/hiver i slideren... Altså "0" i X-feltet, og "NaN" i y-feltet.
Avatar billede pvtsommer Nybegynder
31. marts 2006 - 18:02 #12
PYyhaa... er ved at forstå lidt henaf hvad der sker!

Seneste opdatering:

/*  Handy wrapper funktioner  */
var d=document;
function gE(id){return d.getElementById(id)};
function pI(s){return parseInt(s)};
function gXe(xe){xe=xe||window.event;if(!xe.srcElement)xe.srcElement=xe.target;
if(typeof xe.clientX=="undefined"){xe.clientX=xe.pageX;xe.clientY=xe.pageY}
if(!xe.preventDefault)xe.preventDefault=function(){this.returnValue=false};
return xe};
function gYe(ye){ye=ye||window.event;if(!ye.srcElement)ye.srcElement=ye.target;
if(typeof ye.clientY=="undefined"){ye.clientX=ye.pageX;ye.clientY=ye.pageY}
if(!ye.preventDefault)ye.preventDefault=function(){this.returnValue=false};
return ye};
/********************************/

/*  Constructor for slider objektet  */
function SliderObject(sliderID, fieldXID, fieldYID) {
// Opret reference til objektet selv.
// - nødvendig ved callback fra event-handlers
    var me = this;
    this.oSlid = gE(sliderID); // Slider elementet
    this.oXField = gE(fieldXID); // X Feltet, der skal opdateres
    this.oYField = gE(fieldYID); // Y Feltet, der skal opdateres
    this.minXValue = 0; // Default X minimums værdi
    this.maxXValue = 650; // Default X  maximums værdi
    this.minYValue = 0; // Default Y minimums værdi
    this.maxYValue = 180 // Default Y maximums værdi
// Den samlede bredde af sliderens venstre- og højre-border
    this.borderXOffset = pI(this.oSlid.style.borderLeftWidth) + pI(this.oSlid.style.borderLeftWidth);
    this.borderYOffset = pI(this.oSlid.style.borderTopWidth) + pI(this.oSlid.style.borderTopWidth);
    this.oDownX = null; // Indeholder senere X-værdien for brugerens klik
    this.oDownY = null; // Indeholder senere Y-værdien for brugerens klik
// Sæt event-handler på slideren
    this.oSlid.onmousedown = function(e){me.mDown(e)};
    return this; // returner objektet
}
var _p = SliderObject.prototype;
_p.mDown = function(e) {
    var me = this; // Reference til objektet selv
    xe = gXe(e); // Skab et X-browser event-objekt
    ye = gYe(e); // Skab et X-browser event-objekt
// Gem documentets event-handlers til senere brug
    this.docEventCache = {"move":d.onmousemove, "up":d.onmouseup};
// Sæt event-handelers på dokumentet
    d.onmouseup = function(e){me.mUp(e)};
    d.onmousemove = function(e){me.mMove(e)};
// Gem venstre-værdien for brugerens klik - minus sliderens venstre-offset
    this.oDownX = xe.clientX - pI(this.oSlid.style.left);
    this.oDownY = ye.clientY - pI(this.oSlid.style.top);
}
_p.mMove = function(e) {
// Sæt max-værdien for sliderens left
    var x, maxXL = this.maxXValue-(this.oSlid.offsetWidth-this.borderXOffset);
    var y, maxYL = this.maxYValue-(this.oSlid.offsetTop-this.borderYOffset);
    xe = gXe(e); // Skab et X-browser event-objekt
    ye = gYe(e); // Skab et X-browser event-objekt
    x = xe.clientX - this.oDownX; // Udregn den nye venstre-værdi
    y = ye.clientY - this.oDownY; // Udregn den nye venstre-værdi
// Juster, hvis værdien er under min eller over max
// - sæt den nye værdi på slideren
    this.oSlid.style.left = ((x<this.minXValue)? this.minXValue : (x>maxXL)? maxXL : x) + "px";
    this.oSlid.style.top = ((y<this.minYValue)? this.minYValue : (y>maxYL)? maxYL : y) + "px";
}
_p.mUp = function() {
// Opdater elementet i formen
    this.oXField.value = pI(this.oSlid.style.left);
    this.oYField.value = pI(this.oSlid.style.top);
// Retabler dokumentets event-handlers
    d.onmouseup = this.docEventCache.up;
    d.onmousemove = this.docEventCache.move;
}

var oSlider = null;
window.onload = function(){
    oSlider = new SliderObject("alph_box", "sliderX", "sliderY");
    oSlider.maxXValue = 650;
    oSlider.maxYValue = 180;
}

Nu vil den gerne slide fra horisontalt (altså højre til venstre) og overholder grænserne. Hvad skal jeg tilføje før den vil bevæge sig op og ned også ? :S
Avatar billede pvtsommer Nybegynder
31. marts 2006 - 19:43 #13
Internet Explorer siger fejlen ligger på linje 61:
this.oSlid.style.top = ((y<this.minYValue)? this.minYValue : (y>maxYL)? maxYL : y) + "px";

Men kan ikke se hvad fejlen er :(
Avatar billede pvtsommer Nybegynder
31. marts 2006 - 19:59 #14
Ved at ændre lidt frem og tilbage i den, viser det sig at det er "y" som fejler, og at det er:

    this.oDownY = ye.clientY - pI(this.oSlid.style.top);

this.oSlid.style.top, som er problemet. Fjerner jeg denne, kører den som sådan egentlig ok, altså den virker, men man kan liiige trække den lidt for langt hele tiden (hvilket den - this.oSlid.style.top vel sørger for.

Hvad gør jeg galt der, og hvordan får jeg det rettet til?
Avatar billede roenving Novice
03. april 2006 - 18:38 #15
Hrm, jeg har ikke haft tid de senere dage, og har ikke nok nu, så jeg vil vende tilbage !-)
Avatar billede pvtsommer Nybegynder
04. april 2006 - 22:03 #16
Glæder mig til det :)
Avatar billede pvtsommer Nybegynder
08. april 2006 - 22:58 #17
Så virker det!
Avatar billede pvtsommer Nybegynder
08. april 2006 - 22:59 #18
hmm... Det gjorde det så ikke alligevel. :S :( - Det var stadig "skævt" som beskrevet i tidligere post.

Oprette ny med point. Der skal det fortsætte (beklager! Jeg var lidt for hurtigt)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester