質問編集履歴

3

使用しているjQueryの名前に誤りがあったため修正

2019/09/02 10:16

投稿

garudaflap
garudaflap

スコア6

test CHANGED
@@ -1 +1 @@
1
- 【jQuery】OnePageScroll.jsでsection毎にcssアニメーションを実行する方法
1
+ 【jQuery】fullPage.jsでsection毎にcssアニメーションを実行する方法
test CHANGED
@@ -4,15 +4,15 @@
4
4
 
5
5
  仕事でWebサイトを作成しており、この度初めて利用させていただきます。
6
6
 
7
- 行き詰ってしまったため力を貸していただけるととても嬉しいです。
8
-
9
7
  (htmlとcssは知識が古めですが自力で打てます。javaScriptは詳しくなく参考サイトを見つけてコピペが多いです)
10
8
 
11
9
 
12
10
 
13
11
  フルスクリーンのコンテンツをスクロール単位で切り替える構造のページを作成し、section毎にcssアニメーションの効果が付いた画像を配置しようとしています。
14
12
 
13
+ 参考サイトのサンプル(http://black-flag.net/jquery/20140527-5155.html)をもとに作成。
14
+
15
- 【jQuery】OnePageScroll.jsのサンプルサイトをもとに作成。ほぼ構造はそのまま変えておりません。
15
+ ほぼ構造はそのまま変えておりません。
16
16
 
17
17
  各sessionがスクロールで表示されてからアニメーションが開始されるようにしたいです。
18
18
 

2

ソースコードより詳しく記載

2019/09/02 10:16

投稿

garudaflap
garudaflap

スコア6

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- ### 前提・実現したいこと
1
+ ### 発生している問題・前提・実現したいこと
2
2
 
3
3
 
4
4
 
@@ -20,22 +20,494 @@
20
20
 
21
21
  ### 発生している問題・エラーメッセージ
22
22
 
23
- コンテンツ内の画像にアニメションの効果を画像に付けみたところ、他の表示されていないsession内のアニメーション開始されてしまってるようでした
23
+ スクロルしてsessionが切り替わってもアニメーション開始されい。
24
-
25
- ただアニメーションを設定するだけでは駄目なのでしょうか。
26
-
27
-
28
24
 
29
25
 
30
26
 
31
27
  ### 該当のソースコード
32
28
 
33
-
29
+ 【HTMLファイル】
34
30
 
35
31
  ```ここに言語名を入力
36
32
 
33
+ <!DOCTYPE html>
34
+
35
+ <html xml:lang="ja" lang="ja">
36
+
37
+ <head>
38
+
39
+ <meta charset="utf-8">
40
+
41
+ <meta name="viewport" content="user-scalable=0">
42
+
43
+ <title>sample</title>
44
+
45
+ <link rel="stylesheet" href="css/common.css">
46
+
47
+ <!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
48
+
49
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
50
+
37
51
  <script>
38
52
 
53
+ $(function(){
54
+
55
+ var setWrap = $('#container'),
56
+
57
+ setBase = $('.stageBase'),
58
+
59
+ scrollSpeed = 1000,
60
+
61
+ scrollEasing = 'swing',
62
+
63
+ slideSpeed = 500,
64
+
65
+ slideEasing = 'linear',
66
+
67
+ downBtn = 'show', // 'show' or 'hide'
68
+
69
+ urlHash = 'on', // 'on' or 'off'
70
+
71
+ setHash = '!page';
72
+
73
+
74
+
75
+ var url = document.URL,
76
+
77
+ stageSlide = $('.stageSlide');
78
+
79
+
80
+
81
+ setWrap.append('<nav id="pageNav"><ul></ul></nav>');
82
+
83
+ setBase.each(function(i){
84
+
85
+ $('#pageNav ul').append('<li class="pagePn'+(i+1)+'"><a href="javascript:void(0);"></a></li>');
86
+
87
+ });
88
+
89
+
90
+
91
+ if(downBtn == 'show'){
92
+
93
+ setWrap.append('<div id="pageDown"><a href="javascript:void(0);"></a></div>');
94
+
95
+ }
96
+
97
+
98
+
99
+ var coreNav = $('#pageNav'),
100
+
101
+ setNav = coreNav.find('ul'),
102
+
103
+ navList = setNav.find('li'),
104
+
105
+ navLength = navList.length;
106
+
107
+ setNav.find('li:first').addClass('activeStage');
108
+
109
+ $('body').attr('data-page','1');
110
+
111
+
112
+
113
+ $(window).load(function(){
114
+
115
+ // StageHeight
116
+
117
+ $(window).resize(function(){
118
+
119
+ var wdHeight = $(window).height();
120
+
121
+ setBase.css({height:wdHeight});
122
+
123
+
124
+
125
+ var resizeContTop = parseInt(setWrap.css('top'));
126
+
127
+
128
+
129
+ if(resizeContTop === 0){
130
+
131
+ setWrap.css({top:'0'});
132
+
133
+ } else {
134
+
135
+ var activeStagePos = setNav.find('li.activeStage');
136
+
137
+ activeStagePos.each(function(){
138
+
139
+ var posIndex = navList.index(this);
140
+
141
+ setWrap.css({top:-(wdHeight*posIndex)});
142
+
143
+ });
144
+
145
+ }
146
+
147
+
148
+
149
+ coreNav.each(function(){
150
+
151
+ var navHeight = $(this).height();
152
+
153
+ $(this).css({top:((wdHeight)-(navHeight))/2});
154
+
155
+ });
156
+
157
+ }).resize();
158
+
159
+
160
+
161
+ // MouseWheelEvent
162
+
163
+ var mousewheelevent = 'onwheel' in document ? 'wheel' : 'onmousewheel' in document ? 'mousewheel' : 'DOMMouseScroll';
164
+
165
+ $(document).on(mousewheelevent,function(e){
166
+
167
+ if(!(setWrap.is(':animated'))){
168
+
169
+ e.preventDefault();
170
+
171
+ var delta = e.originalEvent.deltaY ? -(e.originalEvent.deltaY) : e.originalEvent.wheelDelta ? e.originalEvent.wheelDelta : -(e.originalEvent.detail);
172
+
173
+ if (delta < 0){
174
+
175
+ motionDown();
176
+
177
+ } else {
178
+
179
+ motionUp();
180
+
181
+ }
182
+
183
+ }
184
+
185
+ });
186
+
187
+
188
+
189
+ // FlickEvent
190
+
191
+ var isTouch = ('ontouchstart' in window);
192
+
193
+ setWrap.on(
194
+
195
+ {'touchstart': function(e){
196
+
197
+ if(setWrap.is(':animated')){
198
+
199
+ e.preventDefault();
200
+
201
+ } else {
202
+
203
+ this.pageY = (isTouch ? event.changedTouches[0].pageY : e.pageY);
204
+
205
+ this.topBegin = parseInt($(this).css('top'));
206
+
207
+ this.top = parseInt($(this).css('top'));
208
+
209
+ this.touched = true;
210
+
211
+ }
212
+
213
+ },'touchmove': function(e){
214
+
215
+ if(!this.touched){return;}
216
+
217
+ e.preventDefault();
218
+
219
+ this.top = this.top - (this.pageY - (isTouch ? event.changedTouches[0].pageY : e.pageY));
220
+
221
+ this.pageY = (isTouch ? event.changedTouches[0].pageY : e.pageY);
222
+
223
+ },'touchend': function(e){
224
+
225
+ if (!this.touched) {return;}
226
+
227
+ this.touched = false;
228
+
229
+
230
+
231
+ if(((this.topBegin)-30) > this.top){
232
+
233
+ motionDown();
234
+
235
+ } else if(((this.topBegin)+30) < this.top){
236
+
237
+ motionUp();
238
+
239
+ }
240
+
241
+ }
242
+
243
+ });
244
+
245
+
246
+
247
+ // ScrollUpEvent
248
+
249
+ function motionUp(){
250
+
251
+ var stageHeightU = setBase.height(),
252
+
253
+ contTopUp = parseInt(setWrap.css('top')),
254
+
255
+ moveTopUp = contTopUp + stageHeightU;
256
+
257
+ $('input,textarea').blur();
258
+
259
+ if(!(contTopUp === 0)){
260
+
261
+ setWrap.stop().animate({top:moveTopUp},scrollSpeed,scrollEasing);
262
+
263
+ setNav.find('li.activeStage').removeClass('activeStage').prev().addClass('activeStage');
264
+
265
+
266
+
267
+ var acvStageP = parseInt($('body').attr('data-page')),
268
+
269
+ setPrev = acvStageP-1;
270
+
271
+ $('body').attr('data-page',setPrev);
272
+
273
+ if(downBtn == 'show'){
274
+
275
+ pagePos();
276
+
277
+ }
278
+
279
+ }
280
+
281
+ if(urlHash == 'on'){
282
+
283
+ replaceHash();
284
+
285
+ }
286
+
287
+ }
288
+
289
+
290
+
291
+ // ScrollDownEvent
292
+
293
+ function motionDown(){
294
+
295
+ var stageHeightD = setBase.height(),
296
+
297
+ contTopDown = parseInt(setWrap.css('top')),
298
+
299
+ moveTopDown = contTopDown - stageHeightD;
300
+
301
+ $('input,textarea').blur();
302
+
303
+
304
+
305
+ var contHeight = setWrap.height(),
306
+
307
+ maxHeightAdj = -(contHeight - stageHeightD);
308
+
309
+
310
+
311
+ if(!(contTopDown == maxHeightAdj)){
312
+
313
+ setWrap.stop().animate({top:moveTopDown},scrollSpeed,scrollEasing);
314
+
315
+ setNav.find('li.activeStage').removeClass('activeStage').next().addClass('activeStage');
316
+
317
+
318
+
319
+ var acvStageN = parseInt($('body').attr('data-page')),
320
+
321
+ setNext = acvStageN+1;
322
+
323
+ $('body').attr('data-page',setNext);
324
+
325
+ if(downBtn == 'show'){
326
+
327
+ pagePos();
328
+
329
+ }
330
+
331
+ }
332
+
333
+ if(urlHash == 'on'){
334
+
335
+ replaceHash();
336
+
337
+ }
338
+
339
+ }
340
+
341
+
342
+
343
+ // SideNaviClick
344
+
345
+ navList.click(function(){
346
+
347
+ if(!(setWrap.is(':animated'))){
348
+
349
+ var crtIndex = navList.index(this),
350
+
351
+ crtHeight = $(window).height();
352
+
353
+ setWrap.stop().animate({top:-(crtHeight*crtIndex)},scrollSpeed,scrollEasing);
354
+
355
+ setNav.find('li.activeStage').removeClass('activeStage');
356
+
357
+ $(this).addClass('activeStage');
358
+
359
+
360
+
361
+ $('body').attr('data-page',crtIndex+1);
362
+
363
+
364
+
365
+ if(downBtn == 'show'){
366
+
367
+ pagePos();
368
+
369
+ }
370
+
371
+ if(urlHash == 'on'){
372
+
373
+ replaceHash();
374
+
375
+ }
376
+
377
+ }
378
+
379
+ });
380
+
381
+
382
+
383
+ // PageDownBtnClick
384
+
385
+ $('#pageDown a').click(function(){
386
+
387
+ if(!(setWrap.is(':animated'))){
388
+
389
+ var navActive = setNav.find('li.activeStage');
390
+
391
+ navActive.each(function(){
392
+
393
+ var navIndex = navList.index(this),
394
+
395
+ setNav = navIndex+1;
396
+
397
+ if(!(setNav == navLength)){
398
+
399
+ $(this).next().click();
400
+
401
+ }
402
+
403
+ });
404
+
405
+ if(urlHash == 'on'){
406
+
407
+ replaceHash();
408
+
409
+ }
410
+
411
+ }
412
+
413
+ });
414
+
415
+ function pagePos(){
416
+
417
+ var pnAcv = coreNav.find('li.activeStage');
418
+
419
+ pnAcv.each(function(){
420
+
421
+ var pnIndexN = navList.index(this),
422
+
423
+ pnCountN = pnIndexN+1;
424
+
425
+ if(pnCountN == navLength){
426
+
427
+ $('#pageDown').css({display:'none'});
428
+
429
+ } else {
430
+
431
+ $('#pageDown').css({display:'block'});
432
+
433
+ }
434
+
435
+ });
436
+
437
+ }
438
+
439
+
440
+
441
+ // HashReplace
442
+
443
+ function replaceHash(){
444
+
445
+ var pnAcv = coreNav.find('li.activeStage');
446
+
447
+ pnAcv.each(function(){
448
+
449
+ var pnIndexN = navList.index(this),
450
+
451
+ pnCountN = pnIndexN+1;
452
+
453
+ location.hash = setHash + pnCountN;
454
+
455
+ });
456
+
457
+ }
458
+
459
+ if(urlHash == 'on'){
460
+
461
+ replaceHash();
462
+
463
+ }
464
+
465
+
466
+
467
+ // OpeningFade
468
+
469
+ $('body').css({visibility:'visible',opacity:'0'}).animate({opacity:'1'},1000);
470
+
471
+
472
+
473
+ // LoadPageMove
474
+
475
+ if(url.indexOf(setHash) !== -1){
476
+
477
+ var numSplit = ((url.split(setHash)[1])-1);
478
+
479
+ navList.eq(numSplit).click();
480
+
481
+ }
482
+
483
+ });
484
+
485
+
486
+
487
+ // HashChangeEvent
488
+
489
+ if(urlHash == 'on'){
490
+
491
+ $(window).on('hashchange',function(){
492
+
493
+ var stateUrl = document.URL,
494
+
495
+ hashSplit = ((stateUrl.split(setHash)[1])-1);
496
+
497
+ navList.eq(hashSplit).click();
498
+
499
+ });
500
+
501
+ }
502
+
503
+ });
504
+
505
+ </script>
506
+
507
+
508
+
509
+ <script>
510
+
39
511
  function scrollChk(){
40
512
 
41
513
  var scroll = $(window).scrollTop();
@@ -76,25 +548,277 @@
76
548
 
77
549
 
78
550
 
551
+ </head>
552
+
553
+
554
+
555
+ <body>
556
+
557
+
558
+
559
+ <div id="container">
560
+
561
+
562
+
563
+ <section id="stage1" class="stageBase">
564
+
565
+ <div class="fieldWrap">
566
+
567
+ <p>ここは1ページ目</p>
568
+
569
+ </div><!--/.fieldWrap -->
570
+
571
+ </section>
572
+
573
+
574
+
575
+ <section id="stage2" class="stageBase">
576
+
577
+ <div class="fieldWrap">
578
+
579
+ <p>ここは2ページ目</p>
580
+
581
+ <div class="scroll-animation anime01"><img src="img/img.png"></div>
582
+
583
+ </div><!--/.fieldWrap -->
584
+
585
+ </section>
586
+
587
+
588
+
589
+ </div><!--/#container-->
590
+
591
+
592
+
593
+ </body>
594
+
595
+ </html>
596
+
79
597
  ```
80
598
 
81
-
82
-
83
- ### 試した
84
-
85
-
86
-
87
- スクロールの位置を取得してクラスを実行するタイプのscriptの記述を足してみましたが、アニメーションが実行されません。
88
-
89
- (.activeが実行されていない感じです)
90
-
91
-
92
-
93
- 解決策、または参考になるサイトなどご存じでしたら誘導していただけると有難いです。
94
-
95
-
96
-
97
- ### 補足情報(FW/ツールのバージョンなど)
599
+ 【cssファイル】
600
+
601
+ ```こに言語名を入力
602
+
603
+ /* =======================================
604
+
605
+ reset
606
+
607
+ ======================================= */
608
+
609
+
610
+
611
+ * {
612
+
613
+ margin: 0;
614
+
615
+ padding: 0;
616
+
617
+ }
618
+
619
+
620
+
621
+ /* =======================================
622
+
623
+ CommonElements
624
+
625
+ ======================================= */
626
+
627
+ body {
628
+
629
+ text-align: center;
630
+
631
+ position: relative;
632
+
633
+ overflow: hidden;
634
+
635
+ visibility: hidden;
636
+
637
+ }
638
+
639
+
640
+
641
+ /* #container
642
+
643
+ --------------------------- */
644
+
645
+ #container {
646
+
647
+ top: 0;
648
+
649
+ left: 0;
650
+
651
+ width: 100%;
652
+
653
+ position: absolute;
654
+
655
+ z-index: 1;
656
+
657
+ }
658
+
659
+
660
+
661
+ /* .stageBase
662
+
663
+ --------------------------- */
664
+
665
+ .stageBase {
666
+
667
+ width: 100%;
668
+
669
+ position: relative;
670
+
671
+ overflow: hidden;
672
+
673
+ }
674
+
675
+ .stageBase .fieldWrap {
676
+
677
+ padding: 100px 0 0 0;
678
+
679
+ text-align: center;
680
+
681
+ }
682
+
683
+ #stage1 {background:#fff;}
684
+
685
+ #stage2 {background:#eee;}
686
+
687
+
688
+
689
+ /* #pageNav
690
+
691
+ --------------------------- */
692
+
693
+ #pageNav {
694
+
695
+ top: 0;
696
+
697
+ right: 25px;
698
+
699
+ width: 15px;
700
+
701
+ text-align: center;
702
+
703
+ position: fixed;
704
+
705
+ z-index: 2;
706
+
707
+ }
708
+
709
+ #pageNav ul {
710
+
711
+ width: 15px;
712
+
713
+ display: block;
714
+
715
+ }
716
+
717
+ #pageNav ul li {
718
+
719
+ padding-bottom: 5px;
720
+
721
+ width: 15px;
722
+
723
+ height: 15px;
724
+
725
+ display: block;
726
+
727
+ overflow: hidden;
728
+
729
+ }
730
+
731
+ #pageNav ul li a {
732
+
733
+ width: 15px;
734
+
735
+ height: 15px;
736
+
737
+ background: transparent url(../img/nav.png) no-repeat center center;
738
+
739
+ display: block;
740
+
741
+ }
742
+
743
+ #pageNav ul li.activeStage a {
744
+
745
+ background: transparent url(../img/nav_acv.png) no-repeat center center;
746
+
747
+ }
748
+
749
+
750
+
751
+ /* #pageDown
752
+
753
+ --------------------------- */
754
+
755
+ #pageDown {
756
+
757
+ bottom: 0;
758
+
759
+ left: 0;
760
+
761
+ width: 100%;
762
+
763
+ height: 40px;
764
+
765
+ text-align: center;
766
+
767
+ position: fixed;
768
+
769
+ overflow: hidden;
770
+
771
+ z-index: 3;
772
+
773
+ }
774
+
775
+ #pageDown a {
776
+
777
+ margin: 0 auto;
778
+
779
+ width: 30px;
780
+
781
+ height: 30px;
782
+
783
+ background: transparent url(../img/next_arw.png) no-repeat center center;
784
+
785
+ display: block;
786
+
787
+ }
788
+
789
+
790
+
791
+
792
+
793
+ /* #animation
794
+
795
+ --------------------------- */
796
+
797
+ .anime01 {
798
+
799
+ transform: scale(2) rotate(0deg);
800
+
801
+ opacity: 0;
802
+
803
+ transition: 2s cubic-bezier(.4, 0, .2, 1);
804
+
805
+ }
806
+
807
+
808
+
809
+ .anime01.active {
810
+
811
+ transform: scale(1) rotate(0deg);
812
+
813
+ margin-top: 0;
814
+
815
+ opacity: 1;
816
+
817
+ }
818
+
819
+
820
+
821
+ ```
98
822
 
99
823
 
100
824
 

1

jQueryの名称が間違っていたため修正しました

2019/09/02 04:05

投稿

garudaflap
garudaflap

スコア6

test CHANGED
@@ -1 +1 @@
1
- 【jQuery】pagePiling.jsでsection毎にcssアニメーションを実行する方法
1
+ 【jQuery】OnePageScroll.jsでsection毎にcssアニメーションを実行する方法
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  フルスクリーンのコンテンツをスクロール単位で切り替える構造のページを作成し、section毎にcssアニメーションの効果が付いた画像を配置しようとしています。
14
14
 
15
- 【jQuery】pagePiling.jsのサンプルサイトをもとに作成。ほぼ構造はそのまま変えておりません。
15
+ 【jQuery】OnePageScroll.jsのサンプルサイトをもとに作成。ほぼ構造はそのまま変えておりません。
16
16
 
17
17
  各sessionがスクロールで表示されてからアニメーションが開始されるようにしたいです。
18
18
 
@@ -25,12 +25,6 @@
25
25
  ただアニメーションを設定するだけでは駄目なのでしょうか。
26
26
 
27
27
 
28
-
29
- ```
30
-
31
-
32
-
33
- ```
34
28
 
35
29
 
36
30