2017-10-16 16 views
1

私はangularjsを初めて使っています。私は "生成"ボタンをクリックした後5秒後にラッキーナンバーを生成するこのラッキーナンバージェネレーターアプリをコーディングしました。私は、5秒間で完了し、結果を表示するプログレスバーを追加したいと思います。現在の進行状況バーは、ページが読み込まれるとすぐに表示されます。これを避ける方法は?AngularJS Lucky number generator:プログレスバーアニメーションを追加するには?

var app = angular.module('myApp', []); 
 
app.controller('myCtrl', function($scope, $timeout) { 
 
    $scope.show = true; 
 
    
 
    $scope.$timeout = $timeout; 
 
    
 
    $scope.generate = function() { 
 
    var k = Math.floor(Math.random() * 10 + 1); 
 
    if (k == $scope.userinput) { 
 
     $scope.result = "Hooray! You won $10000!"; 
 
    } else { 
 
     $scope.result = "Lucky number generated: " + k + "Try again!"; 
 
    } 
 

 
    }; 
 
});
<!DOCTYPE html> 
 
<html> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
 

 
<body> 
 
    <style> 
 
    #progressbar { 
 
     height: 5px; 
 
     width: 100%; 
 
     background-color: red; 
 
     animation-name: prgb; 
 
     animation-duration: 5s; 
 
    } 
 
    
 
    @keyframes prgb { 
 
     0% { 
 
     width: 0%; 
 
     } 
 
     25% { 
 
     width: 25%; 
 
     } 
 
     50% { 
 
     width: 50%; 
 
     } 
 
     75% { 
 
     width: 75%; 
 
     } 
 
     100% { 
 
     width: 100%; 
 
     } 
 
    } 
 
    </style> 
 
    <div ng-app="myApp" ng-controller="myCtrl"> 
 
    Enter number between 0-10: <input type="text" ng-model="userinput"> 
 
    <button ng-click="$timeout(generate, 5000);">Generate</button><br><br> 
 
    <div id="progressbar" ng-show="show" ng-initialize="show=false;"></div> 
 
    <div>{{result}}</div> 
 
    </div> 
 
</body> 
 

 
</html>

答えて

0

これらすべての進捗バーを指示文とする角度のある素材を試してください。私は見てください、コードのペンは、それが役立つかもしれ作成した

https://codepen.io/anon/pen/yzQypK?editors=1111

参照: https://material.angularjs.org/latest/demo/progressLinear

var app = angular.module('myApp', ['ngMaterial']); 
app.controller('myCtrl', function($scope, $timeout, $interval) { 
    $scope.show = true; 

    $scope.$timeout = $timeout; 

    $scope.determinateValue = 0; 

    $scope.generate = function() { 
    var k = Math.floor(Math.random() * 10 + 1); 
    if (k == $scope.userinput) { 
     $scope.result = "Hooray! You won $10000!"; 
    } else { 
     $scope.result = "Lucky number generated: " + k + "Try again!"; 
    } 

    $interval.cancel(progress); 
    $scope.determinateValue = 100; 
    }; 

    var progress; 
    $scope.startProgress = function(){ 
    $scope.result=""; 
    $scope.determinateValue = -5; 
    progress = $interval(function() { 
     $scope.determinateValue += 2; 
    }, 90); 
    } 
}); 

HTML

<!-- Angular Material requires Angular.js Libraries --> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-animate.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-aria.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-messages.min.js"></script> 

<!-- Angular Material Library --> 
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0/angular-material.min.js"></script> 

<div ng-app="myApp" ng-controller="myCtrl"> 
    <md-input-container> 
    <label>Enter number between 0-10</label> 
    <input ng-model="userinput"> 
    </md-input-container> 
    <md-button md-raised ng-click="$timeout(generate, 5000); startProgress();">Generate</md-button> 
    <br> 
    <br> 
    <md-progress-linear md-mode="determinate" value="{{determinateValue}}"></md-progress-linear> 
    <div>{{result}}</div> 
</div> 
0

あなたはプログレスバー上ng-initializeを上書きしているとすぐに、コントローラがロードされるようtrue$scope.showを設定しているので、バーがすぐに表示されている理由があります。

代わりにng-initialize="show=false;"を削除し、$scope.show = true;$scope.show = false;に変更すると、ロード時にプログレスバーが表示されなくなります。

これを実行すると、ボタンをクリックしても進行状況バーが表示されなくなります。 $scope.show = true;をどこかに設定し、タイムアウトを修正する必要があります。これにあなたの$scope.generate機能を変更ng-click="generate()"にごbutton要素の変更ng-click="$timeout(generate, 5000);"で、あなたのコントローラで

:ボタンをクリックすると

$scope.generate = function() 
{ 
    $scope.show = true; 

    $timeout(function() 
    { 
     var k = Math.floor(Math.random() * 10 + 1); 

     if (k == $scope.userinput) { 
      $scope.result = "Hooray! You won $10000!"; 
     } else { 
      $scope.result = "Lucky number generated: " + k + " Try again!"; 
     } 
    }, 5000); 
}; 

これが最初に実行するタイムアウト遅延をトリガし、その後プログレスバーが表示されます残りの論理

いずれの結果もsomething like thisになるはずです。

関連する問題