2017-05-07 5 views
0

私は角度プロジェクタで作業しています。私は自分のプロジェクトに2つのjavascriptファイルを追加したいので、それらのjsファイルを私のアセットに入れて、角柱スクリプト部分で呼び出してください。 。私はそれらのファイルはcorrectyと呼ばれていることをjavascriptファイルを私の角2のプロジェクタにインポート

を見ることができますが、私はこの問題を持っている: enter image description here

私のhtmlコードは次のとおりです。

<div class=" demo-1"> 
    <div class="content"> 
    <div id="large-header" class="large-header"> 
     <canvas id="demo-canvas"></canvas> 
     <h1 class="main-title">ALTEN <span class="thin">GAV²</span></h1> 
    </div> 
    </div> 
</div><!-- /container --> 

と私のjsのコードは次のとおりです。

(function() { 

    var width, height, largeHeader, canvas, ctx, points, target, animateHeader = true; 

    // Main 
    initHeader(); 
    initAnimation(); 
    addListeners(); 

    function initHeader() { 
     width = window.innerWidth; 
     height = window.innerHeight; 
     target = {x: width/2, y: height/2}; 
     largeHeader = document.getElementById('large-header'); 
     largeHeader.style.height = height+'px'; 

     canvas = document.getElementById('demo-canvas'); 

     canvas.width = width; 
     canvas.height = height; 
     ctx = canvas.getContext('2d'); 

     // create points 
     points = []; 
     for(var x = 0; x < width; x = x + width/20) { 
      for(var y = 0; y < height; y = y + height/20) { 
       var px = x + Math.random()*width/20; 
       var py = y + Math.random()*height/20; 
       var p = {x: px, originX: px, y: py, originY: py }; 
       points.push(p); 
      } 
     } 

     // for each point find the 5 closest points 
     for(var i = 0; i < points.length; i++) { 
      var closest = []; 
      var p1 = points[i]; 
      for(var j = 0; j < points.length; j++) { 
       var p2 = points[j] 
       if(!(p1 == p2)) { 
        var placed = false; 
        for(var k = 0; k < 5; k++) { 
         if(!placed) { 
          if(closest[k] == undefined) { 
           closest[k] = p2; 
           placed = true; 
          } 
         } 
        } 

        for(var k = 0; k < 5; k++) { 
         if(!placed) { 
          if(getDistance(p1, p2) < getDistance(p1, closest[k])) { 
           closest[k] = p2; 
           placed = true; 
          } 
         } 
        } 
       } 
      } 
      p1.closest = closest; 
     } 

     // assign a circle to each point 
     for(var i in points) { 
      var c = new Circle(points[i], 2+Math.random()*2, 'rgba(255,255,255,0.3)'); 
      points[i].circle = c; 
     } 
    } 

    // Event handling 
    function addListeners() { 
     if(!('ontouchstart' in window)) { 
      window.addEventListener('mousemove', mouseMove); 
     } 
     window.addEventListener('scroll', scrollCheck); 
     window.addEventListener('resize', resize); 
    } 

    function mouseMove(e) { 
     var posx = posy = 0; 
     if (e.pageX || e.pageY) { 
      posx = e.pageX; 
      posy = e.pageY; 
     } 
     else if (e.clientX || e.clientY) { 
      posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; 
      posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; 
     } 
     target.x = posx; 
     target.y = posy; 
    } 

    function scrollCheck() { 
     if(document.body.scrollTop > height) animateHeader = false; 
     else animateHeader = true; 
    } 

    function resize() { 
     width = window.innerWidth; 
     height = window.innerHeight; 
     largeHeader.style.height = height+'px'; 
     canvas.width = width; 
     canvas.height = height; 
    } 

    // animation 
    function initAnimation() { 
     animate(); 
     for(var i in points) { 
      shiftPoint(points[i]); 
     } 
    } 

    function animate() { 
     if(animateHeader) { 
      ctx.clearRect(0,0,width,height); 
      for(var i in points) { 
       // detect points in range 
       if(Math.abs(getDistance(target, points[i])) < 4000) { 
        points[i].active = 0.3; 
        points[i].circle.active = 0.6; 
       } else if(Math.abs(getDistance(target, points[i])) < 20000) { 
        points[i].active = 0.1; 
        points[i].circle.active = 0.3; 
       } else if(Math.abs(getDistance(target, points[i])) < 40000) { 
        points[i].active = 0.02; 
        points[i].circle.active = 0.1; 
       } else { 
        points[i].active = 0; 
        points[i].circle.active = 0; 
       } 

       drawLines(points[i]); 
       points[i].circle.draw(); 
      } 
     } 
     requestAnimationFrame(animate); 
    } 

    function shiftPoint(p) { 
     TweenLite.to(p, 1+1*Math.random(), {x:p.originX-50+Math.random()*100, 
      y: p.originY-50+Math.random()*100, ease:Circ.easeInOut, 
      onComplete: function() { 
       shiftPoint(p); 
      }}); 
    } 

    // Canvas manipulation 
    function drawLines(p) { 
     if(!p.active) return; 
     for(var i in p.closest) { 
      ctx.beginPath(); 
      ctx.moveTo(p.x, p.y); 
      ctx.lineTo(p.closest[i].x, p.closest[i].y); 
      ctx.strokeStyle = 'rgba(156,217,249,'+ p.active+')'; 
      ctx.stroke(); 
     } 
    } 

    function Circle(pos,rad,color) { 
     var _this = this; 

     // constructor 
     (function() { 
      _this.pos = pos || null; 
      _this.radius = rad || null; 
      _this.color = color || null; 
     })(); 

     this.draw = function() { 
      if(!_this.active) return; 
      ctx.beginPath(); 
      ctx.arc(_this.pos.x, _this.pos.y, _this.radius, 0, 2 * Math.PI, false); 
      ctx.fillStyle = 'rgba(156,217,249,'+ _this.active+')'; 
      ctx.fill(); 
     }; 
    } 

    // Util 
    function getDistance(p1, p2) { 
     return Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2); 
    } 

})(); 

jsでlargeHeaderの変数をログに記録しようとするとnullが返されます。 このコードは正しく動作します。角張った形でそれを含むことは問題を引き起こす。 はwebpackの問題ですか? ありがとうございました

+0

angular-cli.jsonに保存されますか? –

答えて

1

あなたが使用しているビルドツールを言うことが重要です。それはWebPACKの(。すなわち角度CLI)基づいているなら、あなたは、次のいずれかのJavaScriptファイル(または他のタイプ)を参照することができます。

import * as test from './test.js'; 
// or 
require('./test.js'); 

をしかし、あなたのエラーメッセージがあなたのJavaScriptが実行されていることを示しているが、それはですこれらのラインに失敗:それはID large-headerを使用してページ上の要素を見つけていないので、.styleへの呼び出しが失敗した

largeHeader = document.getElementById('large-header'); 
largeHeader.style.height = height+'px'; 

。私は、トップレベルのHTMLページからファイルをインポートしているため、テンプレートがレンダリングされる前にJavaScriptコードが実行されているため、その時点でlarge-header要素が作成されていないと思われます。

さらに診断するには、Chrome Dev Toolsの[Sources]タブを使用して問題の行にブレークポイントを設定し、Elementsタブを調べて、実際にこの時点でdivが存在するかどうかを確認します。

私はあなたがここで達成しようとしていることを正確にはわかりませんが、「角度のある世界」の一部ではないJavaScriptの任意のビットを投げ込むことは、角度のあるアプリにアプローチする最良の方法ではないかもしれません。長期的には、おそらく、このコードをコンポーネントまたはディレクティブにリファクタリングする方がよいでしょう。

関連する問題