Solved

growing and shrinking div in javascript

Posted on 2009-05-14
6
668 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
Comment Utility
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
Comment Utility
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
Comment Utility
No please help me with the cross browser one
0
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 2

Author Comment

by:SunScreenCert
Comment Utility
hey this is not working
0
 
LVL 2

Author Comment

by:SunScreenCert
Comment Utility
hey i have firefox and it is not working
0
 
LVL 3

Accepted Solution

by:
GregTSmith earned 125 total points
Comment Utility
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 Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

Styling your websites can become very complex. Here I'll show how SASS can help you better organize, maintain and reuse your CSS code.
Boost your ability to deliver ambitious and competitive web apps by choosing the right JavaScript framework to best suit your project’s needs.
In this tutorial viewers will learn how to position items using CSS's three positioning types Create a new HTML document with an internal stylesheet.: Create another div in CSS and name it Absolute : Type "position:absolute;" and "top:10px; left:50p…
In this Micro Tutorial viewers will learn how to create navigation buttons that change on rollover, using CSS (Continuation of the CSS Image Sprite tutorial) Create a parent ID for all the list items       - Specify position: absolute and display: block…

763 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

Need Help in Real-Time?

Connect with top rated Experts

5 Experts available now in Live!

Get 1:1 Help Now