Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Не работает скрипт на Linux / 8 сообщений из 8, страница 1 из 1
01.06.2008, 19:14
    #35347856
alukart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает скрипт на Linux
Доброго времени суток!
На виртуальной машине VMware-workstation-5.5.1-19175 стоит MCBC 3.0. На нём и не работает скрипт, который позволяет менять высоту слоя мышью. В винде всё работает.
Вот скрипт со слоем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
<html><head>
<script type="text/javascript">
var USER_DATA = {

    Browser: {
        KHTML: /Konqueror|KHTML/.test(navigator.userAgent) &&
                !/Apple/.test(navigator.userAgent),
        Safari: /KHTML/.test(navigator.userAgent) &&
                /Apple/.test(navigator.userAgent),
        Opera: !!window.opera,
        MSIE: !!(window.attachEvent && !window.opera),
        Gecko: /Gecko/.test(navigator.userAgent) &&
                !/Konqueror|KHTML/.test(navigator.userAgent)
    },

    OS: {
        Windows: navigator.platform.indexOf("Win") > - 1 ,
        Mac: navigator.platform.indexOf("Mac") > - 1 ,
        Linux: navigator.platform.indexOf("Linux") > - 1 
    }
};

var IS_IE = USER_DATA['Browser'].MSIE;

function NaN0(th) { return isNaN(th) ?  0  : th; };

function getPosition(e){

    var left =  0 ;
    var top  =  0 ;
    while (e.offsetParent) {
        left += e.offsetLeft + (e.currentStyle ?
            parseInt(NaN0(e.currentStyle.borderLeftWidth)) :  0 );
        top  += e.offsetTop  + (e.currentStyle ?
            parseInt(NaN0(e.currentStyle.borderTopWidth)) :  0 );
        e = e.offsetParent;
    }

    left += e.offsetLeft + (e.currentStyle ?
            parseInt(NaN0(e.currentStyle.borderLeftWidth)) :  0 );
    top  += e.offsetTop  + (e.currentStyle ?
            parseInt(NaN0(e.currentStyle.borderTopWidth)):  0 ); 	

    return {x:left, y:top};
}

function getAlignedPosition(e) {

    var left =  0 ;
    var top  =  0 ;
    while (e.offsetParent) {
        left += e.offsetLeft + (e.currentStyle ?
            parseInt(NaN0(e.currentStyle.borderLeftWidth)) :  0 );
        top  += e.offsetTop  + (e.currentStyle ?
            parseInt(NaN0(e.currentStyle.borderTopWidth)) :  0 );
        e  = e.offsetParent;
        if (e.scrollLeft) {left -= e.scrollLeft; }
        if (e.scrollTop)  {top  -= e.scrollTop; }
    }

    var docBody = document.documentElement ?
        document.documentElement : document.body;

    left += e.offsetLeft +
        (e.currentStyle ?
                parseInt(NaN0(e.currentStyle.borderLeftWidth))
                :  0 ) +
        (IS_IE ? parseInt(NaN0(docBody.scrollLeft)) :  0 ) -
        parseInt(NaN0(docBody.clientLeft));
    top  += e.offsetTop  +
        (e.currentStyle ?
                parseInt(NaN0(e.currentStyle.borderTopWidth))
                :   0 ) +
        docBody.scrollTop -
        parseInt(NaN0(docBody.clientTop));

    return {x:left, y:top};
}

function mouseCoords(ev) {

    if (ev.pageX || ev.pageY) {
        return {x:ev.pageX, y:ev.pageY};
    }

    var docBody = document.documentElement
                        ? document.documentElement
                        : document.body;

    return {
        x: ev.clientX + docBody.scrollLeft - docBody.clientLeft,
        y: ev.clientY + docBody.scrollTop  - docBody.clientTop
    };
}

function getMouseOffset(target, ev, aligned) {
    ev = ev || window.event;
    if (aligned == null) aligned = false;

    var docPos    = aligned
        ? getAlignedPosition(target)
        : getPosition(target);
    var mousePos = mouseCoords(ev);

    return {
        x: mousePos.x - docPos.x,
        y: mousePos.y - docPos.y
    };
}

function resize_go(event) {
	pos=getMouseOffset(users, event, true);
	document.getElementById('users').style.height=pos.y;
	return true;
};

function resize_stop() {
	document.onmousemove="";
	document.onmouseup="";
	return true;
};

function resize(event) {
	document.onmousemove=resize_go;
	document.onmouseup=resize_stop;
	return true;
};
</script>
</head>
<body>
<table border= 0  width= 100 % cellspacing="0" cellpadding="1" bgcolor=#B3B9C3><tr><td>
<table border= 0  width= 100 % bgcolor=white><tr><td>
<div id="users" style="width: 100%; height: 100; overflow: auto; contentEditable=true"> 
</div></td></tr><tr bgcolor=#D0D9F6><td align=right onmousedown="resize(event);">&nbsp</td></tr></table></td></tr></table>
</body>
</html>
...
Рейтинг: 0 / 0
01.06.2008, 19:38
    #35347874
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает скрипт на Linux
Правильное выполнение скрипта в большей степени зависит от типа веб-браузера, чем от операционной стстемы.
Ваш скрипт содержит ряд IE-only возможностей.
...
Рейтинг: 0 / 0
01.06.2008, 19:51
    #35347878
alukart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает скрипт на Linux
apapacyВаш скрипт содержит ряд IE-only возможностей.
В частности?
...
Рейтинг: 0 / 0
01.06.2008, 20:01
    #35347888
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает скрипт на Linux
<div id="users" style="width: 100%; height: 100; overflow: auto;" contentEditable=true>123
</div>
contentEditable работает для IE. Но у Вас и для IE неточность. Это не св-во стиля. а св-во элемента. (Я этот код подправил в примере).
Ну еще не совсем корректно используется глобальная переменная users и pos (это я тоже подправил)

function resize_go(event) {
var users=document.getElementById("users")
var pos=getMouseOffset(users, event, true);
document.getElementById('users').style.height=pos.y;
return true;
};

Что происходит под Linux не могу проверить - проверял в Opera и FF под W32.

Ну и главное, такой ресайз будет неудобен для пользователей. Ваша полоска идет вслед за указателем мыши пока указатель над полоской. Но пользователь очень легко может обогнать полоску. надо тянуть полоску до отжатия мыши при любом раскладе. DnD - это тот случай когда лучше воспользоваться хорошо отлаженными кросс-браузерными библиотеками.
...
Рейтинг: 0 / 0
01.06.2008, 20:46
    #35347920
alukart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает скрипт на Linux
apapacy<div id="users" style="width: 100%; height: 100; overflow: auto;" contentEditable=true>123
</div>
contentEditable работает для IE. Но у Вас и для IE неточность. Это не св-во стиля. а св-во элемента. (Я этот код подправил в примере).
Ну еще не совсем корректно используется глобальная переменная users и pos (это я тоже подправил)

function resize_go(event) {
var users=document.getElementById("users")
var pos=getMouseOffset(users, event, true);
document.getElementById('users').style.height=pos.y;
return true;
};

Что происходит под Linux не могу проверить - проверял в Opera и FF под W32.

Здорово! Под Linux всё работает! apapacy спасибо за полный ответ!
apapacy
Ну и главное, такой ресайз будет неудобен для пользователей. Ваша полоска идет вслед за указателем мыши пока указатель над полоской. Но пользователь очень легко может обогнать полоску. надо тянуть полоску до отжатия мыши при любом раскладе
Код: plaintext
document.onmouseup=resize_stop;
это разве не то?
...
Рейтинг: 0 / 0
01.06.2008, 20:58
    #35347935
alukart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает скрипт на Linux
Помогите ещё одну проблемку решить. В FireFox 2.0.0.3, если скролл находится не в начальной позиции, то при попытке растянуть слой, он слишком сильно растягивается, дальше чем пользователь указывает
...
Рейтинг: 0 / 0
01.06.2008, 21:06
    #35347941
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает скрипт на Linux
Дело втом, что обработчики событий вызываются иногда в достаточно неожиданном порядке. Ваши обработчики иногда могут полностью отключиться. Познакомтесь с такой реализацией DnD
http://developer.yahoo.com/yui/examples/dragdrop/dd-basic.html
Тогда Вы оцените всю серьезность Ваней задачи.
...
Рейтинг: 0 / 0
01.06.2008, 21:31
    #35347956
alukart
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает скрипт на Linux
apapacy http://developer.yahoo.com/yui/examples/dragdrop/dd-basic.html
Спасибо! Буду разбираться
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Не работает скрипт на Linux / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]