简体   繁体   English

窗口滚动只一火

[英]window scroll only one fire

I have one problem, I have chart animation, everything looks ok but... I would like that this code will fire only one, but on every scroll down or up chart are start again. 我有一个问题,我有图表动画,一切看起来都不错,但是...我希望这段代码只会触发一个,但是在每次向下或向上滚动图表时都会重新启动。 Look, percents description on every scroll are starting again. 看,每个滚动条上的百分比说明都重新开始。 Is option to fire this code only first scroll? 是否可以仅在第一次滚动时触发此代码? Thank you for help 谢谢你的帮助

 $(window).scroll(function() { if ($(this).scrollTop() >= $('.holder').offset().top) { $('.bar').each(function(i) { var $bar = $(this); $(this).append('<span class="count"></span>') setTimeout(function() { $bar.css('width', $bar.attr('data-percent')); }, i * 100); }); $('.count').each(function() { $(this).prop('Counter', 0).animate({ Counter: $(this).parent('.bar').attr('data-percent') }, { duration: 2000, easing: 'swing', step: function(now) { $(this).text(Math.ceil(now) + '%'); } }); }); } }) 
 @import url(http://fonts.googleapis.com/css?family=Droid+Serif:400, 400italic|Montserrat:400, 700); html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font: inherit; font-size: 100%; vertical-align: baseline; } html { line-height: 1; } ol, ul { list-style: none; } table { border-collapse: collapse; border-spacing: 0; } caption, th, td { text-align: left; font-weight: normal; vertical-align: middle; } q, blockquote { quotes: none; } q:before, q:after, blockquote:before, blockquote:after { content:""; content: none; } a img { border: none; } article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } * { box-sizing: border-box; } body { color: #333; -webkit-font-smoothing: antialiased; font-family:"Montserrat", sans-serif; padding: 2%; } .wrap { width: 50%; margin: 0 auto; } h1 { font-family:"Montserrat", sans-serif; font-weight: bold; text-align: center; font-size: 1.5em; padding: .5em 0; margin-bottom: 1em; border-bottom: 1px solid #dadada; letter-spacing: 3px; text-transform: uppercase; } ul li { line-height: 2; font-weight: bold; font-family:"Montserrat", sans-serif; font-size: .85em; text-transform: uppercase; clear: both; } ul li:before { content:"\\2023"; padding: 0 1em 0 0; } .bar { background: #e74c3c; width: 0; margin: .25em 0; color: #fff; position: relative; transition: width 2s, background .2s; clear: both; } .bar:nth-of-type(2n) { background: #ed7669; } .bar .label { font-size: .75em; padding: 1em; background: #3d3d3d; width: 8em; display: inline-block; position: relative; z-index: 2; font-weight: bold; font-family:"Montserrat", sans-serif; } .bar .label.light { background: #575757; } .count { position: absolute; right: .25em; top: .75em; padding: .15em; font-size: .75em; font-weight: bold; font-family:"Montserrat", sans-serif; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="wrap"> <h1>Animated Bar Graphs</h1> <div class="holder"> <div class="bar cf" data-percent="85%"><span class="label">Photoshop</span> </div> <div class="bar cf" data-percent="75%"><span class="label light">Illustrator</span> </div> <div class="bar cf" data-percent="65%"><span class="label">Indesign</span> </div> <div class="bar cf" data-percent="90%"><span class="label light">HTML</span> </div> <div class="bar cf" data-percent="90%"><span class="label">CSS</span> </div> <div class="bar cf" data-percent="80%"><span class="label light">jQuery</span> </div> <div class="bar cf" data-percent="85%"><span class="label light">RWD</span> </div> <div class="bar cf" data-percent="75%"><span class="label">PHP</span> </div> <div class="bar cf" data-percent="80%"><span class="label light">WordPress</span> </div> <div class="bar cf" data-percent="70%"><span class="label">SASS/SCSS</span> </div> </div> </div> 

your script simply appends a span to holder div. 您的脚本只需将span附加到holder div。 so check if it has already a span with count class. 所以检查是否有已经是一个spancount类。 if so, continue. 如果是这样,请继续。

  $(window).on("scroll", function() { if ($(this).scrollTop() >= $('.holder').offset().top) { $('.bar').each(function(i) { var $bar = $(this); if($(this).find('span.count').length !== 0) return; console.log("span is added"); $(this).append('<span class="count"></span>') setTimeout(function() { $bar.css('width', $bar.attr('data-percent')); }, i * 100); $(window).off('scroll'); }); $('.count').each(function() { $(this).prop('Counter', 0).animate({ Counter: $(this).parent('.bar').attr('data-percent') }, { duration: 2000, easing: 'swing', step: function(now) { $(this).text(Math.ceil(now) + '%'); } }); }); } }) 
 @import url(http://fonts.googleapis.com/css?family=Droid+Serif:400, 400italic|Montserrat:400, 700); html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font: inherit; font-size: 100%; vertical-align: baseline; } html { line-height: 1; } ol, ul { list-style: none; } table { border-collapse: collapse; border-spacing: 0; } caption, th, td { text-align: left; font-weight: normal; vertical-align: middle; } q, blockquote { quotes: none; } q:before, q:after, blockquote:before, blockquote:after { content:""; content: none; } a img { border: none; } article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } * { box-sizing: border-box; } body { color: #333; -webkit-font-smoothing: antialiased; font-family:"Montserrat", sans-serif; padding: 2%; } .wrap { width: 50%; margin: 0 auto; } h1 { font-family:"Montserrat", sans-serif; font-weight: bold; text-align: center; font-size: 1.5em; padding: .5em 0; margin-bottom: 1em; border-bottom: 1px solid #dadada; letter-spacing: 3px; text-transform: uppercase; } ul li { line-height: 2; font-weight: bold; font-family:"Montserrat", sans-serif; font-size: .85em; text-transform: uppercase; clear: both; } ul li:before { content:"\\2023"; padding: 0 1em 0 0; } .bar { background: #e74c3c; width: 0; margin: .25em 0; color: #fff; position: relative; transition: width 2s, background .2s; clear: both; } .bar:nth-of-type(2n) { background: #ed7669; } .bar .label { font-size: .75em; padding: 1em; background: #3d3d3d; width: 8em; display: inline-block; position: relative; z-index: 2; font-weight: bold; font-family:"Montserrat", sans-serif; } .bar .label.light { background: #575757; } .count { position: absolute; right: .25em; top: .75em; padding: .15em; font-size: .75em; font-weight: bold; font-family:"Montserrat", sans-serif; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="wrap"> <h1>Animated Bar Graphs</h1> <div class="holder"> <div class="bar cf" data-percent="85%"><span class="label">Photoshop</span> </div> <div class="bar cf" data-percent="75%"><span class="label light">Illustrator</span> </div> <div class="bar cf" data-percent="65%"><span class="label">Indesign</span> </div> <div class="bar cf" data-percent="90%"><span class="label light">HTML</span> </div> <div class="bar cf" data-percent="90%"><span class="label">CSS</span> </div> <div class="bar cf" data-percent="80%"><span class="label light">jQuery</span> </div> <div class="bar cf" data-percent="85%"><span class="label light">RWD</span> </div> <div class="bar cf" data-percent="75%"><span class="label">PHP</span> </div> <div class="bar cf" data-percent="80%"><span class="label light">WordPress</span> </div> <div class="bar cf" data-percent="70%"><span class="label">SASS/SCSS</span> </div> </div> </div> 

You can just use .on and unlink the event inside: 您可以只使用.on并取消链接其中的事件:

 $(window).on('scroll',function() { if ($(this).scrollTop() >= $('.holder').offset().top) { $('.bar').each(function(i) { var $bar = $(this); $(this).append('<span class="count"></span>') setTimeout(function() { $bar.css('width', $bar.attr('data-percent')); }, i * 100); }); $(window).off('scroll'); $('.count').each(function() { $(this).prop('Counter', 0).animate({ Counter: $(this).parent('.bar').attr('data-percent') }, { duration: 2000, step: function(now) { $(this).text(Math.ceil(now) + '%'); } }); }); } }); 
 @import url(http://fonts.googleapis.com/css?family=Droid+Serif:400, 400italic|Montserrat:400, 700); html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font: inherit; font-size: 100%; vertical-align: baseline; } html { line-height: 1; } ol, ul { list-style: none; } table { border-collapse: collapse; border-spacing: 0; } caption, th, td { text-align: left; font-weight: normal; vertical-align: middle; } q, blockquote { quotes: none; } q:before, q:after, blockquote:before, blockquote:after { content:""; content: none; } a img { border: none; } article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } * { box-sizing: border-box; } body { color: #333; -webkit-font-smoothing: antialiased; font-family:"Montserrat", sans-serif; padding: 2%; } .wrap { width: 50%; margin: 0 auto; } h1 { font-family:"Montserrat", sans-serif; font-weight: bold; text-align: center; font-size: 1.5em; padding: .5em 0; margin-bottom: 1em; border-bottom: 1px solid #dadada; letter-spacing: 3px; text-transform: uppercase; } ul li { line-height: 2; font-weight: bold; font-family:"Montserrat", sans-serif; font-size: .85em; text-transform: uppercase; clear: both; } ul li:before { content:"\\2023"; padding: 0 1em 0 0; } .bar { background: #e74c3c; width: 0; margin: .25em 0; color: #fff; position: relative; transition: width 2s, background .2s; clear: both; } .bar:nth-of-type(2n) { background: #ed7669; } .bar .label { font-size: .75em; padding: 1em; background: #3d3d3d; width: 8em; display: inline-block; position: relative; z-index: 2; font-weight: bold; font-family:"Montserrat", sans-serif; } .bar .label.light { background: #575757; } .count { position: absolute; right: .25em; top: .75em; padding: .15em; font-size: .75em; font-weight: bold; font-family:"Montserrat", sans-serif; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="wrap"> <h1>Animated Bar Graphs</h1> <div class="holder"> <div class="bar cf" data-percent="85%"><span class="label">Photoshop</span> </div> <div class="bar cf" data-percent="75%"><span class="label light">Illustrator</span> </div> <div class="bar cf" data-percent="65%"><span class="label">Indesign</span> </div> <div class="bar cf" data-percent="90%"><span class="label light">HTML</span> </div> <div class="bar cf" data-percent="90%"><span class="label">CSS</span> </div> <div class="bar cf" data-percent="80%"><span class="label light">jQuery</span> </div> <div class="bar cf" data-percent="85%"><span class="label light">RWD</span> </div> <div class="bar cf" data-percent="75%"><span class="label">PHP</span> </div> <div class="bar cf" data-percent="80%"><span class="label light">WordPress</span> </div> <div class="bar cf" data-percent="70%"><span class="label">SASS/SCSS</span> </div> </div> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM