Scroll div contents with Javascript.
April 10, 2006
I was asked to convert a flash site to html. Her flash site had images of arrows that controlled the scroll of her content, so, I was asked to reproduce that effect. Here is the code I wrote to create a custom scroll with javascript, which uses getElementById & .scrollTop. It is recommended that you initialize the scrolling div with the style of overflow: auto; thus, the user will still be able to scroll the div if they have javascript disabled.
Here's the css:
<style type="text/css">
#scroll_up {
cursor: pointer;
}
#scroll_down {
cursor: pointer;
}
#scroll_box {
height: 200px;
width: 300px;
overflow: auto;
}
</style>
The javascript
// gives up and down scroll buttons to images, spans, ... named up_name, down_name, respectively.
// will keep the default scroll_box's style overflow if it encounters errors (so make overflow: auto;)
// usage: put this after the scrollbox div: var div_scroll1 = new TextScroll('div_scroll1', 'scroll_box');
function TextScroll(scrollname, div_name, up_name, down_name)
{
this.div_name = div_name;
this.name = scrollname;
this.scrollCursor = 0;
this.speed = 5;
this.timeoutID = 0;
this.div_obj = null;
this.up_name = up_name;
this.dn_name = down_name;
{
if (document.getElementById) {
div_obj = document.getElementById(this.div_name);
if (div_obj) {
this.div_obj = div_obj;
this.div_obj.style.overflow = 'hidden';
}
div_up_obj = document.getElementById(this.up_name);
div_dn_obj = document.getElementById(this.dn_name);
if (div_up_obj && div_dn_obj) {
div_up_obj.setAttribute("onmouseover", scrollname + ".scrollUp();")
div_up_obj.setAttribute("onmouseout", scrollname + ".stopScroll();")
div_dn_obj.setAttribute("onmouseover", scrollname + ".scrollDown();")
div_dn_obj.setAttribute("onmouseout", scrollname + ".stopScroll();")
}
}
}
this.stopScroll = function() {
clearTimeout(this.timeoutID);
}
this.scrollUp = function() {
if (this.div_obj) {
this.scrollCursor = (this.scrollCursor - this.speed) < 0 ? 0 : this.scrollCursor - this.speed;
this.div_obj.scrollTop = this.scrollCursor;
this.timeoutID = setTimeout(this.name + ".scrollUp()", 60);
}
}
this.scrollDown = function() {
if (this.div_obj) {
this.scrollCursor += this.speed;
this.div_obj.scrollTop = this.scrollCursor;
this.timeoutID = setTimeout(this.name + ".scrollDown()", 60);
}
}
this.resetScroll = function() {
if (this.div_obj) {
this.div_obj.scrollTop = 0;
this.scrollCursor = 0;
}
}
}
usage example:
<span id="scroll_up">scroll up</span> | <span id="scroll_down">scroll down</span>
<br>
<div id="scroll_box">
<p>a lot of content</p>
</div>
<script type="text/javascript">
var div_scroll1 = new TextScroll('div_scroll1', 'scroll_box', 'scroll_up', 'scroll_down');
</script>
I hope this pasted right.