LoginSignup
2
0

More than 3 years have passed since last update.

年末まで毎日webサイトを作り続ける大学生 〜47日目 JavaScriptでスナップショットを撮る〜

Posted at

はじめに

こんにちは!@70days_jsです。

JavaScriptでスナップショットを撮るサイトを作ってみました。

今日は47日目。(2019/12/4)
よろしくお願いします。

サイトURL

やったこと

JavaScriptでスナップショットを撮るサイトを作ってみました。
chrome以外では動かない可能性があります。
gif↓
test3.gif

やっていることはシンプルで、カメラにアクセスしてボタンを押すとスナップショットを撮るだけです。

  <body>
    <h2>Camera Punch</h2>
    <div class="videoWrapper">
      <video id="player" autoplay></video>
      <div id="capture"></div>
    </div>
    <div id="snapshotWrapper"></div>
  </body>

videoタグで映像、id="capture"でボタン、.snapshotWrapperクラスでスナップショットを表示しています。
.snapshotWrapperクラスには、JavaScriptを使って子要素にcanvasタグを加えていきます。

let player = document.getElementById("player");
let captureButton = document.getElementById("capture");
let snapshotWrapper = document.getElementById("snapshotWrapper");
let beferCanvas;
let handleSuccess = function(stream) {
  player.srcObject = stream;
};
captureButton.addEventListener("click", function() {
  let canvas = document.createElement("canvas");
  canvas.setAttribute("class", "snapshot");

  // 2枚目以降のスナップショット
  if (beferCanvas) {
    beferCanvas = snapshotWrapper.insertBefore(canvas, beferCanvas);
    randomColor(snapshotWrapper.firstChild);
  } // 1枚目のスナップショット
  else {
    beferCanvas = snapshotWrapper.appendChild(canvas);
    randomColor(snapshotWrapper.firstChild);
  }

  var context = canvas.getContext("2d");
  context.drawImage(player, 0, 0, canvas.width, canvas.height);
});

navigator.mediaDevices.getUserMedia({ video: true }).then(handleSuccess);

navigator.mediaDevices.getUserMedia({ video: true }).then(handleSuccess);

getUserMedia APIを使いました。
getUserMedia APIはpromiseを返します。

Mediaの取得ができれば、handleSuccessを実行します。

let handleSuccess = function(stream) {
player.srcObject = stream;
};

handleSuccessは、streamをsrcObjectに格納しています。
srcObjectはメディアソースを提供するオブジェクトをvideoタグ(id="player")に設定しています。

あと細かいですが、最新のスナップショットを左端に置いていくためにif文を使っています。
作成した要素をbeferCanvas変数に格納して、insertBeforeとappendChildを使い分けることで実現しています。

感想

APIの力はすごいなぁと思いました。
こうやって簡単に便利な機能を実装できるAPIやライブラリが増えていくと、プログラマーは必要なくなるんじゃないかと思いました。
が、なくならないんですよね。なぜか。

最後までお読みいただきありがとうございます。明日も投稿しますのでよろしくお願い致します。

参考

  1. ユーザーから画像を取得する | Web | Google Developers (https://developers.google.com/web/fundamentals/media/capturing-images/?hl=ja#top_of_page)

とても分かりやすかったです。ありがとうございます!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0