powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Не работает скрипт на Linux
8 сообщений из 8, страница 1 из 1
Не работает скрипт на Linux
    #35347856
alukart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
На виртуальной машине 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
Не работает скрипт на Linux
    #35347874
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильное выполнение скрипта в большей степени зависит от типа веб-браузера, чем от операционной стстемы.
Ваш скрипт содержит ряд IE-only возможностей.
...
Рейтинг: 0 / 0
Не работает скрипт на Linux
    #35347878
alukart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
apapacyВаш скрипт содержит ряд IE-only возможностей.
В частности?
...
Рейтинг: 0 / 0
Не работает скрипт на Linux
    #35347888
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.

Ну и главное, такой ресайз будет неудобен для пользователей. Ваша полоска идет вслед за указателем мыши пока указатель над полоской. Но пользователь очень легко может обогнать полоску. надо тянуть полоску до отжатия мыши при любом раскладе. DnD - это тот случай когда лучше воспользоваться хорошо отлаженными кросс-браузерными библиотеками.
...
Рейтинг: 0 / 0
Не работает скрипт на Linux
    #35347920
alukart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Не работает скрипт на Linux
    #35347935
alukart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите ещё одну проблемку решить. В FireFox 2.0.0.3, если скролл находится не в начальной позиции, то при попытке растянуть слой, он слишком сильно растягивается, дальше чем пользователь указывает
...
Рейтинг: 0 / 0
Не работает скрипт на Linux
    #35347941
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело втом, что обработчики событий вызываются иногда в достаточно неожиданном порядке. Ваши обработчики иногда могут полностью отключиться. Познакомтесь с такой реализацией DnD
http://developer.yahoo.com/yui/examples/dragdrop/dd-basic.html
Тогда Вы оцените всю серьезность Ваней задачи.
...
Рейтинг: 0 / 0
Не работает скрипт на Linux
    #35347956
alukart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
apapacy http://developer.yahoo.com/yui/examples/dragdrop/dd-basic.html
Спасибо! Буду разбираться
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Не работает скрипт на Linux
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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