ОБНОВЛЕННЫЙ ВОПРОС Я обновил это, чтобы быть немного более кратким ..:
В этой скрипке: http://jsfiddle.net/pX2Xb/4/ У меня есть некоторый код Рафаэля, который рисует 3000 круговна страницу.Затем он пытается анимировать все круги одновременно (меняет цвет заливки) в течение 10 секунд, что приводит к неуклюжей визуальной анимации.Измените количество кругов на 20, чтобы увидеть более плавную анимацию для сравнения.
Мои вопросы: (а) я могу сделать обновление 3000 элементов более плавным и (б) если да, то чтокод для этого выглядит?
Некоторые примечания:
- Я готов нанести небольшой удар по времени, если есть какой-то способ оптимизировать это, но, например, я бы хотел all кругов, по крайней мере, обновляются в 1,5 раза независимо от времени анимации.Итак, если анимация длится 10 секунд, все круги должны были измениться за 15.
- 3000 элементов - это примерно мой предел на данный момент, так что я был бы рад, если бы это работало на это :)решение может эффективно обрабатывать больше, чем это, для общего случая, это было бы действительно здорово.
более старые детали, в случае, если это помогает
Iсоздаю большую карту округов США, которых насчитывается более 3000;Я использую этот файл Википедии svg , чтобы получить соответствующие пути SVG для создания карты, и я рендеринг карты, используя RaphaelJs .
Соответственно, я в итогес более чем 3000 операторов, подобных следующему:
var cc_02130 = rsr.path("M 140.66674,.... 320.11635"); // county path
cc_02130.attr({id: '02130',.. .."marker-start": 'none'}); // init attrs
Я также создаю Paper.set()
объект для хранения всех этих элементов:
var myset = paper.set([cc_56039, cc_56040, cc_56041 ...])
На мгновение забыв, чтоФайл, сгенерированный на самом деле, здесь довольно большой, я был бы очень признателен за предложения , как я могу применить изменения к объему объектов, описанных выше, что является быстрым и достаточно разумным для процессора (возможно, большой вопрос).
Я определенно открыт для изменения структуры моего кода / объектов, если я могу индивидуально изменять атрибуты определенных округов.Например, я хотел бы иметь возможность применять разные цвета для каждого содержимого пути в секунду или две (для всех 3000+).
Проблема, с которой я сталкиваюсь, заключается не в том, как применить изменения цветаанимации и т. д., но как это сделать быстро и эффективно.Прямо сейчас моя машина кричит на меня, если я повторяю цикл и применяю изменения к более чем 3000 объектам;в качестве альтернативы я использовал setTimeout
, чтобы разбить изменения на более мелкие фрагменты (возможно, 10 за раз, с задержкой 40 мс).Более 3000 предметов, это становится довольно медленным, и все еще использует много процессора.
Спасибо, oli