4

I am trying to get some JavaScript to programmatically adjust a HTML img tag's width to display various sized images correctly.

I have a fixed width img tag at 800px to display an image, this is the max width.

If the image is wider then 800px I want to display it at 800px wide;

If the image is less than 800px wide I want to preserve its width to avoid stretching it.

I use this html/javacript code to get a partial solution:

function resize_image(id) {
	var img = document.getElementById(id);
	var normal_width = img.width;
	img.removeAttribute("width");
	var real_width = img.width;
	if (real_width < normal_width) {
		img.width = real_width;
	} else {
		img.width = normal_width;
	}
}
<img id="myimage" onload="resize_image(self.id);" src="https://via.placeholder.com/350x150" width="800" />

The above code seems to work on all browsers I have tested except Safari (images don't display unless you refresh the page).

I know I can use CSS max-width but that wont work on IE < 7 which is a show stopper.

How can I get this working for all browsers? Many thanks in advance.

4 Answers 4

3

I have never seen a safari in work, but you can try changing your onload event to this:

onload="resize_image(self.id);return true"

It could be that without a return value, safari thinks that this object should not be loaded.

Sign up to request clarification or add additional context in comments.

Comments

2

Use the IE6 css+javascript hack:

.dynamic_img {
    width: expression(document.body.clientWidth <= 800? "auto" : "800px");
    max-width: 800px; //For normal browsers
}

2 Comments

This has a performance cost, so you can't have a bunch of them on the page.
Hm, I've just tested it and guess what, that expression is evaluated on any possible event. And I was naive to think it evaluates only once...
1

Without id:

...
  function resize_image( img )
  {
     //var img = document.getElementById( id );
...
  <img onload="resize_image(this);" src="IMAGE.JPG" width="800" />

Comments

0

Have you tried monkey with img.style.width? You could also try having 2 CSS classes for each of the 2 conditions and programmaticly change them.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.