2015年2月22日日曜日

2 - ol3.2ex 68b -Animation example 2

「animation.js(268-ol3ex.js)」は、マップを表示するための JavaScript ファイルです。

「268-ol3ex.js」
// from https://github.com/DmitryBaranovskiy/raphael
function bounce(t) {
 var s = 7.5625, p = 2.75, l;
 if (t < (1 / p)) {
  l = s * t * t;
 } else {
  if (t < (2 / p)) {
   t -= (1.5 / p);
   l = s * t * t + 0.75;
  } else {
   if (t < (2.5 / p)) {
    t -= (2.25 / p);
    l = s * t * t + 0.9375;
   } else {
    t -= (2.625 / p);
    l = s * t * t + 0.984375;
   }
  }
 }
 return l;
}
// from https://github.com/DmitryBaranovskiy/raphael
function elastic(t) {
 return Math.pow(2, -10 * t) * Math.sin((t - 0.075) * (2 * Math.PI) / 0.3) + 1;
 /** Math.pow(base, exponent)
  * base を exponent 乗した値、つまり、base^exponent の値を返
  * します。
  * (MDN[https://developer.mozilla.org/ja/docs/Web/
  * JavaScript/Reference/Global_Objects/Math/pow])
  */
 /** Math.sin()
  * 引数として与えた数のサイン(正弦)を返します。
  * (MDN[https://developer.mozilla.org/ja/docs/Web/
  * JavaScript/Reference/Global_Objects/Math/sin])
  */
  /** Math.PI()
   * 円周率。約 3.14159 です。
   * (MDN[https://developer.mozilla.org/ja/docs/Web
   * /JavaScript/Reference/Global_Objects/Math/PI])
   */
}
var london = ol.proj.transform([-0.12755, 51.507222], 'EPSG:4326', 'EPSG:3857');
/** ol.proj.transform(coordinate, source, destination)
 * Transforms a coordinate from source projection to 
 * destination projection. This returns a new coordinate 
 * (and does not modify the original).
 * ソース投影から変換先投影に座標変換します。これは、新しい座標
 * を返します(オリジナルを変更しません)。(ol3 API)
 */
var moscow = ol.proj.transform([37.6178, 55.7517], 'EPSG:4326', 'EPSG:3857');
var istanbul = ol.proj.transform([28.9744, 41.0128], 'EPSG:4326', 'EPSG:3857');
var rome = ol.proj.transform([12.5, 41.9], 'EPSG:4326', 'EPSG:3857');
var bern = ol.proj.transform([7.4458, 46.95], 'EPSG:4326', 'EPSG:3857');
var madrid = ol.proj.transform([-3.683333, 40.4], 'EPSG:4326', 'EPSG:3857');
var view = new ol.View({
 // the view's initial state
 center: istanbul,
 zoom: 6
});
var map = new ol.Map({
 layers: [
  new ol.layer.Tile({
  /** ol.layer.Tile 
   * For layer sources that provide pre-rendered, tiled 
   * images in grids that are organized by zoom levels for 
   * specific resolutions. 
   * プリレンダリング(事前描画)を提供するレイヤソースのための、
   * 特定の解像度でのズームレベルによって編成されているグリッドの
   * タイルイメージ。(ol3 API)
   */
   preload: 4,
   /** preload:
    * Preload. Load low-resolution tiles up to 
    * preload levels. By default preload is 0, 
    * which means no preloading.
    * プリロード。プリロードレベルに至るまで低解像度の
    * タイルをロードします。デフォルトはプリロード 0 で、
    * プレロードがないことを意味します。(ol3 API)
    */
   source: new ol.source.OSM()
   /** ol.source.OSM 
    * Layer source for the OpenStreetMap tile server.
    * OpenStreetMap タイルサーバのレイヤソース。(ol3 API)
    */
  })
 ],
 renderer: exampleNS.getRendererFromQueryString(),
 /** 'example-behavior.js' により URL にある renderer を返します */
 /** Improve user experience by loading tiles while 
  * animating. Will make animations stutter on mobile 
  * or slow devices.
  * アニメーション化しながらタイルをロードすることによりユーザ
  * エクスペリエンスを向上させます。アニメーションは、モバイル
  * または低速デバイス上で途切れ途切れになります。
  */
 loadTilesWhileAnimating: true,
 /** loadTilesWhileAnimating:
  * When set to true, tiles will be loaded during 
  * animations. This may improve the user experience, 
  * but can also make animations stutter on devices 
  * with slow memory. Default is `false`.
  * true に設定すると、タイルは、アニメーションの間にに
  * ロードされます。これは、ユーザーエクスペリエンスを向
  * 上させることだけでなく、アニメーションが遅いメモリを
  * 搭載したデバイス上で途切れ途切れにすることができます。
  * デフォルトは `false` です。(ol3/extents/olx)
  */
 target: 'map',
 controls: ol.control.defaults({
 /** controls
  * Controls initially added to the map. 
  * If not specified, ol.control.defaults() is used.
  * 初期設定で、マップに追加されたコントロール。
  * 明示されていなければ、ol.control.defaults() が使用されます。
  * (ol3 API)
  */
 /** ol.control.defaults()
  * デフォルトでは、マップに含まコントロールのセット。
  * 特に設定しない限り、これは、以下の各コントロールの
  * インスタンスを含むコレクションを返します。(ol3 API)
  * ol.control.Zoom, ol.control.Rotate, ol.control.Attribution
  */
  attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
  /** @type 
   * 値のタイプ(型)の説明 - 式などで表示
   * (@use JSDoc[http://usejsdoc.org/]より)
   */
   collapsible: false // 折りたたみ
  })
 }),
 view: view
});
var rotateLeft = document.getElementById('rotate-left');
rotateLeft.addEventListener('click', function() {
/** EventTarget.addEventListener
 * addEventListener は、 1 つのイベントターゲットにイベント 
 * リスナーを1 つ登録します。イベントターゲットは、ドキュメント
 * 上の単一のノード、ドキュメント自身、ウィンドウ、あるいは、
 * XMLHttpRequest です。
 *(MDN[https://developer.mozilla.org/ja/docs/Web/API/
 * EventTarget.addEventListener])
 */
 var rotateLeft = ol.animation.rotate({
 /** ol.animation
  * The animation static methods are designed to be 
  * used with the ol.Map#beforeRender method. 
  * アニメーション静的メソッドは ol.Map#beforeRender
  * メソッドで使用するように設計されています。(使用例は
  * ol3 API を参照してください。メソッドについては
  * 「Stable Only」のチェックを外すと表示されます。 )
  */
  duration: 2000,
  /** duration:
   * The duration of the animation in milliseconds. 
   * Default is 1000.
   * ミリ秒単位のアニメーションの継続時間。デフォルトは、1000。
   * (ol3 API[説明は Stable Only のチェックを外すと表示])
   */
  rotation: -4 * Math.PI
  /** rotation:
   * The rotation value (in radians) to begin 
   * rotating from, typically 
   * map.getView().getRotation(). 
   * If undefined then 0 is assumed.
   * 一般的に、 map.getView()。getRotation()から
   * 回転を開始しする(ラジアン)回転値。定義されていなけ
   * れば、0 が仮定されています。
   * (ol3 API[説明は Stable Only のチェックを外すと表示])
   */
  /** Math.PI
   * 円周率。約 3.14159 です。
   * (MDN[https://developer.mozilla.org/ja/docs/Web
   * /JavaScript/Reference/Global_Objects/Math/PI])
   */
 });
 map.beforeRender(rotateLeft);
 /** beforeRender()
  * Add functions to be called before rendering. 
  * This can be used for attaching animations before 
  * updating the map's view. The ol.animation 
  * namespace provides several static methods for 
  * creating prerender functions.
  * レンダリングの前に呼び出される関数を追加します。これは、
  * マップのビューを更新する前にアニメーションを取り付ける
  * ために使用することができます。 ol.animation名前空間は、
  * 事前レンダリング機能を作成するためのいくつかの静的メソッ
  * ドを提供します。
  * (ol3 API[説明は Stable Only のチェックを外すと表示])
  */
}, false);
var rotateRight = document.getElementById('rotate-right');
rotateRight.addEventListener('click', function() {
 var rotateRight = ol.animation.rotate({
  duration: 2000,
  rotation: 4 * Math.PI
 });
 map.beforeRender(rotateRight);
}, false);
var rotateAroundRome = document.getElementById('rotate-around-rome');
rotateAroundRome.addEventListener('click', function() {
 var currentRotation = view.getRotation();
 /** getRotation()
  * Returns: The rotation of the view.(ol3 API)
  */
 var rotateAroundRome = ol.animation.rotate({
  anchor: rome,
  /** anchor:
   * The rotation center/anchor. The map rotates 
   * around the center of the view if unspecified.
   * 回転の中心/アンカー。マップが指定されていない場合、
   * ビューの中央を中心に回転します。
   * (ol3 API[説明は Stable Only のチェックを外すと表示])
   */
  duration: 1000,
  rotation: currentRotation
 });
 map.beforeRender(rotateAroundRome);
 view.rotate(currentRotation + (Math.PI / 2), rome);
}, false);
var panToLondon = document.getElementById('pan-to-london');
panToLondon.addEventListener('click', function() {
 var pan = ol.animation.pan({
  duration: 2000,
  source: /** @type {ol.Coordinate} */ (view.getCenter())
  /** source:
   * The location to start panning from, typically 
   * map.getView().getCenter().
   * 一般的に、 map.getView()。getCenter()から
   * 移動を開始しする位置。
   * (ol3 API[説明は Stable Only のチェックを外すと表示])
   */
  /** @type 
   * 値のタイプ(型)の説明 - 式などで表示
   * (@use JSDoc[http://usejsdoc.org/]より)
   */
  /** getCenter()
   * Return: The center of the view.(ol3 API)
   */
 });
 map.beforeRender(pan);
 view.setCenter(london);
 /** setCenter()
  * Set the center of the current view.
  * 現在のビューの中心を設定します。(ol3 API)
  */
}, false);
var elasticToMoscow = document.getElementById('elastic-to-moscow');
elasticToMoscow.addEventListener('click', function() {
 var pan = ol.animation.pan({
  duration: 2000,
  easing: elastic,
  /** easing:
   * The easing function to use. Can be an ol.
   * easing or a custom function. Default is 
   * ol.easing.inAndOut.
   * 使用するためのイージング関数。 ol.easing またはカス
   * タム関数とすることができる。デフォルトは
   * ol.easing.inAndOut です。
   * (ol3 API[説明は Stable Only のチェックを外すと表示])
   */
  source: /** @type {ol.Coordinate} */ (view.getCenter())
 });
 map.beforeRender(pan);
 view.setCenter(moscow);
}, false);
var bounceToIstanbul = document.getElementById('bounce-to-istanbul');
bounceToIstanbul.addEventListener('click', function() {
 var pan = ol.animation.pan({
  duration: 2000,
  easing: bounce,
  source: /** @type {ol.Coordinate} */ (view.getCenter())
 });
 map.beforeRender(pan);
 view.setCenter(istanbul);
}, false);
var spinToRome = document.getElementById('spin-to-rome');
spinToRome.addEventListener('click', function() {
 var duration = 2000;
 var start = +new Date();
 /** Date
  * 日付や時刻を扱うことが可能な、JavaScript の Date 
  * インスタンスを生成します。
  * (MDN[https://developer.mozilla.org/ja/docs/Web/
  * JavaScript/Reference/Global_Objects/Date])
  */
 var pan = ol.animation.pan({
  duration: duration,
  source: /** @type {ol.Coordinate} */ (view.getCenter()),
  start: start
  /** start:
   * The start time of the animation. Default is 
   * immediately.
   * アニメーションの開始時刻。デフォルトは直後にです。
   * (ol3 API[説明は Stable Only のチェックを外すと表示])
   */
 });
 var rotate = ol.animation.rotate({
  duration: duration,
  rotation: 2 * Math.PI,
  start: start
 });
 map.beforeRender(pan, rotate);
 view.setCenter(rome);
}, false);
var flyToBern = document.getElementById('fly-to-bern');
flyToBern.addEventListener('click', function() {
 var duration = 2000;
 var start = +new Date();
 var pan = ol.animation.pan({
  duration: duration,
  source: /** @type {ol.Coordinate} */ (view.getCenter()),
  start: start
 });
 var bounce = ol.animation.bounce({
  duration: duration,
  resolution: 4 * view.getResolution(),
  /** resolution:
   * The resolution to start the bounce from, 
   * typically map.getView().getResolution().
   * 一般的に、 map.getView()。getResolution()から
   * バウンス(跳ねる)を開始しする解像度。
   * (ol3 API[説明は Stable Only のチェックを外すと表示])
   */
  /** getResolution()
   * Return: The resolution of the view.
   * view(ビュー)の解像度を返します。(ol3 API)
   */
  start: start
 });
  map.beforeRender(pan, bounce);
  view.setCenter(bern);
}, false);
var spiralToMadrid = document.getElementById('spiral-to-madrid');
spiralToMadrid.addEventListener('click', function() {
 var duration = 2000;
 var start = +new Date();
 var pan = ol.animation.pan({
  duration: duration,
  source: /** @type {ol.Coordinate} */ (view.getCenter()),
  start: start
 });
 var bounce = ol.animation.bounce({
  duration: duration,
  resolution: 2 * view.getResolution(),
  start: start
  });
 var rotate = ol.animation.rotate({
  duration: duration,
  rotation: -4 * Math.PI,
  start: start
 });
 map.beforeRender(pan, bounce, rotate);
 view.setCenter(madrid);
}, false);

0 件のコメント: