Показать сообщение отдельно
  #13 (permalink)  
Старый 29.01.2012, 05:48
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Как то так, но в идеале события лучше вешать через нормальные методы, addEvenetListener. Но для примера привожу примерно так.
Возможно что-то придется под себя подкорректировать.
<!DOCTYPE html>
<html>
    <head>
        <style type="text/css">
            div {
                position: absolute;
                left: 50%;
                top: 50%;
                width: 100px;
                height: 100px;
                margin: -50px 0 0 -50px;
                background-color: #0f0;
                color: #f00;
            }
        </style>

        <script type="text/javascript">
            function init() {
                function mouseDirection( callback ) {

                    // Save old mouse position
                    var X, Y;

                    document.onmousemove = function( e ) {
                        // correction event for IE
                        e = e || window.event;
                        // correction page for IE
                        if ( e.pageX == null && e.clientX != null ) {
                            var html = document.documentElement,
                                body = document.body;
                            e.pageX = e.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
                            e.pageY = e.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);
                        }

                        // reset direction to default
                        var direction = 0;

                        // adjust coordinates or move starting position
                        X = ( X || ( X = e.pageX ) ) && X <= e.pageX + 2 && X >= e.pageX - 2 && ( e.pageY >= Y + 2 || e.pageY <= Y - 2 ) ? e.pageX : X;
                        Y = ( Y || ( Y = e.pageY ) ) && Y <= e.pageY + 2 && Y >= e.pageY - 2 && ( e.pageX >= X + 2 || e.pageX <= X - 2 ) ? e.pageY : Y;

                        // definition position
                        direction += Y > e.pageY ? 1 : 0; // to TOP
                        direction += X < e.pageX ? 2 : 0; // to RIGHT
                        direction += Y < ( Y = e.pageY ) ? 4 : 0; // to BOTTOM
                        direction += X > ( X = e.pageX ) ? 8 : 0; // to LEFT

                        // execute callback
                        callback( direction );
                    }
                }

                (function( window ) {
                    var direction = 0;
                    mouseDirection(function( dir ) {
                        direction = dir;
                    });

                    document.getElementById('debug').onmouseout = function() {
                        var pos = '';

                        pos += direction & 1 ? 'Top' : '';
                        pos += direction & 2 ? 'Right' : '';
                        pos += direction & 4 ? 'Bottom' : '';
                        pos += direction & 8 ? 'Left' : '';

                        document.getElementById('debug').innerHTML = pos;
                    }
                })( window );
            }
        </script>
    </head>
    <body onload="init();">
        <div id="debug"></div>
    </body>
</html>
Ответить с цитированием