使用Javascript循环使用图像填充页面

时间:2013-01-26 15:09:59

标签: javascript jquery html css

我正在和朋友一起写一个网站,我需要创建一个javascript循环,用于从数据库中提取图像并在网格上的xy位置填充它们。

我们使用的数据库是用python和django构建的,但是现在我正试图让它使用一个循环和一个测试图像。

这是有问题的循环:

function createImages(){

            var picture = document.createElement('img');{

                for (var pic=0; pic < 100; pic++) { 
                    pic.pk = 1;
                    pic.model = 'image';
                    pic.fields.title = 'Image Test';
                    pic.fields.timestamp = '2013-01-01T00:00:00.000Z';
                    pic.fields.image = 'http://i240.photobucket.com/albums/ff301/quyenhiepkhach/CAT.jpg';
                    pic.fields.height = 30 + 'px';
                    pic.fields.width = 30 + 'px';
                    pic.fields.link = '#ImageLink';
                    pic.fields.board = 1;
                    pic.fields.posx = 100 + 'px';
                    pic.fields.posy = 50 + 'px';
                    pic.fields.owner = 1;
                    pic.fields.region = 1;

                    picture.className = 'image-tooltip';
                    picture.src = pic.fields.image;
                    picture.style.marginTop = pic.fields.posy;
                    picture.style.marginLeft = pic.fields.posx;
                    picture.style.height = pic.fields.height;
                    picture.style.width = pic.fields.width;


                    document.body.appendChild(picture);


                }

            }

};

createimages();

到目前为止我的工作:

  • 绘制到我的索引页面上的网格有两个部分(素数和 标准)。
  • 鼠标悬停脚本,显示xy坐标和标准或素数 gridspace。 (不在jsfiddle工作)

到目前为止,我打破了什么:

  • 用于将图像从数据库中拉出并将其写入页面主体的Javascript循环
  • 鼠标悬停脚本以显示部分图像数据

我已将以下所有内容都包含在内以制作网页,还包含 jsFiddle

HTML HEAD:

    <!-- Le random script for mouseover -->
    <script type="text/javascript" src="http://code.jquery.com/jquery-git.js"></script>

<!--MOUSEOVER SCRIPT FOR GRID COORDINATES-->
<script>
        $(window).load(function(){
            var tooltip = $( '<div id="tooltip">' ).appendTo( 'body' )[0];

                $( '.coords' ).    
                each(function () {       

                    var pos = $( this ).offset(),
                        top = pos.top,           
                        left = pos.left,          
                        width = $( this ).width(),  
                        height = $( this ).height();       

                    $( this ).
                        mousemove(function ( e ) {
                        var x =  ( (e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft) - left ) .toFixed( 0 ),
                            y =  ( ( (e.clientY + document.body.scrollTop + document.documentElement.scrollTop) - top ) ) .toFixed( 0 );

                        if ( x > 20 && x < 481 && y > 20 && y < 321) {
                            $( tooltip ).text( 'prime | ' + x + ', ' + y ).css({                    
                                left: e.clientX + 20,                    
                                top: e.clientY + 10                
                            }).show();
                        }

                        else {
                            $( tooltip ).text( 'standard | ' + x + ', ' + y ).css({                    
                                left: e.clientX + 20,                    
                                top: e.clientY + 10                
                            }).show();

                        }

                    }).         

                    mouseleave(function () {                
                        $( tooltip ).hide();            
                    });    

                });    

        });

</script>

<!--MOUSEOVER SCRIPT FOR IMAGES-->
<script> 
                $(window).load(function(){
            var imagetooltip = $( '<div id="imagetooltip">' ).appendTo( 'body' )[0];

            $( '.image-tooltip' ).    
                each(function () {      

                    $( imagetooltip ).text( pic.fields.title + ' , ' + pic.fields.link ).css({                    
                        left: e.clientX + 20,                    
                        top: e.clientY + 10                
                    }).show();




                    mouseleave(function () {                
                        $( tooltip ).hide();            
                    });     
                });    
        });

</script>

CSS:

        /* Style for standard section on grid */

        .grid {
            margin: 0px auto auto;
            border: 1px solid #000;
            border-width: 0 1px 1px 0;
            background-color: #28ACF9;
        }

        /* Style for grid div */

        .grid div {
            border: 1px solid #000;
            border-width: 1px 0 0 1px;
            float: left;
        }

        /* Style for prime section on grid */

        .gridprime {
            margin-top: 50px ;
            margin-left: 50px;
            border: 1px solid #000;
            background-color: #FFFF33;
            float: left;
        }

        /* Style for grid coords tooltip */

        #tooltip { 
            text-align:center; 
            background:black; 
            color:white; 
            padding:3px 0; 
            width:150px; 
            position:fixed; 
            display:none; 
            white-space:nowrap;
            z-index:3; 
        }


        /* Style for image tooltip */

        #imagetooltip { 
            text-align:left; 
            background:#CCC; 
            color:white; 
            padding:3px 0; 
            width:200px; 
            position:fixed; 
            display:none; 
            white-space:nowrap;
            z-index:4; 
        }

HTML BODY:

<!--SCRIPT TO CREATE THE GRID (WORKING)-->
<script type="text/javascript">

function creategrid(size){

            var primeW = Math.floor((460) / size),
                primeH = Math.floor((300) / size),
                standardW = Math.floor((500) / size),
                standardH = Math.floor((500) / size);

            var standard = document.createElement('div');
                standard.className = 'grid coords';
                standard.style.width = (standardW * size) + 'px';
                standard.style.height = (standardH * size) + 'px';
                standard.board = '1';

            var prime = document.createElement('div');
                prime.className = 'gridprime';
                prime.style.width = (primeW * size) + 'px';
                prime.style.height = (primeH * size)+ 'px';
                prime.style.position = 'absolute'
                prime.style.zIndex= '1';
                standard.appendChild(prime);

            for (var i = 0; i < standardH; i++) {

                for (var p = 0; p < standardW; p++) {

                    var cell = document.createElement('div');
                        cell.style.height = (size - 1) + 'px';
                        cell.style.width = (size - 1) + 'px';
                        cell.style.position = 'relative'
                        cell.style.zIndex= '2';
                        standard.appendChild(cell);

            }

        }

        document.body.appendChild(standard);

    }

    creategrid(10);

</script>



<!--SCRIPT TO LOOP IMAGES OUT OF DATABASE (USING 1 TO TEST FOR NOW)-->

<script type="text/javascript">

function createImages(){

            var picture = document.createElement('img');{

                for (var pic=0; pic < 100; pic++) { 
                    pic.pk = 1;
                    pic.model = 'image';
                    pic.fields.title = 'Image Test';
                    pic.fields.timestamp = '2013-01-01T00:00:00.000Z';
                    pic.fields.image = 'http://i240.photobucket.com/albums/ff301/quyenhiepkhach/CAT.jpg';
                    pic.fields.height = 30 + 'px';
                    pic.fields.width = 30 + 'px';
                    pic.fields.link = '#ImageLink';
                    pic.fields.board = 1;
                    pic.fields.posx = 100 + 'px';
                    pic.fields.posy = 50 + 'px';
                    pic.fields.owner = 1;
                    pic.fields.region = 1;

                    picture.className = 'image-tooltip';
                    picture.src = pic.fields.image;
                    picture.style.marginTop = pic.fields.posy;
                    picture.style.marginLeft = pic.fields.posx;
                    picture.style.height = pic.fields.height;
                    picture.style.width = pic.fields.width;

                    if (pic.fields.board = document.body.id);{
                        document.body.appendChild(picture);
                    }

                }

            }

        };

        createimages();

</script>

2 个答案:

答案 0 :(得分:1)

您的代码中存在各种错误

此处pic是一个数字,但您似乎在设置属性,因为它是一个对象文字

for (var pic=0; pic < 100; pic++) { 
   pic.pk = 1;

此行也将失败,因为您需要先创建pic.fields对象

pic.fields = {}; // <-- add this line
pic.fields.title = 'Image Test';

您的功能称为createImages,但您尝试拨打createimages(区分大小写)

我建议您查看浏览器控制台(通常是F12)以检查错误

答案 1 :(得分:1)

您的代码充满了语法错误和逻辑问题。 使用浏览器控制台查看错误并进行相应修复。

另请注意,javascript区分大小写,因此如果您创建函数createImages(),则需要使用相同的大小写来调用函数。您正在调用不存在的createimages()

您无法使用pic作为变量在for循环中创建对象,其中pic是计数器。

还需要在循环内创建新图像,而不是在它之外。

工作代码:

//SCRIPT TO LOOP IMAGES OUT OF DATABASE (USING 1 TO TEST FOR NOW)//
function createImages() {

    for (var pic = 0; pic < 100; pic++) {
         /* new image for each pass of loop*/
        var picture = document.createElement('img');
        var data = {
            pk: 1,
            model: 'image',
            fields: {
                title: 'Image Test',
                timestamp: '2013-01-01T00:00:00.000Z',
                image: 'http://i240.photobucket.com/albums/ff301/quyenhiepkhach/CAT.jpg',
                height: 30 + 'px',
                width: 30 + 'px',
                link: '#ImageLink',
                board: 1,
                posx: 100 + 'px',
                posy: 50 + 'px',
                owner: 1,
                region: 1
            }
        };

        picture.className = 'image-tooltip';
        picture.src = data.fields.image;
        picture.style.marginTop = data.fields.posy;
        picture.style.marginLeft = data.fields.posx;
        picture.style.height = data.fields.height;
        picture.style.width = data.fields.width;
       /* comment out "if" since isn't true*/
       // if (data.fields.board ==document.body.id) {
            document.body.appendChild(picture);
       // }

    }

}


createImages();

DEMO:http://jsfiddle.net/8eYhK/9/