Solved

growing and shrinking div in javascript

Posted on 2009-05-14
6
674 Views
Last Modified: 2012-05-07
Write a simple DHTML page with one centered div, height 200px, width 200px, that is blue, on a white background.
When clicking on the div it should slowly grow to 500px (width) and then shrink to 200px, and repeat this motion until it is clicked again.
Do not use 3rd party JavaScript libraries in your solution.


0
Comment
Question by:SunScreenCert
  • 3
  • 2
6 Comments
 
LVL 3

Assisted Solution

by:GregTSmith
GregTSmith earned 125 total points
ID: 24392844
10 minutes of playing around... of course it will be up to you to make this work in the browsers you need to support, but it's an idea... I've only tested in IE7.
<html>
<head>
<script>
var page = {
  active: false,
  action: null,
  reference: null,
  speed: null, 
  initialize: function () {
    document.onclick = page.onClick;
  },
  onClick: function () {
    var o = event.srcElement;
    if (o.id === 'box') {
      if (page.active) {
        page.action = 'shrink';
        page.active = false;
        page.speed = 20;
      }
      else {
        page.speed = 3;
        page.active = true;
        page.action = 'grow';
        page.reference = setInterval(page.adjust, 25);
      }
    }
  },
  adjust: function () {
    var o = page.find('box'), 
      w = o.style.width || '200px',
      i = parseInt(w.substring(0, w.length - 2), 10);
    switch (page.action) {
      case 'grow':
        i += page.speed;
        if (i >= 500) {
          page.action = 'shrink';
        }
        break;
      case 'shrink':
        i -= page.speed;
        if (i <= 200) {
          page.action = 'grow';
          if (!page.active) {
            clearInterval(page.reference);
          }
        }
        break;
    }
    o.style.width = i + 'px';
  },
  find: function (id) {
    return document.getElementById(id);
  }
}
window.onload = page.initialize;
</script>
<style>
* {
  margin:0;
  padding:0;
}
body {
  margin-top:100px;
  text-align:center;
}
#box {
  background-color:blue;
  height:200px;
  width:200px;
}
</style>
</head>
<body>
<form id="form1">
 
<div id="box"></div>
 
</form>
</body>
</html>

Open in new window

0
 
LVL 20

Expert Comment

by:ddayx10
ID: 24400980
Well if the author is not going to comment on that I will...

Nice effort. Doesn't work cross browser but I still admire your work. I would help out and write one that works cross-browser, but it doesnt seem as though it would be used, and you deserve the points anyway!

:)
0
 
LVL 2

Author Comment

by:SunScreenCert
ID: 24401150
No please help me with the cross browser one
0
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

 
LVL 2

Author Comment

by:SunScreenCert
ID: 24425100
hey this is not working
0
 
LVL 2

Author Comment

by:SunScreenCert
ID: 24425292
hey i have firefox and it is not working
0
 
LVL 3

Accepted Solution

by:
GregTSmith earned 125 total points
ID: 24425540
A couple of small tweaks and this works for me in FireFox 3.0.1.
<html>
<head>
<script>
var page = {
  active: false,
  action: null,
  reference: null,
  speed: null, 
  initialize: function () {
    document.onclick = page.onClick;
  },
  onClick: function (e) {
    var o = (e) ? e.target : event.srcElement;
    if (o.id === 'box') {
      if (page.active) {
        page.action = 'shrink';
        page.active = false;
        page.speed = 20;
      }
      else {
        page.speed = 3;
        page.active = true;
        page.action = 'grow';
        page.reference = setInterval(page.adjust, 25);
      }
    }
  },
  adjust: function () {
    var o = page.find('box'), 
      w = o.style.width || '200px',
      i = parseInt(w.substring(0, w.length - 2), 10);
    switch (page.action) {
      case 'grow':
        i += page.speed;
        if (i >= 500) {
          page.action = 'shrink';
        }
        break;
      case 'shrink':
        i -= page.speed;
        if (i <= 200) {
          page.action = 'grow';
          if (!page.active) {
            clearInterval(page.reference);
          }
        }
        break;
    }
    o.style.width = i + 'px';
  },
  find: function (id) {
    return document.getElementById(id);
  }
}
window.onload = page.initialize;
</script>
<style>
* {
  margin:0;
  padding:0;
}
body {
  margin:100px 10px 10px 10px;
  text-align:center;
}
#box {
  background-color:blue;
  height:200px;
  margin:auto;
  width:200px;
}
</style>
</head>
<body>
<form id="form1">
 
<div id="box"></div>
 
</form>
</body>
</html>

Open in new window

0

Featured Post

What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

As a result of several questions about how to use Bootstrap I thought it would be a good idea to write down the development aspect of creating a Bootstrapped website in as little time as possible. Part 1 of this article will only concentrate on g…
Browsers only know CSS so your awesome SASS code needs to be translated into normal CSS. Here I'll try to explain what you should aim for in order to take full advantage of SASS.
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…
Learn how to create flexible layouts using relative units in CSS.  New relative units added in CSS3 include vw(viewports width), vh(viewports height), vmin(minimum of viewports height and width), and vmax (maximum of viewports height and width).

778 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question