kaleido2.htm

戻る

<!DOCTYPE HTML>
<HTML LANG="ja">

<HEAD>
<META CHARSET="Shift_JIS">
<TITLE>万華鏡(スタイルシート版)</TITLE>
</HEAD>

<BODY onLoad="init()" STYLE="background-color:#CCFFFF">
<DIV STYLE="text-align:center">
<BR>
<B>万華鏡(スタイルシート版)</B>
<BR><BR>

<FORM>
<LABEL><INPUT TYPE=CHECKBOX ID="move" DISABLED onChange="move_change()">使用する画像の範囲を変化させる</LABEL>
</FORM>
<BR>

<DIV STYLE="position:relative; width:480px; height:480px; margin-left:auto; margin-right:auto; overflow:clip; clip-path:circle(240px)">

<DIV STYLE="position:absolute; left: 76px; top:-20px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:158px; top:-20px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:240px; top:-20px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:322px; top:-20px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:-47px; top: 51px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: 35px; top: 51px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:117px; top: 51px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:199px; top: 51px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:281px; top: 51px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:363px; top: 51px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:445px; top: 51px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: -6px; top:122px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: 76px; top:122px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:158px; top:122px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:240px; top:122px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:322px; top:122px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:404px; top:122px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:-47px; top:193px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: 35px; top:193px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:117px; top:193px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:199px; top:193px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:281px; top:193px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:363px; top:193px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:445px; top:193px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: -6px; top:264px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: 76px; top:264px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:158px; top:264px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:240px; top:264px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:322px; top:264px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:404px; top:264px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: 35px; top:335px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:117px; top:335px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:199px; top:335px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:281px; top:335px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:363px; top:335px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: 76px; top:406px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:158px; top:406px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:240px; top:406px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:322px; top:406px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:199px; top:477px; clip:rect(0 82px 71px 0)"><VIDEO CLASS="o0" STYLE="transform-origin:0 0"></VIDEO></DIV>

<DIV STYLE="position:absolute; left:117px; top:-20px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:199px; top:-20px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:281px; top:-20px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: -6px; top: 51px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: 76px; top: 51px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:158px; top: 51px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:240px; top: 51px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:322px; top: 51px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:404px; top: 51px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:-47px; top:122px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: 35px; top:122px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:117px; top:122px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:199px; top:122px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:281px; top:122px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:363px; top:122px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:445px; top:122px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: -6px; top:193px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: 76px; top:193px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:158px; top:193px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:240px; top:193px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:322px; top:193px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:404px; top:193px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:-47px; top:264px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: 35px; top:264px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:117px; top:264px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:199px; top:264px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:281px; top:264px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:363px; top:264px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:445px; top:264px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: -6px; top:335px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: 76px; top:335px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:158px; top:335px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:240px; top:335px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:322px; top:335px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:404px; top:335px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left: 35px; top:406px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:117px; top:406px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:199px; top:406px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r0" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:281px; top:406px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:363px; top:406px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r1" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:158px; top:477px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r2" STYLE="transform-origin:0 0"></VIDEO></DIV>
<DIV STYLE="position:absolute; left:240px; top:477px; clip-path:polygon(0 0,41px 71px,82px 0)"><VIDEO CLASS="r1" STYLE="transform-origin:0 0"></VIDEO></DIV>

</DIV>
</DIV>

<SCRIPT TYPE="text/javascript">
<!--

async function init() {
  var stream;
  try {
    stream = await navigator.mediaDevices.getUserMedia({video:true, audio:false});
  }
  catch(err) {
    alert("カメラが使用できません");
    return;
  }

  elem_video = elems_o0[0];
  elem_video.addEventListener("canplay", wait, false);
  var elems = document.getElementsByTagName("VIDEO")
  for(var i = 0; i < elems.length; i++) {
    with(elems[i]) {
      srcObject = stream;
      play();
    }
  }
}

function wait() {
  if(elem_video.videoWidth) {
    elem_video.removeEventListener("canplay", wait, false);

    src_x = (elem_video.videoWidth  >> 1) - 41;
    src_y = (elem_video.videoHeight >> 1) - 47;
    max_src_x = elem_video.videoWidth  - 83
    max_src_y = elem_video.videoHeight - 72
    elem_move.disabled = false;

    setup_view();
    return;
  }

  setTimeout(wait, 50);
}

function move_change() {
  if(elem_move.checked) {
    move_cnt = 0;
    int_id = setInterval(timer, 100);
  }
  else {
    clearInterval(int_id);
    src_x = (elem_video.videoWidth  >> 1) - 41;
    src_y = (elem_video.videoHeight >> 1) - 47;

    setup_view();
  }
}

function timer() {
  if(move_cnt) {
    move_cnt--;
  }
  else {
    move_dir = Math.floor(Math.random() * 4);
    move_cnt = 16;
  }

  switch(move_dir) {
  case 0:
    if(!--src_x) {
      move_dir = 1;
      src_x = 2;
    }
    break;
  case 1:
    if(++src_x > max_src_x) {
      move_dir = 0;
      src_x -= 2;
    }
    break;
  case 2:
    if(!--src_y) {
      move_dir = 3;
      src_y = 2;
    }
    break;
  case 3:
    if(++src_y > max_src_y) {
      move_dir = 2;
      src_y -= 2;
    }
    break;
  }

  setup_view();
}

function setup_view() {
  var l = "-" + String(src_x) + "px";
  var r = "-" + String(src_x + 82) + "px";
  var b = "-" + String(src_y + 71) + "px";
  var transform;
  transform = "translate(" + l + ",-" + String(src_y) + "px)";
  for(var i = 0; i < elems_o0.length; i++)
    elems_o0[i].style.transform = transform;
  transform = "translate(0,71px) rotate(120deg) translate(" + r + "," + b + ")";
  for(var i = 0; i < elems_o1.length; i++)
    elems_o1[i].style.transform = transform;
  transform = "translate(41px,0) rotate(240deg) translate(" + r + "," + b + ")";
  for(var i = 0; i < elems_o2.length; i++)
    elems_o2[i].style.transform = transform;
  transform = "scale(1,-1) translate(" + l + "," + b + ")";
  for(var i = 0; i < elems_r0.length; i++)
    elems_r0[i].style.transform = transform;
  transform = "translate(41px,71px) rotate(120deg) scale(1,-1) translate(" + r + "," + b + ")";
  for(var i = 0; i < elems_r1.length; i++)
    elems_r1[i].style.transform = transform;
  transform = "rotate(240deg) scale(1,-1) translate(" + r + "," + b + ")";
  for(var i = 0; i < elems_r2.length; i++)
    elems_r2[i].style.transform = transform;
}

  elem_move = document.getElementById("move");

  elems_o0 = document.getElementsByClassName("o0")
  elems_o1 = document.getElementsByClassName("o1")
  elems_o2 = document.getElementsByClassName("o2")
  elems_r0 = document.getElementsByClassName("r0")
  elems_r1 = document.getElementsByClassName("r1")
  elems_r2 = document.getElementsByClassName("r2")

  // Firefox でページを再ロードしたときのため
  document.forms[0].reset();
  elem_move.disabled = true;

//-->
</SCRIPT>

</BODY>

</HTML>