문제

After using Packer (http://dean.edwards.name/packer/) I end up throwing a missing ; after (the long packer string). I have no idea of the what and why. possible fix and explanation please?

jQuery.fn.extend({
ImageRotate:function(parameters)
{   
    if (this.Wilq32&&this.Wilq32.PhotoEffect) return;
    return (new Wilq32.PhotoEffect(this.get(0),parameters))._temp;
},
rotate:function(parameters)
{
    if (this.length===0) return;
    if (typeof parameters=="undefined") return;
    if (typeof parameters=="number") parameters={angle:parameters};
    var returned=[];
    for (var i=0,i0=this.length;i<i0;i++)
    {
        var element=this.get(i);    
        if (typeof element.Wilq32 == "undefined") 
            returned.push($($(element).ImageRotate(parameters)));
        else 
        {
            element.Wilq32.PhotoEffect._rotate(parameters.angle);
        }
    }
    return returned;
},

rotateAnimation:function(parameters)
{
    if (this.length===0) return;
    if (typeof parameters=="undefined") return;
    if (typeof parameters=="number") parameters={angle:parameters};
    var returned=[];
    for (var i=0,i0=this.length;i<i0;i++)
    {   
        var element=this.get(i);
        if (typeof element.Wilq32 == "undefined") 
            returned.push($($(element).ImageRotate(parameters)));
        else 
        {
            element.Wilq32.PhotoEffect._parameters.animateAngle = parameters.angle;
            element.Wilq32.PhotoEffect._parameters.callback = parameters.callback ||
            function()
            {
            };
            element.Wilq32.PhotoEffect._animateStart();
        }
    }
    return returned;
}

});

Wilq32={};

Wilq32.PhotoEffect=function(img,parameters)
{
            this._IEfix=img;
            this._parameters=parameters;
            this._parameters.className=img.className;
            this._parameters.id=img.getAttribute('id');

            if (!parameters) this._parameters={};
            this._angle=0;
            if (!parameters.angle) this._parameters.angle=0;
            this._temp=document.createElement('span');
            this._temp.Wilq32 = 
                {
                    PhotoEffect: this
                };          
            var image=img.src;
            img.parentNode.insertBefore(this._temp,img);
            this._img= new Image();
            this._img.src=image;
            this._img._ref=this;
            jQuery(this._img).bind("load", function()
            {
                this._ref._Loader.call(this._ref);
            });
            if (jQuery.browser.msie) if (this._img.complete) this._Loader();
}

Wilq32.PhotoEffect.prototype._Loader=
(function()
{
    if (jQuery.browser.msie)
    return function()
    {
        var src=this._IEfix.src;
        this._IEfix.parentNode.removeChild(this._IEfix);
        this._temp.setAttribute('id',this._parameters.id);
        this._temp.className=this._parameters.className;
        var width=this._img.width;
        var height=this._img.height;

        this._img._widthMax=this._img._heightMax=Math.sqrt((height)*(height) + (width) * (width));
        this._img._heightMax=Math.sqrt((height)*(height) + (width) * (width));

        this._vimage = document.createElement('v:image');
        this._vimage._ref=this;
        this._vimage.style.height=height;
        this._vimage.style.width=width;
        this._vimage.style.position="relative";
        this._temp.style.display="inline-block";
        this._temp.style.width=this._temp.style.height=this._img._heightMax;
        this._vimage.src=src;
        this._vimage.rotate=0;
        this._temp.appendChild(this._vimage);

        var self = this;
        this._parameters.animateAngle=0;
        if (this._parameters.bind) 
        {
            for (var a in this._parameters.bind) if (this._parameters.bind.hasOwnProperty(a)) 
            for (var b in this._parameters.bind[a]) if (this._parameters.bind[a].hasOwnProperty(b)) 
            jQuery(this._temp).bind(b,this._parameters.bind[a][b]);
        }
        this._rotate(this._parameters.angle);       

    }
    else
    return function ()
    {
        this._IEfix.parentNode.removeChild(this._IEfix);
        this._temp.setAttribute('id',this._parameters.id);
        this._temp.className=this._parameters.className;
        var width=this._img.width;
        var height=this._img.height;

        this._img._widthMax=this._img._heightMax=Math.sqrt((height)*(height) + (width) * (width));

        this._canvas=document.createElement('canvas');
        this._canvas._ref=this;
        this._canvas.height=height;
        this._canvas.width=width;

        this._canvas.setAttribute('width',width);

        this._temp.appendChild(this._canvas);

        var self = this;
        this._parameters.animateAngle=0;
        if (this._parameters.bind) 
        {
            for (var a in this._parameters.bind) if (this._parameters.bind.hasOwnProperty(a)) 
            for (var b in this._parameters.bind[a]) if (this._parameters.bind[a].hasOwnProperty(b)) 
            jQuery(this._canvas).bind(b,this._parameters.bind[a][b]);
        }
        this._cnv=this._canvas.getContext('2d');
        this._rotate(this._parameters.angle);
    }

})();

Wilq32.PhotoEffect.prototype._animateStart=function()
{   
    if (this._timer) clearTimeout(this._timer);
    this._animate();
}
Wilq32.PhotoEffect.prototype._animate=function()
{   
    var temp=this._angle;
    if (typeof this._parameters.animateAngle!="undefined") this._angle-=(this._angle-this._parameters.animateAngle)*0.1;
    if (typeof this._parameters.minAngle!="undefined") if (this._angle<this._parameters.minAngle) this._angle=this._parameters.minAngle;
    if (typeof this._parameters.maxAngle!="undefined") if (this._angle>this._parameters.maxAngle) this._angle=this._parameters.maxAngle; 

    if (Math.round(this._angle * 100 - temp * 100) == 0 && this._timer) 
        {
            clearTimeout(this._timer);
            if (this._parameters.callback) 
                this._parameters.callback();
        }
        else 
        {
            this._rotate(this._angle);
            var self = this;
            this._timer = setTimeout(function()
            {
                self._animate.call(self);
            }, 10);
        }
}

Wilq32.PhotoEffect.prototype._rotate = (function()
{
    if (jQuery.browser.msie)
    return function(angle)
    {
        this._vimage.style.rotation=angle;
        var radians=angle*Math.PI/180;
        this._vimage.style.top=  (this._img._heightMax - this._img.height)/2- (this._vimage.offsetHeight-this._img.height)/2 +"px";
        this._vimage.style.left= (this._img._widthMax - this._img.width)/2- (this._vimage.offsetWidth-this._img.width)/2 +"px";
    }
    else
    return function(angle)

    {

        if (!this._img.width) return;
        if (typeof angle!="number") return;
        angle=(angle%360)* Math.PI / 180;
        var width=this._img.width;
        var height=this._img.height;
        var widthAdd = this._img._widthMax - width;
        var heightAdd = this._img._heightMax - height;
        this._canvas.width = width+widthAdd;
        this._canvas.height = height+heightAdd;
        this._cnv.save();
        this._cnv.translate(widthAdd/2,heightAdd/2);
        this._cnv.translate(width/2,height/2); 
        this._cnv.rotate(angle);
        this._cnv.translate(-width/2,-height/2);
        this._cnv.drawImage(this._img, 0, 0);
        this._cnv.restore();
    }


})();
도움이 되었습니까?

해결책

Packer jams everything onto one line if I'm not mistaken so that any missing semicolons that would have been originally parsed OK turn into hard errors.

There are a few missing semicolons in your js for example

return function(angle)
{
    this._vimage.style.rotation=angle;
    var radians=angle*Math.PI/180;
    this._vimage.style.top=  (this._img._heightMax - this._img.height)/2- (this._vimage.offsetHeight-this._img.height)/2 +"px";
    this._vimage.style.left= (this._img._widthMax - this._img.width)/2- (this._vimage.offsetWidth-this._img.width)/2 +"px";
}

is missing a semicolon. there are more.

다른 팁

Here's a nice site which will tell you what is wrong with your javascript: http://jslint.com/

So paste your code there, click on the JSLint button and observe the errors and warnings you get. Once you fix them you may be confident that when packed your javascript will work.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top