Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   простенький скрипт(листалка фоновых изображений) не работает в хроме и сафари (https://javascript.ru/forum/misc/14496-prostenkijj-skript-listalka-fonovykh-izobrazhenijj-ne-rabotaet-v-khrome-i-safari.html)

LostSenSS 21.01.2011 11:24

Цитата:

Сообщение от x-yuri (Сообщение 88994)
<script>
var name = [1, 2, 3];
name[0] = 5;
alert(name[0]);
</script>

афигеть! ))
но от чего так?
у меня хром выводит 1цу, а лиса - 5.
по логике тут 5.
присваиваем элементу массива значение 5 потом выводим этот элемент.
от куда чертов хром берет 1цу непонятно

dmitriymar 21.01.2011 12:29

Цитата:

Сообщение от LostSenSS
браузеры все последние версии, правда под макосью, но не думаю, что это существенно.
по поводу document.имя элемента .src=ссылка чет не очень понял (

обращение к свойству src элемента не через id а через его свойство name

x-yuri 21.01.2011 13:13

да не при чем тут обращение через document.<имя элемента>, к тому же оно работает не для всех элементов

а причина в том, что глобальные переменные - свойства глобального объекта (упрощенно, см. ниже)
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <script type="text/javascript">
        for( var k in window ){
            var v =   k == 'name'   ? eval(k)   : '';
            document.write(k+': '+v+'<br>');
            // document.write(k+': '+window[k]+'<br>');
        }
    </script>
</body>
</html>


ну и в дополнение объявление переменной через var и создание переменной без var - это не то же самое
<script>
var a = 1;   // создаем глобальную переменную
b = 2;   // создаем свойство в глобальном объекте (window)
alert( a );
alert( b );
alert( delete a );   // нельзя удалить глобальную переменную
alert( delete b );
try {
    alert( a );
} catch( e ){ alert(e); }
try {
    alert( b );
} catch( e ){ alert(e); }
</script>

dmitriymar 21.01.2011 13:49

уже увидел на что все ему внимание обращали.я имел в виду конкретное свойство src

x-yuri 21.01.2011 14:00

кстати, второй пример - для общего развития. Лучше всегда создавать переменные с помощью var и никогда не удалять их ;) Если нужно удалять, то для этого существуют ассоциативные массивы (объекты, в случае javascript)

LostSenSS 21.01.2011 14:33

засунул все объявления внутрь функции и все везде заработало, спасибо

x-yuri 21.01.2011 16:47

Вложений: 3
вообще это делается как-то так (за исключением того, что я картинки по высоте ограничил, чтобы в окно просмотра поместились). В частности, первая картинка вставляется серверным скриптом, причем не обязательно первая по счету, а в зависимости от параметра в URL. Таким образом, поисковая система увидит все изображения и пользователь, в случае отключенного javascript или ошибок в скрипте, тоже увидит все изображения

p.s. а ты говорил, картинки нельзя вставить...
<!doctype html>
<html>
<head>   
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/mootools/1.3.0/mootools-yui-compressed.js"></script>
    <style type="text/css">
        body {
            font-family: Constantia, "Lucida Bright", Lucidabright, "Lucida Serif", Lucida, "DejaVu Serif", "Bitstream Vera Serif", "Liberation Serif", Georgia, serif;
        }
        img{
            height: 100px;
        }
        a { 
            color: #36c;
            text-decoration: none;
        }
        a:hover {
            text-decoration: underline;
        }
        .throbber {
            position: absolute;
            visibility: hidden;
            background: #000;

            opacity: .3;
            filter: alpha(opacity=30);
            -ms-filter: "alpha(opacity=30)";
            -khtml-opacity: .30;
            -moz-opacity: .30;
        }
        .throbber-gif {
            background: url(http://upload.wikimedia.org/wikipedia/commons/d/d2/Spinning_wheel_throbber.gif) no-repeat center;
        }
        .disabled {
            color: #999;
            text-decoration: none;
        }
    </style>
    <script type="text/javascript">
        var prefix = 'http://javascript.ru/forum/attachment.php?';

        function qs( v ){
            return new QueryString(v);
        }

        var QueryString = new Class({
            initialize: function( v ){
                v = v || location.search;
                this._assoc =   typeOf(v) == 'string'
                    ? v.substr(1).split('&')
                        .toAssoc(function( v ){
                            var kv = v.split('=');
                            return {
                                'k': decodeURIComponent(kv[0]),
                                'v': decodeURIComponent(kv[1])
                            };
                        })
                    : v;
            },
            
            val: function( n, v ){
                if( arguments.length > 1 )
                    this._assoc[n] = v;
                return this._assoc[n];
            },
            
            unset: function( n ){
                delete this._assoc[n];
            },
            
            toAssoc: function(){
                return this._assoc;
            },
            
            toString: function(){
                return   '?'+
                    this._assoc
                        .map(function( v, k ){
                            return   encodeURIComponent(k)+'='+encodeURIComponent(this._assoc[k]);
                        })
                        .join('&');
            }
        });

        Function.implement({
            'of': function( o ){
                var f = this;
                return function(){
                    return f.apply(o, arguments);
                };
            }
        });

        Array.implement({
            'toAssoc': function( f ){
                var r = {};
                for( var i=0; i<this.length; i++ ){
                    var kv = f(this[i], i, this);
                    r[kv['k']] = kv['v'];
                }
                return r;
            }
        });

        Element.implement({
            'setCoordinates': function( coords ){
                this.setStyles({
                    'left': coords['left'],
                    'top': coords['top'],
                    'width': coords['width'],
                    'height': coords['height']
                });
                return this;
            }
        });

        var Img = new Class({
            initialize: function( images ){
                this._images = images;

                this._i = this._images.indexOf( qs().val('img') );
                if( this._i == -1 )
                    this._i = 0;

                this._throbber = new Element('div', {'class': 'throbber', 'html': '<div class="throbber-gif"></div>'})
                    .inject( document.body );

                this._forward = $('forward');
                this._backward = $('backward');

                this._forward.addEvents({
                    'click': this._next.of(this).pass(true),
                    'mousedown': function(){ return false; }
                });
                this._backward.addEvents({
                    'click': this._next.of(this).pass(false),
                    'mousedown': function(){ return false; }
                });
            },

            _next: function( next ){
                if( ! this._disabled() ){
                    this._disabled( true );
                    this._load( newI.of(this)() );
                }
                return false;

                function newI(){
                    var r = next ? this._i+1 : this._i-1;
                    r %= this._images.length;
                    if( r < 0 )
                        r = this._images.length-1;
                    return r;
                }
            },

            _load: function( i ){
                var img = $('img');
                this._showThrobber( true );
                img.onload = function(){
                    this._i = i;
                    this._disabled( false );
                    this._showThrobber( false );
                }.of(this)
                img.src = prefix+this._images[i];
            },

            _showThrobber: function( show ){
                this._throbberGif = this._throbberGif || $$('.throbber-gif')[0];
                if( show ){
                    var coords = $('img').getCoordinates();
                    this._throbber.setStyles({
                        'left': coords['left'],
                        'top': coords['top']
                    });
                    this._throbberGif.setStyles({
                        'width': coords['width'],
                        'height': coords['height']
                    });
                }
                this._throbber
                    .setStyles({'visibility':   show ? 'visible' : ''});
            },

            _disabled: function( disabled ){
                if( arguments.length ){
                    var f = disabled ? 'addClass' : 'removeClass';
                    this._forward[f]( 'disabled' );
                    this._backward[f]( 'disabled' );
                }
                return this._forward.hasClass('disabled');
            }
        });
    </script>
</head>
<body>   

    <a id="backward" href="http://javascript.ru/forum/attachment.php?attachmentid=664&stc=1&d=1295611491">backward</a>

    <a id="forward" href="http://javascript.ru/forum/attachment.php?attachmentid=663&stc=1&d=1295611491">forward</a>

    <br>

    <img id="img" src="http://javascript.ru/forum/attachment.php?attachmentid=662&stc=1&d=1295611491">


    <script type="text/javascript">
        var images = ['attachmentid=662&stc=1&d=1295614554', 'attachmentid=663&stc=1&d=1295614554', 'attachmentid=664&stc=1&d=1295614554'];
        new Img( images );
    </script>

</body>
</html>


Часовой пояс GMT +3, время: 10:51.