make words pulsate jQuery

时间:2015-05-24 17:05:36

标签: javascript jquery html css

http://codepen.io/anon/pen/ZGBEyo

我在问题的标题中看到了一项艰巨的任务。

我正在做一个插件,让单词在屏幕上移动,增加大小的锐化效果,并减小尺寸与模糊效果,最困难 - 如果他们有相同的一个方面名字,你可能会问:你是什么意思?

他们有这种完全随机的行为来成长并保持专注,变得更小并且变得模糊,但是我需要使两个同名的单词在同一时间变得清晰。

我的插件就像这样:

<span class="word" data-float="true" data-range-x="100" data-range-y="100" data-top="500" data-left="50" data-size="25">Love</span>

If data-float is true, the word is authorised to use the plugin
data-range-x = the maximum x range that can move
data-range-y = the maximum y range that can move
data-top = the top initial position
data-left = the left initial position
data-size = the size of the word

那么,如果它们具有相同的名称,是否可以使它们相互尊重?

工作插件有三个喜欢的词:

&#13;
&#13;
+ function($) {

  var Float = function(element) {
    this.element = element;
    this.wrapper;
    this.settings = {
      rangeX : element.data('range-x') || 100,
      rangeY : element.data('range-y') || 100,
      speed  : element.data('speed')   || 5000,
      top    : element.data('top')     || 0,
      left   : element.data('left')    || 0,
      size   : element.data('size')    || 20
    };
  };

  Float.prototype.init = function() {
    this.setPosition();
    this.setSize();
    this.setWrapper();
    this.andWalk();

  };

  Float.prototype.setPosition = function() {
    this.element
      .css('top', this.settings.top)
      .css('left', this.settings.left); 
  };
  
  Float.prototype.setSize = function() {
    this.element.css('font-size', this.settings.size + 'px');
    if (this.settings.size <= 20) this.setShadow();      
  };
  
  Float.prototype.setShadow = function() {
    console.log('test');
    this.element.css('color', 'transparent');          
  };

  Float.prototype.setWrapper = function() {
    this.wrapper = $('<div/>').css({
      'width': this.element.outerWidth(true),
      'height': this.element.outerHeight(true),
      'z-index': this.element.css('zIndex')
    });

    this.wrapper.css({
      'position': this.element.css('position'),
      'top': this.element.position().top,
      'left': this.element.position().left,
      'float': this.element.css('position') === 'absolute' ? 'none' : 'left'
    });

    this.element.wrap(this.wrapper).css({
      'position': 'absolute',
      'top': 0,
      'left': 0
    });
  };

  Float.prototype.andWalk = function() {
    var self = this;
    var newX = Math.floor(Math.random() * this.settings.rangeX) - this.settings.rangeX / 2;
    var newY = Math.floor(Math.random() * this.settings.rangeY) - this.settings.rangeY / 2 - 0;
    var newS = Math.floor(Math.random() * this.settings.speed)  + this.settings.speed  / 2;
    var newF;
    
    if (this.settings.size > 40) { newF = Math.floor(Math.random() * (70 - 15 + 1) + 15); } 
    else if (this.settings.size <= 25) { newF = Math.floor(Math.random() * (25 - 15 + 1) + 15); } 
    else { newF = Math.floor(Math.random() * (40 - 15 + 1) + 15); }

    this.element.animate({
      'fontSize': newF,
      'color': newF >= 25 ? '#FFFFFF' : 'transparent',
      'top': newY,
      'left': newX
    }, newS, function() {
      self.andWalk();
    });
  };

  $(window).on('load', function() {
    $('[data-float]').each(function() {
      var element = $(this).data('float') || false;

      if (element) {
        var float = new Float($(this));
        float.init();
      }
    });
  });
}(jQuery);
&#13;
body {
  background: black;
  color: white;
}
.word {
  position: absolute;
  text-shadow: 0 0 5px rgba(255, 255, 255, 0.9);
}
&#13;
<span class="word" data-float="true" data-index="1" data-range-x="100" data-range-y="100" data-top="500" data-left="50" data-size="25">Love</span>
<span class="word" data-float="true" data-index="2" data-range-x="100" data-range-y="100" data-top="90" data-left="290" data-size="40">Love</span>
<span class="word" data-float="true" data-index="3" data-range-x="100" data-range-y="100" data-top="500" data-left="290" data-size="70">Love</span>

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

您可能希望利用animate.css库,因为它使用CSS3过渡来为具有脉冲,翻转,缩放,旋转,滚动,淡入淡出和其他效果的元素设置动画。然后你可以使用jquery或纯javascript来调用这些效果。

这是我用来演示如何使用jQuery http://jsfiddle.net/ashk3l/qxfj8L2d/

来调用此库中的效果的jsfiddle

基本上你的HTML看起来像这样:

<h1 class="your-element">Hello!</h1>

你的jQuery调用看起来像这样:

$(document).ready(function () {
    $('.your-element').addClass('animated pulse');
});