2017-10-19 76 views
0

我有两块脚本(JS + CANVAS),它们在每个页面上都不需要,但它们包含在全局JS文件中,因此有几个出现控制台错误。停止脚本在不需要的页面上运行

我设法解决类似的问题,通过检查父div在页面上运行脚本之前,通过包装它像这样:if ($('#parent-div').length > 0) {} ...但我似乎无法得到与其他脚本一起工作我遇到了问题。

脚本的第一位是相对较短:

$(function(){ 
    var scene = document.getElementById('metropallax'); 
    var parallaxInstance = new Parallax(scene, { 
     relativeInput: true, 
     calibrateX: false, 
     calibrateY: true, 
     invertX: false, 
     invertY: true, 
     limitX: false, 
     //limitY: 10, 
     limitY: 0, 
     scalarX: 2, 
     scalarY: 8, 
     frictionX: 0.2, 
     frictionY: 0.8, 
     originX: 0.0, 
     originY: 1.0 
    }); 
}); 

我想象我以前给将与此,但显然没有工作得很好的例子。可能是在做一些愚蠢的事情/缺少一些明显的事情。

canvas脚本它冗长得可笑,但我会包括这一切,因为我认为这会是最好的:

$(function(){ 

    // Create an array to store our particles 
    var particles = []; 

    // The amount of particles to render 
    var particleCount = 8; 
    // Orig 30 

    // The maximum velocity in each direction 
    var maxVelocity = 4; 

    // The target frames per second (how often do we want to update/redraw the scene) 
    var targetFPS = 24; 
    // Orig 33 

    // Set the dimensions of the canvas as variables so they can be used. 
    var canvasWidth = 400; 
    var canvasHeight = 400; 

    // Create an image object (only need one instance) 
    var imageObj = new Image(); 

    // Once the image has been downloaded then set the image on all of the particles 
    imageObj.onload = function() { 
     particles.forEach(function(particle) { 
       particle.setImage(imageObj); 
     }); 
    }; 

    // Once the callback is arranged then set the source of the image 
    imageObj.src = "http://www.blog.jonnycornwell.com/wp-content/uploads/2012/07/Smoke10.png"; 

    // A function to create a particle object. 
    function Particle(context) { 

     // Set the initial x and y positions 
     this.x = 0; 
     this.y = 0; 

     // Set the initial velocity 
     this.xVelocity = 0; 
     this.yVelocity = 0; 

     // Set the radius 
     this.radius = 5; 

     // Store the context which will be used to draw the particle 
     this.context = context; 

     // The function to draw the particle on the canvas. 
     this.draw = function() { 

      // If an image is set draw it 
      if(this.image){ 
       this.context.drawImage(this.image, this.x-128, this.y-128);   
       // If the image is being rendered do not draw the circle so break out of the draw function     
       return; 
      } 
      // Draw the circle as before, with the addition of using the position and the radius from this object. 
      this.context.beginPath(); 
      this.context.arc(this.x, this.y, this.radius, 0, 2 * Math.PI, false); 
      this.context.fillStyle = "rgba(0, 255, 255, 1)"; 
      this.context.fill(); 
      this.context.closePath(); 
     }; 

     // Update the particle. 
     this.update = function() { 
      // Update the position of the particle with the addition of the velocity. 
      this.x += this.xVelocity; 
      this.y += this.yVelocity; 

      // Check if has crossed the right edge 
      if (this.x >= canvasWidth) { 
       this.xVelocity = -this.xVelocity; 
       this.x = canvasWidth; 
      } 
      // Check if has crossed the left edge 
      else if (this.x <= 0) { 
       this.xVelocity = -this.xVelocity; 
       this.x = 0; 
      } 

      // Check if has crossed the bottom edge 
      if (this.y >= canvasHeight) { 
       this.yVelocity = -this.yVelocity; 
       this.y = canvasHeight; 
      } 

      // Check if has crossed the top edge 
      else if (this.y <= 0) { 
       this.yVelocity = -this.yVelocity; 
       this.y = 0; 
      } 
     }; 

     // A function to set the position of the particle. 
     this.setPosition = function(x, y) { 
      this.x = x; 
      this.y = y; 
     }; 

     // Function to set the velocity. 
     this.setVelocity = function(x, y) { 
      this.xVelocity = x; 
      this.yVelocity = y; 
     }; 

     this.setImage = function(image){ 
      this.image = image; 
     } 
    } 

    // A function to generate a random number between 2 values 
    function generateRandom(min, max){ 
     return Math.random() * (max - min) + min; 
    } 

    // The canvas context if it is defined. 
    var context; 

    // Initialise the scene and set the context if possible 
    function init() { 
     var canvas = document.getElementById('smoke'); 
     if (canvas.getContext) { 

      // Set the context variable so it can be re-used 
      context = canvas.getContext('2d'); 

      // Create the particles and set their initial positions and velocities 
      for(var i=0; i < particleCount; ++i){ 
       var particle = new Particle(context); 

       // Set the position to be inside the canvas bounds 
       particle.setPosition(generateRandom(0, canvasWidth), generateRandom(0, canvasHeight)); 

       // Set the initial velocity to be either random and either negative or positive 
       particle.setVelocity(generateRandom(-maxVelocity, maxVelocity), generateRandom(-maxVelocity, maxVelocity)); 
       particles.push(particle);    
      } 
     } 
     else { 
      alert("Please use a modern browser"); 
     } 
    } 

    // The function to draw the scene 
    function draw() { 
     // Clear the drawing surface and fill it with a black background 
     context.fillStyle = "rgba(0, 0, 0, 0.5)"; 
     context.fillRect(0, 0, 400, 400); 

     // Go through all of the particles and draw them. 
     particles.forEach(function(particle) { 
      particle.draw(); 
     }); 
    } 

    // Update the scene 
    function update() { 
     particles.forEach(function(particle) { 
      particle.update(); 
     }); 
    } 

    // Initialize the scene 
    init(); 

    // If the context is set then we can draw the scene (if not then the browser does not support canvas) 
    if (context) { 
     setInterval(function() { 
      // Update the scene befoe drawing 
      update(); 

      // Draw the scene 
      draw(); 
     }, 1000/targetFPS); 
    } 
}); 

我以为有什么东西在那里我可以指定使用if声明,但我的天堂”吨发现它呢。任何人都可以建议吗?

回答

1

我不知道这是否适用于您,但我会使用放置在body元素上的类来指示脚本是否应该运行。例如:

<body class="canvas-on"> 

检查每个脚本开始处的类。

或者你可以尝试使用类似RequireJS的东西来加载需要的js文件,这些js文件基于上面提到的body类机制,如果不需要,可以跳过加载文件。

+0

谢谢,这似乎是一个好主意,但我不认为我可以将不同的类添加到不同页面的主体标签。否则,这将是理想的! – user1406440

+0

你可以在你的代码中改变什么?正在使用一个CMS什么的? –

+0

JavaScript文件本身。只是想在运行它之前检查父代码/类的相关位代码。 – user1406440

相关问题