2

私は現在、友人とWebサイトを作成しています。データベースから画像を引き出し、グリッド上のxy位置に画像を取り込むためのJavaScriptループを作成する必要があります。

私たちが使用しているデータベースはpythonとdjangoで構築されていますが、今のところ、1つのループとテストイメージで動作させるようにしています。

これは問題のループです:

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();

私がこれまでに取り組んできたこと:

  • 2つのセクション(プライムとスタンダード)でインデックスページに描画されるグリッド。
  • xy座標と標準またはプライムグリッドスペースを表示するマウスオーバースクリプト。(jsfiddleでは機能しません)

私がこれまでに壊したもの:

  • データベースから画像を引き出してページの本文に書き込むためのJavascriptループ
  • 一部の画像データを表示するためのマウスオーバースクリプト

私はウェブページとjsFiddleを作るために以下のすべてを含めました

HTMLヘッド:

    <!-- 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>
4

2 に答える 2

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 キー) を見てエラーを確認することをお勧めします。

于 2013-01-26T16:09:37.010 に答える
1

あなたのコードは、構文エラーとロジックの問題でいっぱいです。まず、ブラウザー コンソールを使用してエラーを確認し、それに応じて修正します。

また、JavaScript では大文字と小文字が区別されるため、関数を作成する場合は、createImages()同じ大文字と小文字を使用して関数を呼び出す必要があることに注意してください。createimages()存在しないものを呼び出しています

as variable を使用して、 がカウンターであるループでpicオブジェクトを作成することはできません。forpic

また、ループの外側ではなく、ループ内に新しいイメージを作成する必要があります。

作業コード:

//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();

デモ: http://jsfiddle.net/8eYhK/9/

于 2013-01-26T16:23:05.977 に答える