Moving an image randomly around a page

前端 未结 2 784
野趣味
野趣味 2020-12-31 21:49

I created three .png images of hot air balloons. Each are different sizes so that they give off the idea of \"depth.\" What is the best way to code these .png\'s so that the

相关标签:
2条回答
  • 2020-12-31 22:05

    Here is an existing [partial] solution to your problem:

    HTML:

    <div id="container">
    <div class='a'></div>
        <div class='b'></div>
        <div class='c'></div>
    </div>​
    

    CSS:

    div#container {height:500px;width:500px;}
    
    div.a {
    width: 50px;
    height:50px;
     background-color:red;
    position:fixed;
    
    }
    div.b {
    width: 50px;
    height:50px;
     background-color:blue;
    position:fixed;
    
    }
    div.c {
    width: 50px;
    height:50px;
     background-color:green;
    position:fixed;
    
    }
    

    ​ JavaScript:

    $(document).ready(function() {
        animateDiv($('.a'));
            animateDiv($('.b'));
            animateDiv($('.c'));
    
    });
    
    function makeNewPosition($container) {
    
        // Get viewport dimensions (remove the dimension of the div)
        var h = $container.height() - 50;
        var w = $container.width() - 50;
    
        var nh = Math.floor(Math.random() * h);
        var nw = Math.floor(Math.random() * w);
    
        return [nh, nw];
    
    }
    
    function animateDiv($target) {
        var newq = makeNewPosition($target.parent());
        var oldq = $target.offset();
        var speed = calcSpeed([oldq.top, oldq.left], newq);
    
        $target.animate({
            top: newq[0],
            left: newq[1]
        }, speed, function() {
            animateDiv($target);
        });
    
    };
    
    function calcSpeed(prev, next) {
    
        var x = Math.abs(prev[1] - next[1]);
        var y = Math.abs(prev[0] - next[0]);
    
        var greatest = x > y ? x : y;
    
        var speedModifier = 0.1;
    
        var speed = Math.ceil(greatest / speedModifier);
    
        return speed;
    
    }​
    

    Live JSFiddle Demo

    0 讨论(0)
  • 2020-12-31 22:12

    If anyone is interested in a jQuery plugin (forking the same functions) Easier to apply on multiple elements in the page.

    HTML:

    <div id="container">
       <div class='a rand'></div>
       <div class='b rand'></div>
       <div class='c rand'></div>
    </div>
    

    CSS:

    div#container {height:500px;width:500px;}
    div.a {
    width: 50px;
    height:50px;
     background-color:red;
    position:fixed;
        top:100px;
        left:100px;
    }
    div.b {
    width: 50px;
    height:50px;
     background-color:blue;
    position:fixed;
        top:10px;
        left:10px;
    }
    div.c {
    width: 50px;
    height:50px;
     background-color:green;
    position:fixed;
        top:200px;
        left:100px;
    }
    

    jQuery plugin:

    (function($) {
    
      $.fn.randomizeBlocks = function() {
        return this.each(function() {
                animateDiv($(this));
        });
      };
    
      function makeNewPosition($container) {
          // Get viewport dimensions (remove the dimension of the div)
          var h = $container.height() - 10;
          var w = $container.width() - 10;
    
          var nh = Math.floor(Math.random() * h);
          var nw = Math.floor(Math.random() * w);
    
          return [nh, nw];
    
      }
    
      function animateDiv($target) {
          var newq = makeNewPosition($target.parent());
          var oldq = $target.offset();
          var speed = calcSpeed([oldq.top, oldq.left], newq);
    
          $target.animate({
              top: newq[0],
              left: newq[1]
          }, speed, function() {
              animateDiv($target);
          });
    
      };
    
      function calcSpeed(prev, next) {
    
          var x = Math.abs(prev[1] - next[1]);
          var y = Math.abs(prev[0] - next[0]);
    
          var greatest = x > y ? x : y;
    
          var speedModifier = 0.03;
    
          var speed = Math.ceil(greatest / speedModifier);
    
          return speed;
    
      }
    
    }( jQuery ));
    

    Usage:

    $(document).ready(function() {
        $('.rand').randomizeBlocks();
    });
    

    http://jsfiddle.net/fmvtb88d/

    0 讨论(0)
提交回复
热议问题