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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

Q&A

解決済

1回答

1185閲覧

コインのように画像がスワイプで回転する動きを、個別で回転させたい

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

0グッド

0クリップ

投稿2020/07/08 07:12

前提・実現したいこと

スマートフォンで画像をスワイプでフリップ回転する動きを実現したい。現状は複数画像を設置した際に、ひとつの画像をスワイプするとすべての画像が連動してフリップする。

発生している問題・エラーメッセージ

動き自体は実現できましたが、複数の画像を設置したとき、ひとつの画像をスワイプするとすべての画像が一緒に連動して回転してしまう

該当のソースコード

JavaScript

1jQuery(document).ready(function( $ ){ 2 3// UA判定のJSライブラリーを実行 4const uAParser = UAParser(); 5 6const $flip = $('.js-flip'); 7const $flipInner = $('.js-flip-inner'); 8const flipWidth = $flip.width(); 9 10// 円の直径を180度に割り当てる 11const rate = 180 / flipWidth; 12 13// .flip-innerクラスにつけるtransitionのduration値 14const DURATION = 800; 15 16// touchMoveのフラグ 17let moving = false; 18 19// touchEnd後、アニメーションしているときのフラグ 20let animating = false; 21 22// タップし始めたときのx座標 23let startPointX = 0; 24 25// タップを離したときのx座標 26let endPointX = 0; 27 28// 現在の回転量 29let currentRotationVal = 0; 30 31// デバイスを判定 32let judgeDevice = () => { 33 (uAParser.device.type !== 'mobile') ? $flip.addClass('is-pc') : $flip.removeClass('is-pc'); 34}; 35 36// スワイプしはじめたとき 37let touchStartHandler = (e) => { 38 if (uAParser.device.type !== 'mobile') return; 39 if (moving) return; 40 let touch = e.originalEvent.touches[0]; 41 // 触り始めたときのタップしたx,y座標を保存 42 startPointX = touch.screenX; 43}; 44 45// スワイプ中 46let touchMoveHandler = (e) => { 47 if (uAParser.device.type !== 'mobile') return; 48 if (animating) return; 49 moving = true; 50 let touch = e.originalEvent.touches[0]; 51 52 // スワイプ量を保存 53 endPointX = (touch.screenX - startPointX) * rate; 54 55 // 半回転以上回転させないように-180度以上、180度以下に制限 56 if (endPointX > 180 || endPointX < -180) { 57 return; 58 } 59 60 roll(currentRotationVal + endPointX); 61}; 62 63// 指を離したとき 64let touchEndHandler = () => { 65 if (uAParser.device.type !== 'mobile') return; 66 if (!moving || animating) { 67 return; 68 } 69 moving = false; 70 71 // タップを離したとき、プラス方向に半分よりめくれていたら最後までめくる 72 if(currentRotationVal + endPointX > currentRotationVal + 90) { 73 currentRotationVal = currentRotationVal + 180; 74 } 75 // タップを離した時、マイナス方向に半分以上めくれていたら最後までめくる 76 if(currentRotationVal + endPointX < currentRotationVal - 90) { 77 currentRotationVal = currentRotationVal - 180; 78 } 79 80 // transitionしつつめくる 81 $flip.addClass('is-animating'); 82 $flipInner.css('transform', 'rotateY(' + currentRotationVal + 'deg)'); 83 animating = true; 84 85 setTimeout(() => { 86 // cssで設定したduration分動いたら、transitionを切る 87 $flip.removeClass('is-animating'); 88 animating = false; 89 }, DURATION); 90 91 // スワイプし始めた位置を初期化 92 startPointX = 0; 93}; 94 95// 回転 96let roll = (rotationVal) => { 97 $flipInner.css('transform', 'rotateY(' + (rotationVal) + 'deg)'); 98}; 99 100// リセット用イベント 101$(window).on('resize', judgeDevice); 102 103// イベント 104$flip.on('touchstart', touchStartHandler); 105$flip.on('touchmove', touchMoveHandler); 106$flip.on('touchend', touchEndHandler); 107$flip.on('mouseover', (e) => { 108 if ($(e.currentTarget).hasClass('is-pc')) { 109 $(e.currentTarget).addClass('is-hover'); 110 } 111}); 112 113$flip.on('mouseout', (e) => { 114 if ($(e.currentTarget).hasClass('is-pc')) { 115 $(e.currentTarget).removeClass('is-hover'); 116 } 117}); 118 119// 初期化 120judgeDevice(); 121 122 }); 123 124

試したこと

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。
https://liginc.co.jp/489507
この記事を参考に、同じ動きを実装したく試しましたがうまくいきません。
複数の画像を設置したときに、すべての画像が同時に回転してしまいます。

配置した画像をそれぞれ個別に回転させたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

解決しました解決しました

投稿2020/07/21 01:09

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kei344

2020/07/21 02:53

【質問をした後に自己解決してしまった --- ヘルプ|teratail(テラテイル)】 https://teratail.com/help#resolve-myself > 後から読む人のためにも、具体的な解決手順を記載してください。
退会済みユーザー

退会済みユーザー

2020/07/21 02:54

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問