使VJ
Gyazo

使VJ
2019/11/30 Audiovisual Workshop with TOPLAP Japan at hitode909

Google Chrome
Google Chrome

(15)
VJ
(30x31.5)
HTML
VJHTML
(15)

hitode909
()GigaViewer()
VJ
VJ

or or
HTML
CSS
JavaScript
Mac or Windows or Linux
VJ
or VJ

VJ
CINEMA 4D使VJ Loops

1993
> Gyazo
2007
> Gyazo
OSAR()使
> Gyazo

VJ
3D
使
VJ
VJ
> Gyazo


YouTubeGIF
Gyazo
Gyazo
Gyazo
WiFi
Gyazo

VJ?

HTML

1.53
1. HTML
2. VJHTML
3.

#1 HTML
HTML
HTML使
glitch.com
HTML

HTML
HTML = Hyper Text Markup Language
HTML
(Element)
(Opening tag)
(Closing tag)
(Content)
(Attribute)

> Gyazo
> Gyazo
Content
HTML

HTML
HTML
Gyazo Gyazo
Gyazo Gyazo
/
Gyazo


glitch.com
HTML
Remix()
glitch.com使HTMLVSCode+LiveServer使

glitch.com
便
Gyazo

HTML
HTML
VJ使
VJ便
(Internet Explorer)

HTML
Remix Your Own
Remix Your Own
Gyazo
index.html
1.html2.htmlindex.html
(): glitch.com
Gyazo
ShowNext to The Code

h1
<h1></h1>

h1paragraph 1
Gyazo
h1
h2
Gyazo
i
Gyazo
marquee
Gyazo

(2.html)
<p><br></p>
pparagraph()
brbreak()
Format This File

GiphyNASAGIF
Media Gyazo
Social
Gyazo
.gif
<img src="(URL)">
<img src="https://media.giphy.com/media/JPxPiV7UrswSE1XyFu/giphy.gif">

imgimage()
Gyazo
img使

YouTubeHTML
Gyazo
Gyazo
iframe
Gyazo
_
<iframe width="560" height="315" src="https://www.youtube.com/embed/21X5lGlDOfg" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

Gyazo




imgmarquee
marquee
marquee
<marquee><img src="https://media.giphy.com/media/JPxPiV7UrswSE1XyFu/giphy.gif"></marquee>

(3.html)
Gyazo
marqueeimgHTML使
> Gyazo


h1p
(iframe)
Gyazo
GIF
<img src="..."> srcURL
Gyazo
youtube
src ?autoplay=1&mute=1
autoplay=1 :
mute=1 :
_
<iframe width="560" height="315" src="https://www.youtube.com/embed/21X5lGlDOfg?autoplay=1&mute=1" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

GIFmarquee使
使

#2 VJHTML
VJ
CSS使
VJ
JavaScript使

CSS
HTML
p
p {
color: red;
}
> Gyazo

p
p {
opacity: 0.5;
}
> Gyazo

p180
p {
transform: rotate(180deg);
}
> Gyazo
CSS使?


JavaScript
JavaScript
<script>
for ( ; ; ) {
window.alert(" _ \n ω)=\n =\n`/  )\n(Π\nww\nm9Д")
}
</script>
1
window.alert(''); window.alert('');
window.alert(''); windows.alert('');
window.alert(''); window.alert(');

Remix Your Own
Remix Your Own
Gyazo
index.html
1.html2.html

1.html
T TEE PARTY /
VJ
> Gyazo

CSS2.html
img id="bg"
p id="character"
<style>
# id #character id="character"
idHTMLid()
<img id="bg" src="https://teeparty.jp/upload/save_image/9628.jpg" />
<p id="character">
</p>
<style>
#bg {
width: auto;
height: 100%;
}
#character {
font-size: 10vw;
font-weight: bold;
color: blue;
}
</style>
> Gyazo
color: blueredpink

3.html
<div class="screen">...</div>
classidclass
<div class="screen">
<img id="bg" src="https://teeparty.jp/upload/save_image/9628.jpg" />
</div>
<div class="screen">
<p id="character">
</p>
</div>

style .screen {
. class
100%
.screen {
position: absolute;
pointer-events: none;
width: 100%;
height: 100%;
text-align: center;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}

HTML
z-index使CSS使
VJ
> Gyazo

>
> Gyazo
JavaScript
HTML
CSS
CSS

4.html
0.5
JavaScript
img#bg
500(0.5)i
i5001
()
<script>
(() => {
const images = [
"https://teeparty.jp/upload/save_image/4416.jpg",
"https://teeparty.jp/upload/save_image/10485.jpg",
"https://teeparty.jp/upload/save_image/9635.jpg",
"https://teeparty.jp/upload/save_image/9596.jpg"
];
const img = document.querySelector("img#bg");
let i = 0;
setInterval(() => {
i++;
img.src = images[i % images.length];
}, 500);
})();
</script>

<script>
(() => {
const messages = ["", "", ""];
const p = document.querySelector("#character");
let i = 0;
setInterval(() => {
i++;
p.textContent = messages[i % messages.length];
}, 500);
})();
</script>
Gyazo

[""]
images(5.html)
}, 500); (500interval)
const images = [
"http://files.sushi.money/running-horse/horse-0.jpg",
"http://files.sushi.money/running-horse/horse-1.jpg",
"http://files.sushi.money/running-horse/horse-2.jpg",
"http://files.sushi.money/running-horse/horse-3.jpg",
"http://files.sushi.money/running-horse/horse-4.jpg",
"http://files.sushi.money/running-horse/horse-5.jpg",
"http://files.sushi.money/running-horse/horse-6.jpg",
"http://files.sushi.money/running-horse/horse-7.jpg",
"http://files.sushi.money/running-horse/horse-8.jpg",
"http://files.sushi.money/running-horse/horse-9.jpg",
"http://files.sushi.money/running-horse/horse-10.jpg"
];

6.html
requestAnimationFrame使160
new Date().getTime() 使(1970)
CSS
<script>
(() => {
const img = document.querySelector("img#bg");
const render = () => {
requestAnimationFrame(render);
const t = new Date().getTime();
img.style.filter = `blur(${(t % 500)/50}px)`;
};
requestAnimationFrame(render);
})();
</script>

//
<script>
(() => {
const p = document.querySelector("#character");
const render = () => {
requestAnimationFrame(render);
const t = new Date().getTime();
p.style.fontSize = `${(t % 1000) / 10 }vh`;
// p.style.color = `hsl(${Math.floor((t / 10) % 360)}, 100%, 50%)`;
// p.style.transform = `rotate(${t/10}deg)`;
// p.textContent = String.fromCodePoint("".codePointAt(0) + Math.floor((t / 100) % 9));
p.textContent = String.fromCodePoint('😀'.codePointAt(0) + Math.floor(t/100%5));
};
requestAnimationFrame(render);
})();
</script>
> Gyazo


#3
HTML0.5
VJ

MIDI便
>
VJ
> Gyazo
Presentation API使()
!
> Gyazo

input
使HTML
使input
inputcheckbox, radio, textarea,

HTMLinput
使
Gyazo
index.html
1.html2.html

2.html
HTML <style>
<div id="controller">
<div>
<button id="tap">TAP</button>
</div>
<div>
<input
type="checkbox"
class="display-screen"
data-target-id="screen1"
checked
/>
<input
type="checkbox"
class="display-screen"
data-target-id="screen2"
checked
/>
</div>
<div>
<input type="range" id="range" min="0" max="100" value="5">
</div>
</div>

CSS(style)
#controller {
padding: 1em;
position: absolute;
left: 0;
top: 0;
opacity: 0.1;
background: black;
}
#controller:hover {
opacity: 0.5;
}


3.html
JavaScript使
document.querySelector("#tap").addEventListener("click", () => {
2interval
<script>
(() => {
let interval = 500;
let lastClickAt;
let timer;
let i = 0;
const step = () => {
timer = setTimeout(step, interval);
i++;
const p = document.querySelector("#character");
const messages = [
"",
"",
""
];
p.textContent = messages[i % messages.length];
const images = [
"https://teeparty.jp/upload/save_image/4416.jpg",
"https://teeparty.jp/upload/save_image/10485.jpg",
"https://teeparty.jp/upload/save_image/9635.jpg",
"https://teeparty.jp/upload/save_image/9596.jpg"
];
const img = document.querySelector("img#bg");
img.src = images[i % images.length];
};
step();
document.querySelector("#tap").addEventListener("click", () => {
if (lastClickAt) {
interval = new Date().getTime() - lastClickAt;
clearTimeout(timer);
step();
}
lastClickAt = new Date().getTime();
});
})();
</script>

TAP
TAPBPM

screen4.html
93 img.src = images[i % images.length];
displa:blockdisplay: none
input.checked JavaScript
const inputs = document.querySelectorAll('input[type="checkbox"]');
for (const input of [...inputs]) {
console.log(input.checked);
const target = document.getElementById(
input.getAttribute("data-target-id")
);
if (target) {
target.style.display = input.checked ? "block" : "none";
}
}

5.html
requestAnimationFrame使
116
range.value (0100)
input type="range" 使
const render = () => {
requestAnimationFrame(render);
const p = document.querySelector("#character");
const range = document.querySelector('#range');
p.style.fontSize = `${range.value}vh`;
};
render();

#2 HTMLscript
screen

ShowNew Window
Gyazo

Gyazo


GIF3D
Google Chrome
JavaScript
使

glitch.com
LGTM(Looks Good To Me)GIFiOS
YouTubeGIF
使21使
GIFMAGAZINE
BEEPLE
VJ

glitch.com
Share便
twitter #toplapjp
Gyazo GIF使

?

JavaScript
let imgs = [...document.querySelectorAll('img')];setInterval(() => {document.body.prepend(imgs[Math.floor(Math.random()*imgs.length)]);})