Avatar billede weiland Nybegynder
24. marts 2005 - 13:59 Der er 11 kommentarer og
1 løsning

ændre input-felt i forhold til andet input-felt

Jeg har en formular, der viser egenskaberne for et billede. Jeg drømmer om en

funktion, som betyder at man kan ændre højde/bredde for billedet - uden

at billedet mister de korrekte proportioner.

Eksempel:
Et billede har bredde=100 og højde=200
I formularen ændrer man bredden til 200, og så er det at højden

automatisk skal ændres til 400!!
På den måde bevares billedets proportioner....

Formularen ser i princippet sådan ud:
I formularen kan man vælge, om man vil bevare proportioner eller ej.

<form name=MyForm>
Bredde: <input type=text name=Width value=100>
Højde: <input type=text name=Width value=200>
<input type=checkbox name=Maintain checked> Bevar proportioner
</form>

Er det muligt?
Avatar billede weiland Nybegynder
24. marts 2005 - 14:01 #1
Det omvendte skal i sagens natur også gælde... altså hvis man ændrer højden, så ændres bredden automatisk :-)
Avatar billede roenving Novice
24. marts 2005 - 14:16 #2
Det kan man 'sagtens', for lige at sikre at det er de oprindelige proportioner, skal vi lige en omvej:

<script type="text/javascript">
var h,w;
window.onload = function(){
  h = document.MyForm.Height.value;
  w = document.MyForm.Width.value;
}
function adjustPic(elm){
  var f = elm.form;
  if(f.Maintain.checked){
    switch(elm.name){
      case "Height":
        f.Width.value = Math.round(+elm.value * w / h);
        break;
      case "Width":
        f.Height.value = Math.round(+elm.value * h / w);
    }
  }
  var st = document.getElementById('showPic').style;
  st.width = f.Width.value + 'px';
  st.height = f.Height.value + 'px';
}
</script>

<form name="MyForm">
Bredde: <input type="text" name="Width" value="100" onchange="adjustPic(this);">
Højde: <input type="text" name="Height" value="200" onchange="adjustPic(this);">
<input type="checkbox" name="Maintain" checked> Bevar proportioner
</form>

<img src="../billede.jpg" style="width:100px;height=200px;" id="showPic">
Avatar billede weiland Nybegynder
24. marts 2005 - 14:20 #3
fantastisk, har du virkelig lavet det på et kvarter? Jeg tester lige!
Avatar billede barklund Nybegynder
24. marts 2005 - 14:26 #4
roenving >> tester du sådanne scripts, når du skriver dem? Sådan bare af nysgerrighed? Jeg har en tendens til bare at skrive dem derudaf i hvert fald :)
Avatar billede roenving Novice
24. marts 2005 - 14:31 #5
Jeg skriver dem også bare derudaf, men den type scripts som ovenstående skriver jeg direkte i min html-editor, så jeg ved et tryk på en tast eller et ikon kan teste !-)
Avatar billede weiland Nybegynder
24. marts 2005 - 15:15 #6
Det fungerer jo perfekt! Svar endelig....

Men jeg har et problem, som jeg ikke lige kan løse: Funktionen skal gerne kigge på de aktuelle højde- og breddeværdier.

I visse tilfælde indeholder formen ingen værdier ved onload. Så vælger man et billede, og formen udfyldes med bredde- og højdeværdier. Hvis man så ændrer fx højden, så står der "NaN" i bredde-feltet.

I andre tilfælde indeholder formen ganske rigtigt værdier som i dit eksempel, men så vælger man et ANDET billede, og form-værdierne ændres... Og så fungerer adjustPic fint, men regner med værdierne fra det oprindelige billede :-)

Jeg har prøvet at ændre
---------------
var h,w;
window.onload = function(){
  h = document.MyForm.Height.value;
  w = document.MyForm.Width.value;
}
--------

til blot
---------
var h,w;
h = document.MyForm.Height.value;
w = document.MyForm.Width.value;
--------

- men det er ikke nok... ???
Avatar billede roenving Novice
24. marts 2005 - 15:56 #7
Så skal det udvides til også at ændre værdier, når du vælger et andet (som så også skal registreres som det aktive !-)

-- sekund ...
Avatar billede roenving Novice
24. marts 2005 - 16:26 #8
Fatter ikke en meter, for følgende virker perfekt i min Mzilla, men IE vil ikke være med på den funktion, som kaldes fra onclick på billederne ?-)

<html>
<head>
<title>Bevar proportioner</title>
<script type="text/javascript">
var h,w,actPic;
window.onload = function(){
  actPic = document.getElementById('showPic0');
  if(document.MyForm.Height.value.match(/\d/))
    h = document.MyForm.Height.value;
  else{
    h = actPic.offsetHeight;
    document.MyForm.Height.value = h;
  }
  if(document.MyForm.Width.value.match(/\d/))
    w = document.MyForm.Width.value;
  else{
    w = actPic.offsetWidth;
    document.MyForm.Width.value = w;
  }
  actPic.title = "Dette billede er aktivt";
}
function adjustPic(elm){
  var f = elm.form;
  if(f.Maintain.checked){
    switch(elm.name){
      case "Height":
        f.Width.value = Math.round(+elm.value * w / h);
        break;
      case "Width":
        f.Height.value = Math.round(+elm.value * h / w);
    }
  }
  var st = actPic.style;
  st.width = f.Width.value + 'px';
  st.height = f.Height.value + 'px';
}
function setActive(pic){
  //alert(pic.offsetWidth);
  actPic.title = "Vælg dette billede";
  actPic = pic;
  actPic.title = "Dette billede er aktivt";
  h = pic.offsetHeight;
  document.MyForm.Height.value = h;
  w = pic.offsetWidth;
  document.MyForm.Width.value = w;
}
</script>
</head>
<body>
<form name="MyForm">
Bredde: <input type="text" name="Width" value="" onchange="adjustPic(this);">
Højde: <input type="text" name="Height" value="" onchange="adjustPic(this);">
<input type="checkbox" name="Maintain" checked> Bevar proportioner
</form>

<img src="../billede.jpg" style="width:100px;height=100px;cursor:pointer;" title="Vælg dette billede" id="showPic0" onclick="setActive(this);"><br>
<img src="../billede.jpg" style="width:200px;height=100px;cursor:pointer;" title="Vælg dette billede" id="showPic1" onclick="setActive(this);"><br>
<img src="../billede.jpg" style="width:300px;height=100px;cursor:pointer;" title="Vælg dette billede" id="showPic2" onclick="setActive(this);"><br>
<img src="../billede.jpg" style="width:400px;height=200px;cursor:pointer;" title="Vælg dette billede" id="showPic3" onclick="setActive(this);"><br>
<img src="../billede.jpg" style="width:500px;height=200px;cursor:pointer;" title="Vælg dette billede" id="showPic4" onclick="setActive(this);"><br>
</body>
</html>
Avatar billede weiland Nybegynder
24. marts 2005 - 16:33 #9
samme her...
Avatar billede weiland Nybegynder
24. marts 2005 - 16:57 #10
du skal ikke bruge mere tid på det hvis det driller ... den nuværende løsning kan  bruges i de fleste tilfælde...

du husker at svare! :-)
Avatar billede roenving Novice
24. marts 2005 - 17:00 #11
Jeg håber godt nok, at der kommer en forbi, som kan forklare det, så også min IE kan være med !-)

-- els velbekomme '-)
Avatar billede roenving Novice
24. marts 2005 - 17:07 #12
-- og tak for point ;~}
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