※あくまでJavaScriptを真面目(?)に学習している内容になります。笑
以前にも一度記事を書かせていただきました、Web上で3D Touchを再現できるJavaScriptでPressure.jsというのがあるのですが、今回も再び弄って遊んでみたので紹介したいと思います。
前回の記事はこちら!
【JavaScript】3D Touchに対応させられるというPressure.jsを試してみた
まぁいいからまずはサンプルを見せてくれ!という方はこちら!
コンテンツ一覧
3つのパターンによるサンプル
美女の写真を題材に、今回は3つのパターンでサンプルを作ってみました。
- モノクロ→本来の色へ変化していく美女
- モザイク→取れていき現れる美女
- グレーのオーバーレイ→薄れていき現れる美女
そもそもこのJavaScriptの仕組みは、タップされている間に0~1へと変化する数値を利用するというものになるのですが、この数値を別の値にマッピング(割り当て)することができるのです。
例えばモノクロ→本来の色ですと、CSSの値を次のように変化させます。filter: grayscale(100%);
→filter: grayscale(0%);
この変化部分のJavaScriptを一部抜粋すると、次のようになります。
change: function( force, event ){ this.style.filter = 'grayscale('+Pressure.map( force, 0, 1, 100, 0 )+'%)'; this.style.webkitFilter = 'grayscale('+Pressure.map( force, 0, 1, 100, 0 )+'%)'; },
0→1の変化を100→0にマッピングしています。
それでは、3パターンそれぞれについて解説していこうと思います。
(解説はいいからまずはサンプルを見せてくれ!という方はこちらから!笑)
モノクロ→本来の色へ変化していく美女
HTML
<div id="test1"> <img src="/sample/images/js015/img01.jpg" alt=""> </div>
CSS
#test1 img { -webkit-filter: grayscale(100%); filter: grayscale(100%); }
JavaScript
Pressure.set( '#test1 img', { start: function( event ){ }, end: function(){ this.style.filter = 'grayscale(100%)'; this.style.webkitFilter = 'grayscale(100%)'; }, startDeepPress: function( event ){ }, endDeepPress: function(){ }, change: function( force, event ){ this.style.filter = 'grayscale('+Pressure.map( force, 0, 1, 100, 0 )+'%)'; this.style.webkitFilter = 'grayscale('+Pressure.map( force, 0, 1, 100, 0 )+'%)'; }, unsupported: function(){ } }, {polyfillSpeedUp: 1000, polyfillSpeedDown: 300} );
先程も少し触れたように、タッチされている間にfilterのgrayscaleの値が100%→0%へと変化していくように、記述してます。
実際のサンプルはこちら!
モザイク→取れていき現れる美女
HTML
<div id="test2"> <img src="/sample/images/js015/img02.jpg" alt=""> </div>
CSS
#test2 img { -webkit-filter: blur(10px); filter: blur(10px); }
JavaScript
Pressure.set( '#test2 img', { start: function( event ){ }, end: function(){ this.style.filter = 'blur(10px)'; this.style.webktFilter = 'blur(10px)'; }, startDeepPress: function( event ){ }, endDeepPress: function(){ }, change: function( force, event ){ this.style.filter = 'blur('+Pressure.map( force, 0, 1, 10, 0 )+'px)'; this.style.webktFilter = 'blur('+Pressure.map( force, 0, 1, 10, 0 )+'px)'; }, unsupported: function(){ } }, {polyfillSpeedUp: 1000, polyfillSpeedDown: 300} );
もうこの時点で何となく予想がつく方もおられると思いますが…基本的にはモノクロ→本来の色へとやっていることは同じですね。
filter: blur(10px);
ということで、CSSで元々10pxのぼかしを入れており、タッチされている間にfilterのblurの値が10px→0pxへと変化していくように、記述してます。
実際のサンプルはこちら!
グレーのオーバーレイ→薄れていき現れる美女
HTML
<div id="test3"> <img src="/sample/images/js015/img03.jpg" alt=""> <div class="overlay"></div> </div>
CSS
#test3 { position: relative; line-height: 0; } #test3 .overlay { position: absolute; width: 100%; height: 100%; top: 0; left: 0; background: #ccc; border-radius: 20px; }
JavaScript
Pressure.set( '#test3 .overlay', { start: function( event ){ }, end: function(){ this.style.opacity = 1; }, startDeepPress: function( event ){ }, endDeepPress: function(){ }, change: function( force, event ){ this.style.opacity = Pressure.map( force, 0, 1, 1, 0 ); }, unsupported: function(){ } }, {polyfillSpeedUp: 1000, polyfillSpeedDown: 300} );
今までの2つのサンプルの場合は対象がimg(画像)でしたが、今回は.overlay(div)となります。
HTMLの記述を見ても、imgタグと並列に.overlayが存在していることが確認できますね。
ただやっている事自体は今までと変わらず、この場合はタッチされている間にopacityの値を1→0と変化していくように記述し、覆いかぶさっているdivを透明にすることにより表現させております。
実際のサンプルはこちら!
ちょっと面白い動き、こだわった表現をさせたい場合など…役に立つ場面は色々あるのかなと思ってます!
以上、サボりにサボった久々更新でした…!
コメントする