Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ускорить работу скрипта
 
 автор: Саша   (17.02.2009 в 19:58)   письмо автору
 
 

Здравствуйте.
Привожу код который позволяет таскать елементы по странице


<html>
<head>
<!-- Приведенный ниже код заключается между тегами <head>...</head> -->
<script language="JavaScript">

// Объявим глобальные переменные
// Переменная состояния, по умолчанию ничего не двигается = false
var moveState = false;
// Переменные координат мыши в начале перемещения, пока неизвестны
var x0, y0;
// Начальные координаты элемента, пока неизвестны
var divX0, divY0;


// Объявим функцию для определения координат мыши
function defPosition(event) {
    var x = y = 0;
    if (document.attachEvent != null) { // Internet Explorer & Opera
        x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
        y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
    }
    if (!document.attachEvent && document.addEventListener) { // Gecko
        x = event.clientX + window.scrollX;
        y = event.clientY + window.scrollY;
    }
    return {x:x, y:y};
}

// Функция инициализации движения
// Записываем всё параметры начального состояния
function initMove(div, event) {
    var event = event || window.event;
    
    x0 = defPosition(event).x;
    y0 = defPosition(event).y;

    divX0 = div.style.left ? parseInt(div.style.left) : x0;
    divY0 = div.style.top  ? parseInt(div.style.top) : y0;    
    moveState = true;
    //document.write("x0=" + x0 + ", y0=" +y0 );
}

// Если клавишу мыши отпустили вне элемента движение должно прекратиться
document.onmouseup = function() {
    moveState = false;
}

// И последнее
// Функция обработки движения:
function moveHandler(div, event) {
    var event = event || window.event;
    if (moveState) {
        div.style.position='absolute';
        div.style.left = divX0 + defPosition(event).x - x0;
        div.style.top  = divY0 + defPosition(event).y - y0;
    }
}

</script>

</head>
<body>
<html>

<div style='' \
        onmousedown = 'initMove(this, event);' \
        onmouseup = 'moveState = false;' \
        onmousemove = 'moveHandler(this, event);' \
    >

<div class="squarebox"><div class="squareboxgradientcaption" style="height:23px; cursor: pointer;" onClick="">
    <div style="float: left" id=test><span class="style4">Vehicles</span></div>
    <div style="float: right"><img src="img/arrow_down.gif" width="10" height="10" border="0" alt="Show/Hide" title="Show/Hide" /></div></div>
    
</div>
</div>
</body>
</html>



В нем есть 2 проблемы. Первая, скрипт работает не достаточно быстро. Когда мышкой водить слишком быстро, слой не успевает за мышкой. Второе, при первом нажатии и перетаскивании слой пригает относительно того положения, при котором его дернули, но уже второй раз он нормально, без прыжков начинает двигаться. Помогите решить эту проблему. Спасибо.

  Ответить  
 
 автор: вялый   (17.02.2009 в 21:30)   письмо автору
 
   для: Саша   (17.02.2009 в 19:58)
 

я бы посоветовал вам пользоваться jQuery. Изобретать велосипеды нынче не в моде
http://www.linkexchanger.su/2008/18.html как раз про технологию drag and drop

  Ответить  
 
 автор: Lelik   (17.02.2009 в 22:20)   письмо автору
 
   для: Саша   (17.02.2009 в 19:58)
 

что бы решить эти 2 проблемы наверное надо писать разработчикам браузеров, а не на форум программистов :)
И не надо использовать сторонние библиотеки по типу jQuery или Prototype (слишком много лишнего кода придется с собой таскать, что не есть признаком высокого уровня мастерства), как вариант можно исходный код рассмотреть для общего образования.
По-поводу моды на изобретение велосипедов — обязательно изобретай, так как надо подымать свой уровень, что без «велосипедов» будет очень тяжело. А хороший спец, который без всяких библиотек умеет ваять и в кризис оплачивается прилично.

  Ответить  
 
 автор: Саша   (17.02.2009 в 23:55)   письмо автору
 
   для: Lelik   (17.02.2009 в 22:20)
 

Спасибо помогли конечно Ж-)

  Ответить  
 
 автор: sl1p   (18.02.2009 в 00:11)   письмо автору
 
   для: Саша   (17.02.2009 в 23:55)
 

Прыгают когда в первый раз устанавливается диву position: absolute;
Все элементы перестают его учитывать и возможно опускаются вниз.

  Ответить  
 
 автор: вялый   (18.02.2009 в 00:20)   письмо автору
 
   для: Lelik   (17.02.2009 в 22:20)
 

нынче, в эпоху мегабитных каналов и гигагерцовых процессоров
>слишком много лишнего кода придется с собой таскать
думаете оно на что-то повлияет?

что лучше: я буду делать скрипт с кучей гемороя и мозгоёбства, проверяя на работоспособность в десятке браузеров, и под каждый баг браузера писать заглушку

или я потрачу свое время на простой и красивый синтаксис jQuery, где даже не надо делать разницу в коде между IE и FF, при этом время написания скрипта уменьшится более чем в 2 раза

для примера посмотрите, сколько кода нужно для реализации красивого плавного Drag-and-drop по моей ссылке выше

  Ответить  
 
 автор: Lelik   (18.02.2009 в 10:18)   письмо автору
 
   для: вялый   (18.02.2009 в 00:20)
 

Дорогой мой друг, вот когда ты придешь работать в организацию или у тебя будет такой сайт, где каждый килобайт на вес золота, ты всё поймешь :)

  Ответить  
 
 автор: вялый   (18.02.2009 в 13:42)   письмо автору
 
   для: Lelik   (18.02.2009 в 10:18)
 

ммм а можно примеры таких сайтов? :)

  Ответить  
 
 автор: Lelik   (18.02.2009 в 13:54)   письмо автору
 
   для: вялый   (18.02.2009 в 13:42)
 

яднекс, яху, рамблер, гугл... список думаю ты сам сможешь продолжить :)

  Ответить  
 
 автор: вялый   (18.02.2009 в 22:05)   письмо автору
 
   для: Lelik   (18.02.2009 в 13:54)
 

нууу до скриптописателя яндекса мне как до марса раком :)

  Ответить  
 
 автор: Lelik   (18.02.2009 в 22:11)   письмо автору
 
   для: вялый   (18.02.2009 в 22:05)
 

зато есть к чему стремиться :)

  Ответить  
 
 автор: PAT   (18.02.2009 в 22:17)   письмо автору
 
   для: Саша   (17.02.2009 в 19:58)
 

Принцип перетаскивания у вас левый какой-то использован.
Посмотрите мой код (23.05.2008 в 03:17) в теме http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=53491 - там всё "таскается" без проблем - быстро и без дёрганий и прыжков.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования