See the Pen mosquito coil with mosquito sound by kimmy (@kimmy) on CodePen.
まず、CSSで蚊取り線香をつくりました。
夏なのでCSSで蚊取り線香をつくってみました。https://t.co/wH0siWKl8e
— 君塚史高 (@ki_230) 2017年7月27日
半円を互い違いに組み合わせて実装しております。
また、クリックすると火が着くのですが、
その際、蚊の嫌がる周波数の音を出しています。
なので、原理的にはサイト上の蚊取り線香に火をつければ蚊が寄ってこないわけです。
バナーや夏フェスのサイトとかに組み込むと、とても良いと思ってます。
Pug
#mosquito-coil - var length = 6; - for (var i = 0; i < length; ++i) { .circle - }
SCSS
$length: 6; $width: 10px; $color: #004D40; body { background: #212121; } #mosquito-coil { position: absolute; top: 50%; left: 50%; cursor: pointer; &:before { display: block; position: absolute; top: $width; @if ($length % 2 == 0) { left: $width * -2 * ceil($length / 2); } @else { left: $width * (1 + $length); } border-radius: 50%; width: $width; height: $width; background: $color; content: ""; transform: scale(.9); transition: background 12s ease-in-out; } &:after { display: block; position: absolute; top: $width; left: 0; border-radius: 50%; width: $width; height: $width; background: $color; content: ""; } .circle { position: absolute; border: solid $width $color; &:nth-child(odd) { border-radius: 50% 50% 0 0 / 100% 100% 0 0; border-bottom: none; } &:nth-child(even) { border-radius: 0 0 50% 50% / 0 0 100% 100%; border-top: none; } @for $i from 0 through $length { &:nth-child(#{$i + 1}) { @if $i % 2 == 1 { top: $width * 1.5; } @else { top: -$width * $i; } left: $width * -2 * ceil($i / 2); width: $width * (1 + $i * 2); height: $width * (0.5 + 1 * $i); } } } &.on { &:before { background: #4d0000; animation: mosquito-coil-blink 1.8s ease-in-out infinite alternate; } } } @keyframes mosquito-coil-blink { 0% { box-shadow: 0 0 0 rgba(255, 255, 255, .8); } 100% { box-shadow: 0 0 5px rgba(255, 255, 255, .8); } }
JavaScript
(() => { "use strict"; let AudioContext = window.AudioContext || window.webkitAudioContext, ctx = new AudioContext(), oscillator = ctx.createOscillator(), coil = document.getElementById("mosquito-coil"), isOn = false; coil.addEventListener("click", () => { isOn = !isOn; if (isOn) { oscillator = ctx.createOscillator(); oscillator.frequency.value = 17000; oscillator.connect(ctx.destination); coil.classList.add("on"); oscillator.start(); } else { oscillator.stop(); coil.classList.remove("on"); } }, false); })();