質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1552閲覧

Z方向の要素をある地点から奥に配置されているものについて見えなくする

kanchanaburi

総合スコア2

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/07/09 09:11

編集2021/07/09 09:13

以下ページを参考に、奥にスクロールするページを作りました。
http://noze.space/archives/226

各要素はテキストと画像で、以下図のように配置され、スクロールすると要素が奥から手前に通り過ぎていきます。
イメージ説明
2004、その間の画像、2005まではdivで囲まれていて.scalerのスタイルをつけている

HTMLを正面から見ると、奥にある要素は見えたままになっています。
そこで、z方向の2px以上(奥方向)の要素は正面から見えないようにし、2px以下(手前方向)からは要素がふんわり表示されるようにしたいのですが構文がわかりません、、

scriptは今のところ以下で動いています。

var scrollElm = (function() { if('scrollingElement' in document) { return document.scrollingElement; } if(navigator.userAgent.indexOf('WebKit') != -1) { return document.body; } return document.documentElement; })(); // 全てのセクション要素を取得 var sections = document.querySelectorAll('.section'); // 全体をz方向に動かす#scaler要素を取得 var scaler = document.getElementById('scaler'); // 画面の高さを設定する#scroll要素を取得 var scrollDiv = document.getElementById('scroll'); // セクション要素のdata-z属性を取得し、transformを設定 // 最後のセクション要素のdata-zを元に、画面の高さを計算して設定 for(var i = 0; sections.length > i; i++) { var itemZ = sections[i].getAttribute('data-z'); sections[i].style.transform = 'translateZ(' + - itemZ + 'px)'; if(i === sections.length -1) { scrollDiv.style.height = itemZ * 100 + window.innerHeight + 'px'; } } // スクロールイベントで、#scaler要素のtransformでz軸を動かす window.addEventListener('scroll', function() { var scrollNum = Math.round(scrollElm.scrollTop / 100); if(scrollNum % 1 === 0) { scaler.style.transform = 'translateZ(' + scrollNum + 'px)'; } });

どうぞよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

HTMLが本文中にないので記載のjavascriptを試せませんが、奥側を見えなくしたいのであれば、適切なz軸の場所に背景色を#FFFFFFでサイズを全面に広げたdiv要素を設置すれば、それ以降奥の要素はこちら側から不可視になります。
奥から徐々にフェードインしているように見せるためであれば、それぞれの.scaler要素の間に半透明の全面サイズdiv要素を設置すれば奥に行くほど薄く見えると思います。

以下ちょっと長いですがサンプルコードです。
各要素のz軸間隔は10pxにしています。
z4(-40px)に完全不透明のボードを設置しているので、それ以降の要素(2011と2014)は見えなくなっています。

html

1<main> 2 <div class="base"></div> 3 <div class="label z0">2004</div> 4 <div class="label z1">2005</div> 5 <div class="label z2">2007</div> 6 <div class="label z3">2009</div> 7 <div class="label z4">2011</div> 8 <div class="label z5">2014</div> 9 <div class="bg-z1"></div> 10 <div class="bg-z2"></div> 11 <div class="bg-z3"></div> 12 <div class="bg-z4"></div> 13 <div class="bg-z5"></div> 14</main>

css

1div{ 2 font-size: 60px; 3 font-weight: bold; 4 backface-visibility: inherit; /* これが重要 */ 5} 6.label{ 7 background-color: #fff; 8 border: 2px solid #cccccc; 9} 10main{ 11 position: relative; 12 width: 100vw; 13 height: 100vh; 14 transform-style: preserve-3d; 15} 16.base{ 17 position: absolute; 18 left: 0; 19 top: 0; 20 transform: translateZ(0px); 21 width: 100vw; 22 height: 100vh; 23} 24.bg-z1, .bg-z2, .bg-z3, .bg-z4, .bg-z5{ 25 position: absolute; 26 left: 0; 27 top: 0; 28 width: 100vw; 29 height: 100vh; 30 background-color: #FFFFFF88; 31} 32.bg-z1{ 33 transform: translateZ(-10px); 34} 35.bg-z2{ 36 transform: translateZ(-20px); 37} 38.bg-z3{ 39 transform: translateZ(-30px); 40} 41.bg-z4{ 42 transform: translateZ(-40px); 43 background-color: #fff; 44} 45.bg-z5{ 46 transform: translateZ(-50px); 47} 48.z0{ 49 position: absolute; 50 left: 00%; 51 top: 00%; 52 transform: translateZ(0px); 53} 54.z1{ 55 position: absolute; 56 left: 10%; 57 top: 10%; 58 transform: translateZ(-10px); 59} 60.z2{ 61 position: absolute; 62 left: 20%; 63 top: 20%; 64 transform: translateZ(-20px); 65} 66.z3{ 67 position: absolute; 68 left: 30%; 69 top: 30%; 70 transform: translateZ(-30px); 71} 72.z4{ 73 position: absolute; 74 left: 40%; 75 top: 40%; 76 transform: translateZ(-40px); 77} 78.z5{ 79 position: absolute; 80 left: 50%; 81 top: 50%; 82 transform: translateZ(-50px); 83}

codepenでのデモ

また、javascriptでz軸を制御しているのであれば、ついでにz軸の距離に合わせてfilter: blur()をかければ奥側をぼかすことも可能です。ぼかしがないよりは奥行き感が出るかもしれません。

ぼかし方式のcodepenデモ

投稿2021/07/09 10:46

hope_mucci

総合スコア4447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kanchanaburi

2021/07/12 08:31

ありがとうございました。回答いただいたコードを参考に、各要素に background-color: #FFFFFF88; を指定したところ、奥の方が見えなくなりました。 ただ、画面左下に年度ごとにサマリーが表示されるので要素を通過させるとサマリーに透過の背景が重なってしまいます。 サマリーを全面に出す or Z方向に並ぶ各要素が一番手前に来る時、ある地点からふんわり消える 上記のどちらかの対処をしようと思います。こちらもやり方がわからないので(汗)あとで新たに質問します。
hope_mucci

2021/07/13 14:37

今思えばz-indexをいじるついでにopacityもいじったほうが簡単だったかもしれません。 サマリーの件もopacityで解決できるかもしれませんね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問