数字递增特效

2018-04-27  本文已影响0人  请叫我小胖纸_7ad5
number.png
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            padding: 0;
            margin: 0;
            list-style: none;
        }
        /* 成长比率 */
        #ratio{
            width: 1000px;
            height: 215px;
            margin: 0 auto;
            position: relative;
        }
        #ratio .growth_ratio{
            position: absolute;
            top: -20%;
        }
        #ratio .growth_ratio dl{
            width: 200px;
            height: 215px;
            float: left;
            box-shadow: 0 0 10px #ccc;
            margin: 0 66px;
        }
        #ratio .growth_ratio dl dt {
            height: 130px;
            background: #fdbf06;
            color: #494949;
            font-size: 59px;
            text-align: center;
            line-height: 130px;
            font-family: "LiSu";
        }
        #ratio .growth_ratio dl > i {
            display: inline-block;
            font-size: 23px;
            display: block;
            margin-top: -38%;
            margin-left: 68%;
            font-size: 30px;
            color: #494949;
        }
        #ratio .growth_ratio dl:nth-child(2) dd button{
            margin-top: 30%;
        }
        #ratio .growth_ratio dl dd button {
            display: block;
            width: 146px;
            height: 35px;
            border-radius: 15px;
            margin: 22px auto;
            color: #FCB546;
            font-size: 18px;
            text-align: center;
            line-height: 35px;
            background: none;
            border: none;
            -moz-box-shadow:0px 2px 6px #ccc inset;
            -webkit-box-shadow:0px 2px 6px #ccc inset;
            box-shadow:0px 2px 6px #ccc inset;
            outline: none;
        }
        #ratio .growth_ratio dl dd button i {
            display: inline-block;
            font-size: 12px;
        }
        /* 成长比率 */
    </style>
</head>
<body>
    <!-- 成长比率 -->
    <section id="ratio">
        <div class="growth_ratio">
            <dl>
                <dt class="timer count-title" id="count-number" data-to="16" data-speed="1500">16</dt>
                <dd><button>成立年限<i>( 年 )</i></button></dd>
            </dl>
            <dl>
                <dt class="timer count-title" id="count-number" data-to="99" data-speed="1500">99</dt>
                <i>%</i>
                <dd><button>本科上线率</button></dd>
            </dl>
            <dl>
                <dt class="timer count-title" id="count-number" data-to="568" data-speed="1500">568</dt>
                <dd><button>免费讲座<i>( 场 )</i></button></dd>
            </dl>
        </div>
    </section>
    <!-- 成长比率 -->
</body>
<script type="text/javascript" src="../../static/js/jquery-1.8.3.min.js"></script>
<script>
    
    $.fn.countTo = function (options) {
        options = options || {};
        
        return $(this).each(function () {
            // set options for current element
            var settings = $.extend({}, $.fn.countTo.defaults, {
                from:            $(this).data('from'),
                to:              $(this).data('to'),
                speed:           $(this).data('speed'),
                refreshInterval: $(this).data('refresh-interval'),
                decimals:        $(this).data('decimals')
            }, options);
            
            // how many times to update the value, and how much to increment the value on each update
            var loops = Math.ceil(settings.speed / settings.refreshInterval),
                increment = (settings.to - settings.from) / loops;
            
            // references & variables that will change with each update
            var self = this,
                $self = $(this),
                loopCount = 0,
                value = settings.from,
                data = $self.data('countTo') || {};
            
            $self.data('countTo', data);
            
            // if an existing interval can be found, clear it first
            if (data.interval) {
                clearInterval(data.interval);
            }
            data.interval = setInterval(updateTimer, settings.refreshInterval);
            
            // initialize the element with the starting value
            render(value);
            
            function updateTimer() {
                value += increment;
                loopCount++;
                
                render(value);
                
                if (typeof(settings.onUpdate) == 'function') {
                    settings.onUpdate.call(self, value);
                }
                
                if (loopCount >= loops) {
                    // remove the interval
                    $self.removeData('countTo');
                    clearInterval(data.interval);
                    value = settings.to;
                    
                    if (typeof(settings.onComplete) == 'function') {
                        settings.onComplete.call(self, value);
                    }
                }
            }
            
            function render(value) {
                var formattedValue = settings.formatter.call(self, value, settings);
                $self.html(formattedValue);
            }
        });
    };
    
    $.fn.countTo.defaults = {
        from: 0,               // the number the element should start at
        to: 0,                 // the number the element should end at
        speed: 1000,           // how long it should take to count between the target numbers
        refreshInterval: 100,  // how often the element should be updated
        decimals: 0,           // the number of decimal places to show
        formatter: formatter,  // handler for formatting the value before rendering
        onUpdate: null,        // callback method for every time the element is updated
        onComplete: null       // callback method for when the element finishes updating
    };
    
    function formatter(value, settings) {
        return value.toFixed(settings.decimals);
    }



  // custom formatting example
  $('#count-number').data('countToOptions', {
    formatter: function (value, options) {
      return value.toFixed(options.decimals).replace(/\B(?=(?:\d{3})+(?!\d))/g, ',');
    }
  });
  
  // start all the timers
  $('.timer').each(count);  
  
  function count(options) {
    var $this = $(this);
    options = $.extend({}, options || {}, $this.data('countToOptions') || {});
    $this.countTo(options);
  }
  
</script>
</html>

上一篇下一篇

猜你喜欢

热点阅读