|
|
|
| Всем привет!
попытался собрать небольшой скрипт "слайдер" на javascript. когда закончил обнаружил что работает только в Opere и никак не хочет в IE и еще хуже в FF. вот весь код:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
<title>my</title>
<link rel="stylesheet" href="style.css" type="text/css" />
<script type="text/javascript" language="JavaScript">
var selectorWidth = 11;
var sliderWidth = 200;
var leftBorder = 0;
var rightBorder = 200;
var point = (sliderWidth-selectorWidth-3)/(rightBorder-leftBorder); // point - количество пикселей на единицу значения
var sliderOffset = 0;
var step = 10;
function sliderClick(e)
{
if (!e && window.event) e = window.event;
var x;
x = e.clientX;
setValue(x);
}
function setValue(x)
{
var e = document.getElementById('info');
var selector = document.getElementById('selector');
if(x < 0)
selector.style.left = 0+'px';
else if(x > sliderWidth-selectorWidth-3)
selector.style.left = (sliderWidth-selectorWidth-3)+'px';
else
{
if(step == 0)
selector.style.left = x+'px';
else
selector.style.left = Math.ceil(x/(step*point))*step*point+'px';
}
e.value = getValue(selector);
}
function getValue(selector)
{
return Math.ceil(parseInt(selector.style.left)/point)+leftBorder;
}
function start()
{
attachEvent("onmousemove", move);
}
function finish()
{
detachEvent("onmousemove", move);
}
function move(e)
{
if(!e && window.event) e = window.event;
var x = e.clientX;
setValue(x);
}
</script>
</head>
<body>
<h1>Slider</h1>
<div class="classSlider" id="slider" onclick="sliderClick();">
<img class="classSelector" id="selector" alt="" src="selector.gif" onmousedown="start();" onmouseup="finish();" /></div><br />
<input id="info" type="text" value="" size="3" />
</body>
|
помомгите пожалуйста исправить его так что работало хотябы еще в IE и в FF...
Всем спасибо... | |
|
|
|
|
|
|
|
для: LikeThat
(10.09.2008 в 20:57)
| | совсем не понял как должно работать , но что-бы в FF тоже менялись цифры в input
нужно передать event в функцию
<div class="classSlider" id="slider" onclick="sliderClick(event);">
|
| |
|
|
|
|
|
|
|
для: xx77
(11.09.2008 в 00:54)
| | _ | |
|
|
|
|
|
|
|
для: xx77
(11.09.2008 в 23:24)
| | Я немного изменил код вот так: http://nopaste.info/f34d14fa9f.html
но все равноостается глюк...не правильно отрабатывает removeEvent...
может так вам станет прозрачнее ситуация? | |
|
|
|
|
|
|
|
для: LikeThat
(10.09.2008 в 20:57)
| | У вас не "слайдер" получился, а какой-то "коллайдер" :-)
Слава Богу, что не большой андронный :-)
В общем, без вашего файла CSS и без самой картинки я так и не понял - какого эффекта вы хотите добиться своим скриптом.
Или поместите их в аттаче, или же дайте ссылку на размещенную в сети страничку.
На крайний случай - поясните "на пальцах", чего хотите получить-то?
По-любому, сразу скажу, что у вас некроссбраузерно прописаны функции start () и finish () - FF не понимает attachEvent и detachEvent. | |
|
|
|
|
 1.7 Кб |
|
|
для: PAT
(11.09.2008 в 05:18)
| | То что получился коллайдер: очень может быть... :-) я вообще чуть ли не в первый раз с javascript имею дело... так что простите.... :-)
Вкладываю архивчик... там все есть...
заранее спасибо... | |
|
|
|
|
 1.5 Кб |
|
|
для: LikeThat
(11.09.2008 в 08:40)
| | Забирайте свой слайдер-коллайдер :-)
Изменены три файла - html, css и один из gif'ов
PS. Посоветовал бы ещё дополнить <body> отменой событий ondrag="return false" onselectstart="return false" oncontextmenu="return false", если это, разумеется, не помешает ещё каким-то скриптам на странице.
*Внимательно прочтите | |
|
|
|
|
|
|
|
для: PAT
(11.09.2008 в 05:18)
| | ну хоть кто-нибудь посоветуйте что-нибудь... очень надо... неужели никто не может помочь? | |
|
|
|
|
|
|
|
для: LikeThat
(11.09.2008 в 13:54)
| | уже неактуальное Объясните пожалуйста функцию
// Cross-browser addEventListener()/attachEvent() replacement.<?
function addEvent(elt, name, handler, atEnd) {
name = name.replace(/^(on)?/, 'on');
var prev = elt[name];
var tmp = '__tmp';
elt[name] = function(e) {
if (!e) e = window.event;
var result;
if (!atEnd) {
elt[tmp] = handler; result = elt[tmp](e); elt[tmp] = null; // delete() does not work in IE 5.0 (???!!!)
if (result === false) return result;
}
if (prev) {
elt[tmp] = prev; result = elt[tmp](e); elt[tmp] = null;
}
if (atEnd && result !== false) {
elt[tmp] = handler; result = elt[tmp](e); elt[tmp] = null;
}
return result;
}
return handler;
}
|
UPD// удалил листинг | |
|
|
|
|
 2.2 Кб |
|
|
для: xx77
(11.09.2008 в 23:29)
| | интересный этот слайдер-колайдер,
сделал из него колорвайзер :)
может быть окажется полезным, можно подбирать цвета чем-то таким
, хотя не доводил свой код, как-бы неотшлифовано , и далеко до визуального редактора
и у меня вопросы
есть-ли в javascript стандартная встроенная функция перевода в шестнадцатиричные типа dec2hex()
?
и почему когда я объявляю переменную в глобальной зоне видимости
(если так называется , всмысле вне фукнкций)
то там внутри функций есть switch внутри которого переменная как-бы не определена
и приходится снова и снова писать document.getElementById('vis'), вместо vis
?
и ещё
создастся-ли какая-нибудь заметная нагрузка , если я в глобальной области видимости , создам много переменных таким путём, например больше 20и , или лучше создавать такие переменные по мере использования внутри функций ? | |
|
|
|
|
|
|
|
для: xx77
(14.09.2008 в 03:02)
| | >есть-ли в javascript стандартная встроенная функция перевода в шестнадцатиричные
Есть такая.
var x = 212;
alert (x.toString (16))
|
>почему когда я объявляю переменную в глобальной зоне видимости
(если так называется , всмысле вне фукнкций)
то там внутри функций есть switch внутри которого переменная как-бы не определена
и приходится снова и снова писать document.getElementById('vis'), вместо vis
1. vis у вас имя идентификатора объекта на странице.
На мой взгляд, очень ГЛУПО создавать ещё и переменную (глобальную или локальную) с тем же именем var vis = document.getElementById ('vis');
Возьмите за правило - все РАЗНЫЕ объекты должны иметь РАЗНЫЕ имена.
Посмотрите недавний пример глупости с одинаковыми именами.
2. Если объявите какую-то переменную вне функции - var obj = document.getElementById ('vis'); , то в ЛЮБОМ месте внутри ЛЮБОГО оператора ЛЮБОЙ функции можете свободно работать с этой глобальной переменной.
>если я в глобальной области видимости , создам много переменных таким путём, например больше 20и , или лучше создавать такие переменные по мере использования внутри функций
Если вычисления незначительны, то принципиальной разницы нет.
Но ГРАМОТНЫЙ программист никогда без нужды не будет делать лишних глобальных переменных.
Это как в древних языках программирования - в Фортране-IV, в ПЛ-I, в Алголе... - каждый оператор писался на отдельной строке и каждый оператор должен был иметь МЕТКУ в виде номера строки. Соответственно, во всех этих языках имелся оператор безусловного перехода GO TO метка.
И всё прекрасно было с этим оператором - всё работало как надо...
Только вот НОРМАЛЬНЫЕ программисты считали СТЫДНЫМ для себя этот оператор использовать. | |
|
|
|
|
|
|
|
для: PAT
(14.09.2008 в 04:37)
| | Думаю тему можно закрыть... :))
Всем большое спасибо а участие! | |
|
|
|