Avatar billede donslund Nybegynder
31. januar 2006 - 13:04 Der er 2 kommentarer og
1 løsning

Javascript der ikke vireker i FF men i IE

Denne kode: (Er desværre meget lang, beklager)

var debugActive = true;
function debug( txt ) {
    if ( debugActive ) debugActive=confirm( txt );
}; //end debug( string )


function verifyCompatibleBrowser(){
    this.ver=navigator.appVersion
    this.dom=document.getElementById?1:0
    this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;
    this.ie4=(document.all && !this.dom)?1:0;
    this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
    this.ns4=(document.layers && !this.dom)?1:0;
    this.bw=(this.ie5 || this.ie4 || this.ns4 || this.ns5)
    return this
}
bw=new verifyCompatibleBrowser()


var speed=50

var loop, timer

function ConstructObject(obj,nest){
    nest= (!nest)
          ? ''
          : 'document.'+nest+'.';
    this.el=bw.dom
            ? document.getElementById(obj)
            : bw.ie4
              ? document.all[obj]
              : bw.ns4
                ? eval(nest+'document.'+obj)
                : 0;
    this.css=bw.dom
            ? document.getElementById(obj).style
            : bw.ie4
              ? document.all[obj].style
              : bw.ns4
                ? eval(nest+'document.'+obj)
                : 0;
    this.scrollWidth=bw.ns4
                    ? this.css.document.width
                    : this.el.offsetWidth;
    this.clipWidth=bw.ns4
                  ? this.css.clip.width
                  : this.el.offsetWidth;
    this.leftx= MoveAreaLeft;
    this.rightx=MoveAreaRight;
    this.MoveArea=MoveArea;
    this.x;
    this.y;
    this.obj = obj + "Object"
    eval(this.obj + "=this")
    return this
}
function MoveArea(x,y){
    this.x=x; this.y=y;
    this.css.left=this.x;
    this.css.top=this.y;
}

function MoveAreaRight(move){
//  debug ( "MoveAreaRight("+move+") kaldt. this.x = " +this.x );
//  debug ( "bredde "+ 320 +" -" +this.scrollWidth );
//    if(this.x>objContainer.clipWidth-this.scrollWidth){
    if(this.x>674-this.scrollWidth){
    this.MoveArea(this.x-move,0)
    if(loop) setTimeout(this.obj+".rightx("+move+")",speed)
    }
}
function MoveAreaLeft(move){
//  debug ( "MoveAreaLeft("+move+") kaldt. this.x = " +this.x );
    if(0>this.x){
    this.MoveArea(this.x-move,0)
    if(loop) setTimeout(this.obj+".leftx("+move+")",speed)
    }
}

function PerformScroll(speed){
//  debug ( "PerformScroll("+speed+") kaldt" );
    if(initialised){
        loop=true;
        if(speed>0) objScroller.rightx(speed)
        else objScroller.leftx(speed)
    }
}

function CeaseScroll(){
    loop=false
    if(timer) clearTimeout(timer)
}
var initialised;
function InitialiseScrollableArea(){
    objContainer=new ConstructObject('divContainer');
    objScroller=new ConstructObject('divContent','divContainer');
    objScroller.MoveArea(0,0);
    objContainer.css.visibility='visible';
    initialised=true;
}
// end absolutely positioned scrollable area object scripts


Virker i IE men ikke i FireFox.
Hvilke ting skal man være opmærksom på for at de virker begge steder. Det virker i øvrigt heller ikke på MAC.
Avatar billede olebole Juniormester
01. februar 2006 - 00:44 #1
<ole>

Hvad skal der ske?
Hvad sker der?
Hvad sker der ikke?
Får du fejlmeddelelser?
Hvis du får fejlmeddelelser, hvad siger de så?
Kan du evt. oplyse andet, du kunne forestille dig, ville hjælpe os med at hjælpe dig?

/mvh
</bole>
Avatar billede olebole Juniormester
01. februar 2006 - 02:10 #2
- mon ikke, det er fordi, du skal have enheder på alle style-properties? Dette vil virke i IE:
    val = 31;
    [ELEMENT].style.left = val;

- hvilket er en fejl. Der skal stå:
    val = 31;
    [ELEMENT].style.left = val + "px";

- og  det er, hvad de fleste andre browsere forstår  ;o)
Avatar billede donslund Nybegynder
02. februar 2006 - 08:21 #3
Jeg fandt ud af, at denne linie if(this.x>674-this.scrollWidth){ var problemet. Hvis jeg ændrede de 674 til et andet tal, begyndte scrollen at virke i FF, men kørte forkert i IE.
Så jeg lavede en browserdetection, der satte denne vidde til noget hvis det var IE og noget andet hvis det var FF.
Nu kører det i hvert fald uden problemer.
Har også sat noget cookie på, så scrollen er samme sted selvom man refresher.
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