random position of divs in javascript

后端 未结 4 918
被撕碎了的回忆
被撕碎了的回忆 2020-12-01 05:48

I\'m trying to make Divs to appear randomly anywhere on a webpage with javascript. So a div appears then disappears, then another div appears somewhere else on the page then

相关标签:
4条回答
  • 2020-12-01 06:19

    Let's say you have this HTML:

    <div id="test">test div</div>
    

    And this CSS:

    #test {
        position:absolute;
        width:100px;
        height:70px;
        background-color:#d2fcd9;
    }
    

    Using jQuery, if you use this script, whenever you click the div, it will position itself randomly in the document:

    $('#test').click(function() {
        var docHeight = $(document).height(),
            docWidth = $(document).width(),
            $div = $('#test'),
            divWidth = $div.width(),
            divHeight = $div.height(),
            heightMax = docHeight - divHeight,
            widthMax = docWidth - divWidth;
    
        $div.css({
            left: Math.floor( Math.random() * widthMax ),
            top: Math.floor( Math.random() * heightMax )
        });
    });
    

    The way this works is...first you calculate the document width and height, then you calculate the div width and height, and then you subtract the div width from the document width and the div height from the document height and consider that the pixel range you're willing to put the div in (so it doesn't overflow out of the document). If you have padding and border on the div, you'll need to account for those values too. Once you've figured out the range, you can easily multiple that by Math.random() and find the random position of your div.

    So once more: first find the dimensions of the container, then find the dimensions of your element, then subtract element dimensions from container dimensions, and THEN use Math.random() on that value.

    The basic idea is encapsulated here:

    http://jsfiddle.net/5mvKE/

    0 讨论(0)
  • 2020-12-01 06:22

    Here's one way to do it. I'm randomly varying the size of the div within a fixed range, then setting the position so the object is always placed within the current window boundaries.

    (function makeDiv(){
        // vary size for fun
        var divsize = ((Math.random()*100) + 50).toFixed();
        var color = '#'+ Math.round(0xffffff * Math.random()).toString(16);
        $newdiv = $('<div/>').css({
            'width':divsize+'px',
            'height':divsize+'px',
            'background-color': color
        });
    
        // make position sensitive to size and document's width
        var posx = (Math.random() * ($(document).width() - divsize)).toFixed();
        var posy = (Math.random() * ($(document).height() - divsize)).toFixed();
    
        $newdiv.css({
            'position':'absolute',
            'left':posx+'px',
            'top':posy+'px',
            'display':'none'
        }).appendTo( 'body' ).fadeIn(100).delay(1000).fadeOut(500, function(){
          $(this).remove();
          makeDiv(); 
        }); 
    })();
    

    Edit: For fun, added a random color.

    Edit: Added .remove() so we don't pollute the page with old divs.

    Example: http://jsfiddle.net/redler/QcUPk/8/

    0 讨论(0)
  • 2020-12-01 06:39

    Some bugs:

    1. You missed to position the div absolutely. Otherwise it will not work.
    2. I think you need to ad 'px' to the numbers.
    3. The map is made of strings

    Right in your jQuery css setup:

    myDiv.css({
        'position' : 'absolute',
        'top' : finalDivPositionTop + 'px',
        'left' : finalDivPositionLeft + 'px'
    });
    
    0 讨论(0)
  • 2020-12-01 06:45

    I changed an existant code by this one for our website, you can see it on tweefox.nc

    <script>
                function draw() {
                    $(canvas).attr('width', WIDTH).attr('height',HEIGHT);
                    con.clearRect(0,0,WIDTH,HEIGHT);
                    for(var i = 0; i < pxs.length; i++) {
                        pxs[i].fade();
                        pxs[i].move();
                        pxs[i].draw();
                    }
                }
    
                function Circle() {
                    this.s = {ttl:8000, xmax:10, ymax:4, rmax:10, rt:1, xdef:950, ydef:425, xdrift:4, ydrift: 4, random:true, blink:true};
    
                    this.reset = function() {
                        this.x = (this.s.random ? WIDTH*Math.random() : this.s.xdef);
                        this.y = (this.s.random ? HEIGHT*Math.random() : this.s.ydef);
                        this.r = ((this.s.rmax-1)*Math.random()) + 1;
                        this.dx = (Math.random()*this.s.xmax) * (Math.random() < .5 ? -1 : 1);
                        this.dy = (Math.random()*this.s.ymax) * (Math.random() < .5 ? -1 : 1);
                        this.hl = (this.s.ttl/rint)*(this.r/this.s.rmax);
                        this.rt = Math.random()*this.hl;
                        this.s.rt = Math.random()+1;
                        this.stop = Math.random()*.2+.4;
                        this.s.xdrift *= Math.random() * (Math.random() < .5 ? -1 : 1);
                        this.s.ydrift *= Math.random() * (Math.random() < .5 ? -1 : 1);
                    }
    
                    this.fade = function() {
                        this.rt += this.s.rt;
                    }
    
                    this.draw = function() {
                        if(this.s.blink && (this.rt <= 0 || this.rt >= this.hl)) {
                            this.s.rt = this.s.rt*-1;
                            this.dx = (Math.random()*this.s.xmax) * (Math.random() < .5 ? -1 : 1);
                            this.dy = (Math.random()*this.s.ymax) * (Math.random() < .5 ? -1 : 1);
                        } else if(this.rt >= this.hl) this.reset();
                        var newo = 1-(this.rt/this.hl);
                        con.beginPath();
                        con.arc(this.x,this.y,this.r,0,Math.PI*2,true);
                        con.closePath();
                        var cr = this.r*newo;
                        g = con.createRadialGradient(this.x,this.y,0,this.x,this.y,(cr <= 0 ? 1 : cr));
                        g.addColorStop(0.0, 'rgba(255,255,255,'+newo+')');
                        g.addColorStop(this.stop, 'rgba(255,255,255,'+(newo*.2)+')');
                        g.addColorStop(1.0, 'rgba(255,255,255,0)');
                        con.fillStyle = g;
                        con.fill();
                    }
    
                    this.move = function() {
                        this.x += (this.rt/this.hl)*this.dx;
                        this.y += (this.rt/this.hl)*this.dy;
                        if(this.x > WIDTH || this.x < 0) this.dx *= -1;
                        if(this.y > HEIGHT || this.y < 0) this.dy *= -1;
                    }
    
                    this.getX = function() { return this.x; }
                    this.getY = function() { return this.y; }
                }
                $(document).ready(function(){
    //              if( /Android|AppleWebKit|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
    //              } else {
                        if(document.getElementById('pixie')) {
                            WIDTH = $(window).width();
                            HEIGHT = $(window).height();    
                            canvas = document.getElementById('pixie');
                            $(canvas).attr('width', WIDTH).attr('height',HEIGHT);
                            con = canvas.getContext('2d');
                            pxs = new Array();
                            rint = 60;
                            for(var i = 0; i < 50; i++) {
                            pxs[i] = new Circle();
                            pxs[i].reset();
                            }
                            setInterval(draw,rint);
                        }
    //              }
                });
            </script>
    
    0 讨论(0)
提交回复
热议问题