Avatar billede tblaster Nybegynder
07. februar 2006 - 22:12 Der er 13 kommentarer og
1 løsning

Ændre vertikalscroll visning til at være horisontal

Hejsa

Jeg har fundet frem til et meget godt script, vertical-scroll.js, fra rod.rant-on.net. Scriptet virker meget godt men er, som navnet antyder, kun brugbar til at lave en vertikal scroll. Jeg vil meget gerne have hjælp til at få ændret scroll funktionaliteten til at kunne funger horisontalt istedet, således at der kan placeres billeder ved siden af hinanden og med en scrollbar nedenunder.

Hvis der findes en færdig kode jeg kan bruge, er dette også fint med mig.

Her er koden:
----------------------------------------
scroll.htm
----------------------------------------


<script type="text/javascript" language="javascript" src="vertical-scroll.js"></script>
<script type="text/javascript" language="javascript">
var scrollImageURL = "images/";
var scrollImageThumbURL = "thumbs/";
var scrollImages = new Array(
'1.jpg',
'2.jpg',
'3.jpg',
'4.jpg'
);

</script>

<Style>
  #scrollContainer1{position:absolute; overflow:hidden; left:0px; top:0px; height:100%; width:110px; background-color:#C7DFF4;}
  #scrollUp1{position:absolute; left:122px; top:0px;}
  #scrollDown1{position:absolute; left:122px; bottom:0px;}
  #scrollTrack1{position:absolute; left:123px; top:16px; width:10px; height:317px; background-color:#F0F0F0; font-size:1px;}
  #scrollBar1{position:absolute; left:0px; top:0px; width:10px; height:0px; background-color:#000000; font-size:1px;}
</STYLE>

<div style="position:absolute; height:350px;" id="ThumbArkiv">
  <div id="scrollContainer1">
      <div style="position:absolute; left:0px; top:0px; width:100%;" id="scrollContent1">
      <script type="text/javascript">
            for(i=0; i<scrollImages.length; i++)
            {
                document.write("<img style='width:120px;' class='bildeArkivThumb' src='" + scrollImageThumbURL + scrollImages[i] + "'");
                document.write("onclick='document.mainFoto.src=\"" + scrollImageURL + scrollImages[i] + "\";")
                document.write("setImageIndex(" + i + ");'");
                document.write("alt='Klik for st&oslash;rre billede' style='cursor:pointer;cursor:hand;'>");
            }
        </script>
      </div>
  </div>
  <div id="scrollUp1" style="cursor:pointer;cursor:hand;">
    <img src="Pics/up.gif" alt="Klik for at scrolle op"></div>
  <div id="scrollDown1" style="cursor:pointer;cursor:hand;">
    <img src="Pics/down.gif" alt="Klik for at scrolle ned"></div>
  <div id="scrollTrack1">
    <div id="scrollBar1" style="cursor:pointer;cursor:hand;"></div>
  </div>
</div>


----------------------------------------
vertical-scroll-js
----------------------------------------

// vertical-scroll.js by rod.rant-on.net | rodmorelos@msn.com
// keep these two lines and you're free to use this code

// object constructor
function createObjectById(id)
{
    this.el = document.getElementById ? document.getElementById(id) : null;
    if (!this.el)
        throw new Error('Element with "' + id + '" id not found.');
    this.css = this.el.style;
    this.i = createObjectById.registry.length;
    createObjectById.registry[this.i] = this;
    this.w = this.el.offsetWidth ? this.el.offsetWidth : 0;
    this.h = this.el.offsetHeight ? this.el.offsetHeight : 0;
    this.x = this.el.offsetLeft ? this.el.offsetLeft : 0;
    this.y = this.el.offsetTop ? this.el.offsetTop : 0;
    this.o = 100;
}
// global reference to the dhtml object
createObjectById.registry = [];

// update object values
createObjectById.prototype.update = function()
{
    this.w = this.el.offsetWidth ? this.el.offsetWidth : 0;
    this.h = this.el.offsetHeight ? this.el.offsetHeight : 0;
    this.x = this.el.offsetLeft ? this.el.offsetLeft : 0;
    this.y = this.el.offsetTop ? this.el.offsetTop : 0;
}
// visibility
createObjectById.prototype.show = function() { this.css.visibility = 'visible'; }
createObjectById.prototype.hide = function() { this.css.visibility = 'hidden'; }

// display
createObjectById.prototype.display = function(d) { this.css.display = d; }

// colors
createObjectById.prototype.fg = function(f) { this.css.color = f; }
createObjectById.prototype.bg = function(b) { this.css.backgroundColor = b; }

// set layer opacity (in percent, between 0 and 100)
createObjectById.prototype.setOpacity = function(o)
{
    if (typeof this.css.MozOpacity != 'undefined') { this.css.MozOpacity = (o / 100); this.o = o; }
    else if (this.el.filters) { this.css.filter = 'alpha(opacity=' + o + ')'; this.o = o; }
}
// moves a layer to (x, y) pixels
createObjectById.prototype.moveTo = function(x, y)
{
    if (x != null && typeof x == 'number')
    {
        x = Math.round(x);
        this.x = x;
        this.css.left = x + 'px';
    }
    if (y != null && typeof y == 'number')
    {
        y = Math.round(y);
        this.y = y;
        this.css.top = y + 'px';
    }
}
// resize layer to (width, height) pixels
createObjectById.prototype.setSize = function(w, h)
{
    if (w != null && typeof w == 'number')
    {
        if (w < 0) w = 0;
        w = Math.round(w);
        this.css.width = w + 'px';
    }
    if (h != null && typeof h == 'number')
    {
        if (h < 0) h = 0;
        h = Math.round(h);
        this.css.height = h + 'px';
    }
    this.update();
}
// clips layer to specific dimensions; (top, right, bottom, left) in pixels
createObjectById.prototype.clipTo = function(t, r, b, l)
{
    if (t < 0) t = 0; if (r < 0) r = 0; if (b < 0) b = 0; if (l < 0) l = 0;
    this.css.clip = 'rect(' + t + 'px, ' + r + 'px, ' + b + 'px, ' + l + 'px)';
}
// write content to layer
createObjectById.prototype.write = function(text)
{
    if (typeof this.el.innerHTML != 'undefined')
    {
        this.el.innerHTML = text;
        this.update();
    }
}
/******************** functions rodmorelos@msn.com find useful or are used in his scripts ******************/

// measure page width and height (the viewable canvas area)
function getViewport()
{
    if (document.documentElement && document.documentElement.scrollLeft) this.scrollX = document.documentElement.scrollLeft;
    else if (document.body && document.body.scrollLeft) this.scrollX = document.body.scrollLeft;
    else if (window.scrollX) this.scrollX = window.scrollX;
    else if (window.pageXOffset) this.scrollX = window.pageXOffset;
    else this.scrollX = 0;
    if (document.documentElement && document.documentElement.scrollTop) this.scrollY = document.documentElement.scrollTop;
    else if (document.body && document.body.scrollTop) this.scrollY = document.body.scrollTop;
    else if (window.scrollY) this.scrollY = window.scrollY;
    else if (window.pageYOffset) this.scrollY = window.pageYOffset;
    else this.scrollY = 0;
    if (document.documentElement && document.documentElement.clientWidth) this.width = document.documentElement.clientWidth;
    else if (document.body && document.body.clientWidth) this.width = document.body.clientWidth;
    else if (window.innerWidth) this.width = window.innerWidth;
    else this.width = 0;
    if (document.documentElement && document.documentElement.clientHeight) this.height = document.documentElement.clientHeight;
    else if (document.body && document.body.clientHeight) this.height = document.body.clientHeight;
    else if (window.innerHeight) this.height = window.innerHeight;
    else this.height = 0;
}

// event listeners
// object      = the object to attach the event handler to
// eventType    = the type of event to listen for
// functionName = the handler function to execute when the event is fired
// capture      = use event capture?
function addEvent(object, eventType, functionName, capture)
{
    if (object.addEventListener)
    {
        object.addEventListener(eventType, functionName, capture);
        return true;
    }
    else if (object.attachEvent)
    {
        var ae = object.attachEvent('on' + eventType, functionName);
        return ae;
    }
    else
    {
        object['on' + eventType] = functionName;
    }
}

function removeEvent(object, eventType, functionName, capture)
{
    if (object.removeEventListener)
    {
        object.removeEventListener(eventType, functionName, capture);
        return true;
    }
    else if (object.detachEvent)
    {
        var re = object.detachEvent('on' + eventType, functionName);
        return re;
    }
    else { object['on' + eventType] = null; }
}

function fixEvent(e, currentTarget)
{
    if (!e) e = event;
    if (!e.target) e.target = e.srcElement;
    if (!e.currentTarget) e.currentTarget = currentTarget;
    if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
    if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
    if (typeof e.clientX == 'undefined') e.clientX = e.pageX;
    if (typeof e.clientY == 'undefined') e.clientY = e.pageY;
    if (!e.stopPropagation) e.stopPropagation = function() { this.cancelBubble = true; }
    if (!e.preventDefault)
        e.preventDefault = function()
        {
            this.returnValue = false;
        }
    return e;
}
// browser check
function browserCheck()
{
    this.ua = navigator.userAgent.toLowerCase();
    this.dom = document.getElementById ? 1 : 0;
    this.op7 = (this.dom && this.ua.indexOf('opera 7') > -1 || this.ua.indexOf('opera/7') > -1) ? 1 : 0;
    this.ie  = this.ua.indexOf("msie") != -1;
    this.ie5 = (this.dom && this.ua.indexOf('msie 5') > -1) ? 1 : 0;
    this.ie6 = (this.dom && this.ua.indexOf('msie 6') > -1) ? 1 : 0;
    this.moz = (this.dom && this.ua.indexOf('mozilla') > -1 && this.ua.indexOf('gecko') > -1) ? 1 : 0;
    this.mac = this.ua.indexOf("mac") != -1;
    return this;
}
// returns a random number between x and y (integers)
function rand(x, y)
{
    return (Math.round(Math.random() * (y - x)) + x);
}
// browser check variable
var bw = browserCheck();

/************************** vertical-scroller by rod.rant-on.net | rodmorelos@msn.com **********************/

var scroller =
{
    scrollables: 1, // set the number of scrollable scrollContent
    step: 30,             // set the timeout between each scroll
    speed: 15,             // set the scroll speed
    wheelSpeed: 15, // set the scroll speed when using the mouse wheel
    wheelScrolled: false,
    timer: 0,
    contentY: 0,
    dragY: 0,
    clickY: 0,

    mouseDown: function(e)
    {
        e = fixEvent(e);
        var canvas = new getViewport();
        var mouseY = e.clientY + canvas.scrollY;
        var target = (e.target.nodeType == 3 || e.target.tagName.toLowerCase() == 'img') ? e.target.parentNode : e.target;
        scroller.wheelScrolled = false;
        for (var i = 1; i <= scroller.scrollables; i++)
        {
            if (target.id == scroller.bar[i].el.id)
            {
                //the function e.preventDefault() prevents sitecontent from being marked when cursor is moved away from the scrollbar. But ie on mac does not understand e.preventDefault(). The scrollbar cannot be used on ie for mac but is visible as an indicator.
                if(!(bw.mac && bw.ie))
                {
                    scroller.bar[i].grab = true;
                    scroller.clickY = mouseY - scroller.bar[i].y;
                    e.preventDefault();
                }
            }
            else if (target.id == scroller.track[i].el.id)
            {
                if (scroller.content[i].h > scroller.container[i].h)
                {
                    scroller.track[i].grab = true;
                    scroller.dragY = e.layerY - (scroller.bar[i].h / 2);
                    if (scroller.dragY < 0)
                        scroller.dragY = 0;
                    if (scroller.dragY > scroller.track[i].h - scroller.bar[i].h)
                        scroller.dragY = scroller.track[i].h - scroller.bar[i].h;
                    scroller.contentY = 0 - (scroller.dragY * (scroller.content[i].h - scroller.container[i].h) / Math.round(scroller.track[i].h - scroller.bar[i].h));
                    scroller.content[i].moveTo(0, scroller.contentY);
                    scroller.bar[i].moveTo(0, scroller.dragY);
                    if(!(bw.mac && bw.ie)) e.preventDefault(e);
                }
            }
            else if (target.id == scroller.up[i].el.id)
            {
                scroller.up[i].grab = true;
                scroller.scroll(i, scroller.speed);
                if(!(bw.mac && bw.ie)) e.preventDefault();
            }
            else if (target.id == scroller.down[i].el.id)
            {
                scroller.down[i].grab = true;
                scroller.scroll(i, -scroller.speed);
                if(!(bw.mac && bw.ie)) e.preventDefault();
            }
        }
    },

    mouseUp: function(e)
    {
        for (var i = 1; i <= scroller.scrollables; i++)
        {
            scroller.bar[i].grab = false;
            scroller.track[i].grab = false;
            scroller.up[i].grab = false;
            scroller.down[i].grab = false;
        }
        clearTimeout(scroller.timer);
    },

    mouseMove: function(e)
    {
        for (var i = 1; i <= scroller.scrollables; i++)
        {
            if (scroller.bar[i].grab && scroller.content[i].h > scroller.container[i].h)
            {
                e = fixEvent(e);
                var canvas = new getViewport();
                var mouseY = e.clientY + canvas.scrollY;
                scroller.dragY = mouseY - scroller.clickY;
                if (scroller.dragY < 0)
                    scroller.dragY = 0;
                if (scroller.dragY > scroller.track[i].h - scroller.bar[i].h)
                    scroller.dragY = scroller.track[i].h - scroller.bar[i].h;
                scroller.contentY = 0 - (scroller.dragY * (scroller.content[i].h - scroller.container[i].h) / Math.round(scroller.track[i].h - scroller.bar[i].h));
                scroller.content[i].moveTo(0, scroller.contentY);
                scroller.bar[i].moveTo(0, scroller.dragY);
                if(!(bw.mac && bw.ie)) e.preventDefault();
            }
        }
    },

    scroll: function(num, speed)
    {
        if (scroller.content[num].y < 0 || scroller.content[num].y > -scroller.content[num].h + scroller.container[num].h)
        {
            scroller.contentY = scroller.content[num].y + speed;
            if (scroller.contentY < -(scroller.content[num].h - scroller.container[num].h)) scroller.contentY = -scroller.content[num].h + scroller.container[num].h;
            else if (scroller.contentY > 0) scroller.contentY = 0;
            scroller.content[num].moveTo(0, scroller.contentY);
            scroller.dragY = 0 - (scroller.content[num].y * Math.round(scroller.track[num].h - scroller.bar[num].h) / (scroller.content[num].h - scroller.container[num].h));
            scroller.bar[num].moveTo(0, scroller.dragY);
            if (!scroller.wheelScrolled) scroller.timer = setTimeout('scroller.scroll(' + num + ', ' + speed + ')', scroller.step);
        }
    },

    wheelScroll: function(e)
    {
        e = fixEvent(e);
        var el = e.target;
        if (el.id.slice(0, el.id.length - 1) != 'scrollContent')
        {
            do el = el.parentNode;
            while (el.tagName.toLowerCase() != 'div' || el.id.slice(0, el.id.length - 1) != 'scrollContent')
        }
        var i = el.id.charAt(el.id.length - 1);
        if (window.event.wheelDelta <= -120)
        {
            scroller.wheelScrolled = true;
            scroller.scroll(i, -scroller.wheelSpeed);
        }
        else if (window.event.wheelDelta >= 120)
        {
            scroller.wheelScrolled = true;
            scroller.scroll(i, scroller.wheelSpeed);
        }
        if(!(bw.mac && bw.ie)) e.preventDefault();
    },
   
    /**********************************************************************************************************/
    /*
    /* This function is developed by Morten Prom (www.mortenprom.com) @ Moje Art Drector AS (www.mad-design.no)
    /* Keep these two lines and you're free to use this code.
    /*
    /* setHeight() can be used to change the trackheight.
    /*    id              : Scroller number
    /*    containerHeight : New height of container
    /*    trackHeight    : New height of track
    /*
    /**********************************************************************************************************/
   
    setHeight: function(id, containerHeight, trackHeight)
    {
        var containerHeightBeforeReposition = this.container[id].h;
        this.container[id].h = containerHeight;
        this.track[id].h = trackHeight;
        var hiddenContent = this.content[id].h - this.container[id].h;
        var hiddenTopContentPercent = (-this.contentY) / hiddenContent;
       
        var visibleScrollTrack = this.track[id].h - this.bar[id].h;
       
        var visibleContentHeight = this.contentY + this.content[id].h;
        if(visibleContentHeight < this.container[id].h)
        {
            this.contentY = this.contentY + (this.container[id].h - visibleContentHeight);
            this.content[id].moveTo(0, this.contentY);
            this.dragY = visibleScrollTrack;
            this.bar[id].moveTo(0, this.dragY);
        }
        else
        {
            this.dragY = visibleScrollTrack * hiddenTopContentPercent;
            this.bar[id].moveTo(0, this.dragY);
        }
    },
   
    /**********************************************************************************************************/
    /*
    /* This function is developed by Morten Prom (www.mortenprom.com) @ Moje Art Drector AS (www.mad-design.no)
    /* Keep these two lines and you're free to use this code.
    /* moveScrollContent() - If you work with automatic imagechange like in a slideshow, this function can be
    /* used to move the content and the slider (bar) up and down. This function works best if all the images
    /* in the scroller have the same height, but moveScrollContent() will do the jobb even if you have a good
    /* mix of vertical and horizontal images.
    /*    id            : Scroller number
    /*    numberOfImages : How many images
    /*    activeImage    : What image is being show
    /*
    /**********************************************************************************************************/
   
    moveScrollContent: function(id, numberOfImages, activeImage)
    {
        if(activeImage<2)
        {
            this.dragY = 0;
            this.bar[id].moveTo(0, this.dragY);
            this.content[id].moveTo(0, 0);
        }
        else if(activeImage<numberOfImages-3)
        {
            this.dragY = activeImage*(this.track[id].h - this.bar[id].h)/numberOfImages;
            this.bar[id].moveTo(0, this.dragY);           
            this.content[id].moveTo(0, -((activeImage*this.content[id].h/numberOfImages)-this.content[id].h/numberOfImages));
        }
        else
        {
            this.dragY = this.track[id].h - this.bar[id].h;
            this.bar[id].moveTo(0, this.dragY);
            this.content[id].moveTo(0, -this.content[id].h + this.container[id].h);
        }
    },
   
    setBarHeight: function(bar, track, container, content)
    {
        var h = Math.round(track.h*track.h/content.h);
        if(track.h < h)
            bar.h = 0;
        else if(h<35)
            bar.h = 35;
        else
            bar.h = h;
        document.getElementById("scrollBar1").style.height = bar.h+"px";
    },

    init: function()
    {
        scroller.container = new Array();
        scroller.content = new Array();
        scroller.bar = new Array();
        scroller.up = new Array();
        scroller.down = new Array();
        scroller.track = new Array();
        for (var i = 1; i <= scroller.scrollables; i++)
        {
            scroller.container[i] = new createObjectById('scrollContainer' + i);
            scroller.content[i] = new createObjectById('scrollContent' + i);
            scroller.track[i] = new createObjectById('scrollTrack' + i);
            scroller.track[i].grab = false;
            scroller.bar[i] = new createObjectById('scrollBar' + i);
            scroller.bar[i].grab = false;
            scroller.up[i] = new createObjectById('scrollUp' + i);
            scroller.up[i].grab = false;
            scroller.down[i] = new createObjectById('scrollDown' + i);
            scroller.down[i].grab = false;
            scroller.setBarHeight(scroller.bar[i], scroller.track[i], scroller.container[i], scroller.content[i]);
            if (bw.ie6)
                addEvent(scroller.content[i].el, 'mousewheel', scroller.wheelScroll, false);
        }
        addEvent(document, 'mousemove', scroller.mouseMove, false);
        addEvent(document, 'mousedown', scroller.mouseDown, false);
        addEvent(document, 'mouseup', scroller.mouseUp, false);
        loadFoto();
    }
}

onload = scroller.init;
Avatar billede psykochicken Nybegynder
08. februar 2006 - 12:16 #1
Hvad med Rod Morelos´ egen horisontale scrollbar ;o)

<html>
<head>
<title>scrollbar2</title>
<link rel="stylesheet" type="text/css" href="common.css">

<style type="text/css">
.clContent
{
    position: relative;
    left: 0px;
    top: 0px;
    text-align: justify;
}

#container1
{
    position: absolute;
    overflow: hidden;
    left: 50px;
    top: 50px;
    width: 500px;
    height: 100px;
}

#scrollBar1
{
    position: absolute;
    left: 0px;
    top: 0px;
    width: 100px;
    height: 10px;
    background-color: #999999;
    font-size: 1px;
}

#scrollTrack1
{
    position: absolute;
    left: 50px;
    top: 160px;
    width: 500px;
    height: 10px;
    background-color: #CCCCCC;
    font-size: 1px;
}

#container2
{
    position: absolute;
    overflow: hidden;
    left: 50px;
    top: 250px;
    width: 300px;
    height: 20px;
}

#scrollBar2
{
    position: absolute;
    left: 0px;
    top: 0px;
    width: 50px;
    height: 10px;
    background-color: #999999;
    font-size: 1px;
}

#scrollTrack2
{
    position: absolute;
    left: 50px;
    top: 280px;
    width: 300px;
    height: 10px;
    background-color: #CCCCCC;
    font-size: 1px;
}
</style>

<script type="text/javascript">
// scrollbar2 by rod.rant-on.net | rodmorelos@msn.com
// keep these two lines and you're free to use this code

var scrollbar = {

    scrollables: 2, // set the number of scrollable content here
   
    contentX: 0, dragX: 0, clickX: 0,

    moz: (document.getElementById && navigator.userAgent.toLowerCase().indexOf('mozilla') > -1 && navigator.userAgent.toLowerCase().indexOf('gecko') > -1) ? 1 : 0,

    mouseDown: function(e)
    {
        e = scrollbar.fixEvent(e);
        var target = (e.target.nodeType == 3 || e.target.tagName.toLowerCase() == 'img') ? e.target.parentNode : e.target;
        for (var i = 1; i <= scrollbar.scrollables; i++)
        {
            if (target.id == scrollbar.bar[i].id)
            {
                scrollbar.bar[i].grab = true;
                scrollbar.clickX = e.clientX - scrollbar.bar[i].offsetLeft;
                e.preventDefault();
            }
        }
    },

    mouseUp: function(e)
    {
        for (var i = 1; i <= scrollbar.scrollables; i++)
        {
            scrollbar.bar[i].grab = false;
            scrollbar.bg[i].grab = false;
        }
    },

    mouseMove: function(e)
    {
        for (var i = 1; i <= scrollbar.scrollables; i++)
        {
            if (scrollbar.bar[i].grab && scrollbar.content[i].width > scrollbar.container[i].width)
            {
                e = scrollbar.fixEvent(e);
                scrollbar.dragX = e.clientX - scrollbar.clickX;
                if (scrollbar.dragX < 0) scrollbar.dragX = 0;
                if (scrollbar.dragX > scrollbar.bg[i].width - scrollbar.bar[i].width) scrollbar.dragX = scrollbar.bg[i].width - scrollbar.bar[i].width;
                scrollbar.contentX = 0 - (scrollbar.dragX * (scrollbar.content[i].width - scrollbar.container[i].width) / Math.round(scrollbar.bg[i].width - scrollbar.bar[i].width));
                scrollbar.content[i].style.left = scrollbar.contentX + 'px';
                scrollbar.bar[i].style.left = scrollbar.dragX + 'px';
                e.preventDefault();
            }
        }
    },

    fixEvent: function(e, currentTarget)
    {
        if (!e) e = event;
        if (!e.target) e.target = e.srcElement;
        if (!e.currentTarget) e.currentTarget = currentTarget;
        if (typeof e.clientX == 'undefined') e.clientX = e.pageX;
        if (!e.preventDefault) e.preventDefault = function() { this.returnValue = false; }
        return e;
    },

    init: function()
    {
        scrollbar.container = new Array();
        scrollbar.content = new Array();
        if (scrollbar.moz) scrollbar.contentw = new Array();
        scrollbar.bar = new Array();
        scrollbar.bg = new Array();
        for (var i = 1; i <= scrollbar.scrollables; i++)
        {
            scrollbar.container[i] = document.getElementById('container' + i);
            scrollbar.container[i].width = scrollbar.container[i].offsetWidth;
            scrollbar.content[i] = document.getElementById('content' + i);
            scrollbar.content[i].width = scrollbar.content[i].offsetWidth;
            scrollbar.bar[i] = document.getElementById('scrollBar' + i);
            scrollbar.bar[i].width = scrollbar.bar[i].offsetWidth;
            scrollbar.bar[i].grab = false;
            scrollbar.bg[i] = document.getElementById('scrollTrack' + i);
            scrollbar.bg[i].width = scrollbar.bg[i].offsetWidth;
            scrollbar.bg[i].grab = false;
        }
        document.onmousemove = scrollbar.mouseMove;
        document.onmousedown = scrollbar.mouseDown;
        document.onmouseup = scrollbar.mouseUp;
    }

}

onload = scrollbar.init;
</script>

</head>

<body>

<div id="container1">
<div id="content1" class="clContent">
<nobr>
<img src="dilbert.gif" border="0" width="2835" height="100" alt="">
</nobr>
</div>
</div>

<div id="scrollTrack1"><div id="scrollBar1"></div></div>

<div id="container2">
<div id="content2" class="clContent">
<nobr>
<a href="#">link 1</a> -
<a href="#">link 2</a> -
<a href="#">link 3</a> -
<a href="#">link 4</a> -
<a href="#">link 5</a> - 
<a href="#">link 6</a> - 
<a href="#">link 7</a> - 
<a href="#">link 8</a> - 
<a href="#">link 9</a> - 
<a href="#">link 10</a> -
<a href="#">link 11</a> -
<a href="#">link 12</a> -
<a href="#">link 13</a> -
<a href="#">link 14</a> -
<a href="#">link 15</a> -
<a href="#">link 16</a> -
<a href="#">link 17</a> -
<a href="#">link 18</a> -
<a href="#">link 19</a> -
<a href="#">link 20</a> 
</nobr>
</div>
</div>
<div id="scrollTrack2"><div id="scrollBar2"></div></div>
</body>
</html>

/psc
Avatar billede tblaster Nybegynder
08. februar 2006 - 17:38 #2
Det ligner noget jeg kan bruge, men der er en række ting jeg nok skal have hjælp med at få rettet til. Lad os starte med en ting ad gangen.

Jeg har fjernet hele javascriptet og smidt det i en include js fil for at gøre det nemmere at arbejde med. Det jeg så forsøger er at få rettet div-tagne til så de ikke placeres absolute. Desuden vil jeg heller have stylen direkte på tagen end i en stylesheet. Det er lykkedes fint, lige indtil jeg placerede det helle i en tabel med align=center. Dette gør at scrollen opførere sig underligt. Hvis jeg fjerne alignen så er der ingen problemer. Hvad skal jeg gøre for at få scrollen til at virke i en centreret tabel?

Kode:
--------------------------------------------------------------------------------
<script type="text/javascript" src="horisontal-scroll.js"></script>

<TABLE align="center"><tr><td>
<div id="container1" style="position:relative; width:500px; height:100px; overflow:hidden;">
    <div id="content1" style="position:relative; left:0px; top:0px; text-align:justify;">
        <nobr>
        <a href="#">link 1</a> -
        <a href="#">link 2</a> -
        <a href="#">link 3</a> -
        <a href="#">link 4</a> -
        <a href="#">link 5</a> - 
        <a href="#">link 6</a> - 
        <a href="#">link 7</a> - 
        <a href="#">link 8</a> - 
        <a href="#">link 9</a> - 
        <a href="#">link 10</a> -
        <a href="#">link 11</a> -
        <a href="#">link 12</a> -
        <a href="#">link 13</a> -
        <a href="#">link 14</a> -
        <a href="#">link 15</a> -
        <a href="#">link 16</a> -
        <a href="#">link 17</a> -
        <a href="#">link 18</a> -
        <a href="#">link 19</a> -
        <a href="#">link 20</a> 
        </nobr>
    </div>
</div>
<div id="scrollTrack1" style="width:500px; height:10px; background-color:#CCCCCC; font-size:1px;">
    <div id="scrollBar1" style="position:relative; left:0px; top:0px; width:100px; height:10px; background-color:#999999; font-size:1px;">
    </div>
</div>
</td></tr></table>
--------------------------------------------------------------------------------
Avatar billede psykochicken Nybegynder
09. februar 2006 - 08:00 #3
prøv med
<TABLE align="center">
<tr>
  <td>
  <div id="container1" style="position:relative;top:50px;width:500px;height:100px; overflow:hidden;">
    <div id="content1" style="position:absolute;text-align:justify;">
        <nobr>
        <a href="#">link 1</a> -
        <a href="#">link 2</a> -
        <a href="#">link 3</a> -
        <a href="#">link 4</a> -
        <a href="#">link 5</a> - 
        <a href="#">link 6</a> - 
        <a href="#">link 7</a> - 
        <a href="#">link 8</a> - 
        <a href="#">link 9</a> - 
        <a href="#">link 10</a> -
        <a href="#">link 11</a> -
        <a href="#">link 12</a> -
        <a href="#">link 13</a> -
        <a href="#">link 14</a> -
        <a href="#">link 15</a> -
        <a href="#">link 16</a> -
        <a href="#">link 17</a> -
        <a href="#">link 18</a> -
        <a href="#">link 19</a> -
        <a href="#">link 20</a> 
        </nobr>
    </div>
  </div>
  <div id="scrollTrack1" style="position:relative;width:500px;height:10px; background-color:#CCCCCC;font-size:1px;">
    <div id="scrollBar1" style="position:absolute;width:100px;height:10px; background-color:#999999;font-size:1px;">
    </div>
  </div>
  </td>
</tr>
</table>
Avatar billede tblaster Nybegynder
11. februar 2006 - 12:56 #4
Det hjalp :-D
Næste problem har noget at gøre med at flytte på positionen af indholdet i content1 og scrollbaren, alt efter hvilket billed der vises hvis slideshowet køre automatisk.

Lige nu har jeg lavet følgende, der altså gerne skulle flytte positionen af scrollbaren hen hvor det pågælgende billede er:
sTw = this.bg[id].width;
sBw = this.bar[id].width;
xpos = activeImage*(sTw - sBw)/numberOfImages;
this.bar[id].moveTo(xpos, 0);

Men der sker ikke noget. Jeg har checket sTw, sBw og xpos og de indeholder værdier, så det må være noget med sidste linie. Hvad gør jeg galt?
Avatar billede tblaster Nybegynder
12. februar 2006 - 17:42 #5
Jeg har fået løst ovenståedne problem og har nu blot et enkelt tilbage. Jeg vil gerne have tilføjet en knap i hver side af scrolleren, der gør at man kan trykke (og holde den nede) for at scrolle. Altså på samme måde som i en browser. Hvordan kan jeg gøre det?

Den kode jeg startede med at poste har denne funktionalitet (dog vertikal) men jeg kan ikke gennemskue hvordan det skal skrives om for at virke med den du har postet.
Avatar billede psykochicken Nybegynder
13. februar 2006 - 14:03 #6
Jeg havde søreme også et eksempel med "knapper" liggende ;o)
Ret selv til efter behov:

<html>

<head>
<title>scrollbar2</title>
<link rel="stylesheet" type="text/css" href="common.css">
<script type="text/javascript" src="lib_basic.js"></script>
<script type="text/javascript" src="lib_common.js"></script>
<script type="text/javascript" src="ver_scroller.js"></script>
</head>

<body>
<TABLE align="center">
<tr>
  <td>
    <div id="scrollContainer1" style="position:relative;top:50px;width:500px;height:100px; overflow:hidden;">
      <div id="scrollContent1" style="position:absolute;text-align:justify;">
        <nobr>
        <a href="#">link 1</a> -
        <a href="#">link 2</a> -
        <a href="#">link 3</a> -
        <a href="#">link 4</a> -
        <a href="#">link 5</a> - 
        <a href="#">link 6</a> - 
        <a href="#">link 7</a> - 
        <a href="#">link 8</a> - 
        <a href="#">link 9</a> - 
        <a href="#">link 10</a> -
        <a href="#">link 11</a> -
        <a href="#">link 12</a> -
        <a href="#">link 13</a> -
        <a href="#">link 14</a> -
        <a href="#">link 15</a> -
        <a href="#">link 16</a> -
        <a href="#">link 17</a> -
        <a href="#">link 18</a> -
        <a href="#">link 19</a> -
        <a href="#">link 20</a> 
        </nobr>
      </div>
    </div>
    <div style="position:relative;">
      <div id="scrollLeft1" style="position: absolute;left: -15px;width: 10px;height: 10px;background-color: #999999;    font-size: 1px;"></div>
      <div id="scrollRight1" style="position: absolute;left: 505px;width: 10px;    height: 10px;background-color: #999999;    font-size: 1px;"></div>
      <div id="scrollTrack1" style="position:absolute;width:500px;height:10px; background-color:#CCCCCC;font-size:1px;">
        <div id="scrollBar1" style="position:absolute;width:100px;height:10px; background-color:#999999;font-size:1px;">
        </div>
      </div>
    </div>
  </td>
</tr>
</table>
</body>

</html>

js-filerne kan du hente her:
http://myplayhouse.dk/menu/lib_basic.js
http://myplayhouse.dk/menu/lib_common.js
http://myplayhouse.dk/menu/ver_scroller.js

/psc
Avatar billede tblaster Nybegynder
13. februar 2006 - 18:32 #7
Har du mulighed for at fortælle mig hvad jeg skal tilføje til den oprindelige javascript som du postet for at få scrollen med? Jeg har nemlig ændret en del i javascriptet og har ikke overskud til at skulle starte helt forfra. Kan menlig ikke bare umidelbart kopier mit ind i de 3 filer du har postet ovenfor, da de nye js filer definer alt på en anderledes måde. Eks. er scrolleren nu defineret som scroller og ikke scrollbar.
Avatar billede psykochicken Nybegynder
14. februar 2006 - 15:54 #8
jeg prøver gerne - vis mig dit ændrede script

/psc
Avatar billede tblaster Nybegynder
14. februar 2006 - 16:57 #9
Min scroll ser pt. således ud:
<div id="scrollTrack1" style="position:relative;width:100%;height:10px; background-color:#E9EBF1;font-size:1px;">
  <div id="scrollBar1" style="position:absolute;width:100px;height:10px; background-color:#C3C8D8;font-size:1px;">
  </div>
</div>

horisontal-scroll.js
----------------------
var scrollbar = {

    scrollables: 1, // set the number of scrollable content here
   
    contentX: 0, dragX: 0, clickX: 0,

    moz: (document.getElementById && navigator.userAgent.toLowerCase().indexOf('mozilla') > -1 && navigator.userAgent.toLowerCase().indexOf('gecko') > -1) ? 1 : 0,

    mouseDown: function(e)
    {
        e = scrollbar.fixEvent(e);
        var target = (e.target.nodeType == 3 || e.target.tagName.toLowerCase() == 'img') ? e.target.parentNode : e.target;
        for (var i = 1; i <= scrollbar.scrollables; i++)
        {
            if (target.id == scrollbar.bar[i].id)
            {
                scrollbar.bar[i].grab = true;
                scrollbar.clickX = e.clientX - scrollbar.bar[i].offsetLeft;
                e.preventDefault();
            }
        }
    },

    mouseUp: function(e)
    {
        for (var i = 1; i <= scrollbar.scrollables; i++)
        {
            scrollbar.bar[i].grab = false;
            scrollbar.bg[i].grab = false;
        }
    },

    mouseMove: function(e)
    {
        for (var i = 1; i <= scrollbar.scrollables; i++)
        {
            if (scrollbar.bar[i].grab && scrollbar.content[i].width > scrollbar.container[i].width)
            {
                e = scrollbar.fixEvent(e);
                scrollbar.dragX = e.clientX - scrollbar.clickX;
                if (scrollbar.dragX < 0) scrollbar.dragX = 0;
                if (scrollbar.dragX > scrollbar.bg[i].width - scrollbar.bar[i].width) scrollbar.dragX = scrollbar.bg[i].width - scrollbar.bar[i].width;
                scrollbar.contentX = 0 - (scrollbar.dragX * (scrollbar.content[i].width - scrollbar.container[i].width) / Math.round(scrollbar.bg[i].width - scrollbar.bar[i].width));
                scrollbar.content[i].style.left = scrollbar.contentX + 'px';
                scrollbar.bar[i].style.left = scrollbar.dragX + 'px';
                e.preventDefault();
            }
        }
    },

    fixEvent: function(e, currentTarget)
    {
        if (!e) e = event;
        if (!e.target) e.target = e.srcElement;
        if (!e.currentTarget) e.currentTarget = currentTarget;
        if (typeof e.clientX == 'undefined') e.clientX = e.pageX;
        if (!e.preventDefault) e.preventDefault = function() { this.returnValue = false; }
        return e;
    },

    setBarWidth: function()
    {
        var sTw = document.getElementById("content1").width; // width of scroll area
        var sw = document.getElementById("scrollTrack1").width; // Max scroll width
        var w = Math.round(sw*sw/sTw);
       
        var s = document.getElementById("slideshowet").style.width;
       
        if(sw > sTw)
        {
            w = 0;
        }
        document.getElementById("scrollBar1").style.width = w+"px";
    },
   
    moveScrollContent: function(id, numberOfImages, activeImage)
    {
        //alert("Antal billeder:" + numberOfImages + ", Id på scroller:" + id + ", Valgt billed:" + activeImage);
       
        sTw = this.bg[id].width;
        sBw = this.bar[id].width;
        cw    = this.content[id].width
        ctw = this.container[id].width
       
        // Første 3 billede
        if(activeImage<4)
        {
            xpos  = 0
            xpos2 = 0
        }
        // Alle billeder undtagen de sidste 3, og de første 3
        else if(activeImage<numberOfImages-2)
        {
            xpos  = activeImage*(sTw - sBw)/numberOfImages;
            xpos2 = ((activeImage*cw/numberOfImages)-cw/numberOfImages)-ctw/2+100;
        }
        // De sidste 2 billeder
        else
        {
            xpos  = sTw - sBw;
            xpos2 = cw - ctw;
        }
       
        document.getElementById("scrollBar1").style.left = xpos;
        document.getElementById("content1").style.left = -xpos2;
       
    },
   
    init: function()
    {
        scrollbar.container = new Array();
        scrollbar.content = new Array();
        if (scrollbar.moz) scrollbar.contentw = new Array();
        scrollbar.bar = new Array();
        scrollbar.bg = new Array();
        for (var i = 1; i <= scrollbar.scrollables; i++)
        {
            scrollbar.container[i] = document.getElementById('container' + i);
            scrollbar.container[i].width = scrollbar.container[i].offsetWidth;
            scrollbar.content[i] = document.getElementById('content' + i);
            scrollbar.content[i].width = scrollbar.content[i].offsetWidth;
            scrollbar.bar[i] = document.getElementById('scrollBar' + i);
            scrollbar.bar[i].width = scrollbar.bar[i].offsetWidth;
            scrollbar.bar[i].grab = false;
            scrollbar.bg[i] = document.getElementById('scrollTrack' + i);
            scrollbar.bg[i].width = scrollbar.bg[i].offsetWidth;
            scrollbar.bg[i].grab = false;
            scrollbar.setBarWidth();
            scrollbar.container[i].width = scrollbar.container[i].offsetWidth;
            scrollbar.content[i].width = scrollbar.content[i].offsetWidth;
            scrollbar.bar[i].width = scrollbar.bar[i].offsetWidth;
            scrollbar.bg[i].width = scrollbar.bg[i].offsetWidth;
        }
        document.onmousemove = scrollbar.mouseMove;
        document.onmousedown = scrollbar.mouseDown;
        document.onmouseup = scrollbar.mouseUp;
    }

}

onload = scrollbar.init;
Avatar billede tblaster Nybegynder
15. februar 2006 - 17:16 #10
Jeg har lige konstateret at scrolleren ikke virker i firefox. Det lader til at den kun er kompatibel med IE. Det er vigtigt at den også kan køre i firefox og andre browser.

Se følgende eksempel som kan køre i både IE og firefox:
http://www.mortenprom.com/bildearkiv/lille-hus.html

Jeg tror vi skal starte forfra. Kan du poste et vertikalt system, der er cross-browser kompatibel og som har scrollknapper. Altså en udgave som i ovenstående link der blot er horisontal istedet for vertikal?
Avatar billede psykochicken Nybegynder
20. marts 2006 - 14:41 #11
Hov...her var da et glemt spørgsmål. Det må du undskylde. Hvis du stadig mangler en løsning, så kig på: http://www.dyn-web.com/dhtml/scroll/

/psc
Avatar billede tblaster Nybegynder
17. juni 2006 - 21:39 #12
Smid et svar og lad os få lukket spørgsmålet.
Avatar billede psykochicken Nybegynder
19. juni 2006 - 10:21 #13
Håber du fandt noget brugbart.....ellers tager du selvfølgelig selv pointene ;o)
Avatar billede psykochicken Nybegynder
19. juni 2006 - 14:27 #14
så takker jeg for point ;o)
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