こんにちは。
下記のプラグインを使用して、要素が画面内に入ったときにフェードインさせるようと思っています。
引用テキスト要素がスクロールで画面内に入った時、内包要素を順番にフェードインするjQueryプラグインを作りました
書いてある通りに記述したのですが、要素を通り過ぎてからじゃないと表示されないのですが、一体なぜでしょう?
ちなみに、下記のプラグインも使用しています。
jQuery とっても簡単、ページ内リンクでスムーズスクロール
HTML
1<!doctype html> 2<html lang="ja"> 3<head> 4<meta name="viewport" content="width=device-width,user-scalable=no,maximum-scale=1" /> 5<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 6<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 7<script type="text/javascript" src="js/jquery-scrollInTurn.js"></script> 8 9<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script> 10<script> 11$(function(){ 12 $('a[href^=#]').click(function() { 13 var speed = 400; 14 var href= $(this).attr("href"); 15 var target = $(href == "#" || href == "" ? 'html' : href); 16 var position = target.offset().top; 17 $('body,html').animate({scrollTop:position}, speed, 'swing'); 18 return false; 19 20 $() 21 }); 22 23 $(document).ready(function() { 24 $('.element').scrollInTurn(); 25 }); 26 27}); 28</script> 29 30<meta charset="UTF-8"> 31<title> </title> 32<link rel="stylesheet" href="css/style.css" type="text/css"> 33</head> 34<body> 35 36… 37 38<div class="element"> 39 <p><img src="images/.png" alt="画像" class="target" id="...image"/></p> 40 <img src="images/.png" alt="画像" class="target" id="..image"/> 41</div> 42 43… 44 45</body> 46</html>
JavaScript
1/*! 2 * jQuery scrollInTurn plugin -version 1.0.1 3 * 4 * 5 * Copyright 2014, Mayumi Tanji 6 * Released under the MIT license 7 * http://www.opensource.org/licenses/mit-license.php 8 */ 9 10 (function( $ ){ 11 12 $.fn.scrollInTurn = function( options ) { 13 14 var defaults = $.extend( { 15 selector : '.target', 16 delaySpeed : 300, 17 fadeInSpeed : 300, 18 fadeOutSpeed : 300, 19 easing : 'swing', 20 delayHeight : 500, 21 fadeOutEvent : true 22 }, options); 23 24 return this.each(function() { 25 26 var self = $(this); 27 28 $(window).on('load',function(){ 29 self.find(defaults.selector).css({opacity: 0}); 30 }); 31 32 $(window).on('load scroll resize',function(){ 33 var target = self.find(defaults.selector); 34 var elmTop = self.offset().top; 35 var scrTop = $(window).scrollTop(); 36 var elmHeight = self.height(); 37 var windowHeight = $(window).height(); 38 if (scrTop > elmTop - defaults.delayHeight || scrTop + windowHeight > elmTop + elmHeight){ 39 if (!self.hasClass('on')) { 40 target.each(function(i){ 41 $(this).delay(i*(defaults.delaySpeed)).animate({opacity:'1'}, defaults.fadeInSpeed, defaults.easing); 42 }); 43 self.addClass('on'); 44 } 45 } 46 if (scrTop + windowHeight < elmTop){ 47 if (self.hasClass('on') && defaults.fadeOutEvent === true) { 48 target.stop(true, true).animate({'opacity': 0}, defaults.fadeOutSpeed, defaults.easing); 49 self.removeClass('on'); 50 } 51 } 52 }); 53 54 }); 55 56 }; 57 58})( jQuery );
初心者で至らない点もございますが、何卒よろしくお願いします!