Придумывать ничего не надо, достаточно понимать. Чтоб потом, когда внезапно понадобится, само на ум пришло.)
|
Может вопрос и тупой, но можно ли как-то получить набор видимых, объявленных в коде переменных и, возможно, функций? Например,
(function(){
var x = 5, y = 10;
console.log(__variables__); // Объект {x:3, y:10}
})()
|
FINoM, нормальными средствами — никак. Потребуется либо разбирать код скриптом, чтобы достать объявления переменных, либо писать что-то вроде этого:
Function.prototype.scope = function () {
var script = this.toString().replace(/function ?.*\([^)]*\)(?:\n|\s|\t)\{/, "").replace(/\}(?:\n|\t|\s)*$/, "").replace(/var +([а-яa-z0-9]+)/gi, "scope.$1");
var scope = {};
scope.scope = {};
with (scope)
eval(script);
return scope.scope;
};
var x = function () {
var p = 123;
};
alert(x.scope().p);
Давно писал. Можно заточить под свои нужды. |
Всем снова привет! Народ где я застрял? в чем ошибка?
Почему count не увеличивается?
var count =0;
whatRol(count);
function whatRol(c){
var int = window.setTimeout(rol,2);
function rol(){
c++;
alert(count)
}
}
Как я понимаю я не передаю аргумент в функцию. Но почему? |
Передаешь, ты наверно просто ожидаешь что он передался по ссылке, но примитивные значения передаются по значению.
|
Если по простому, то увеличивается внутренняя переменная c, которой при вызове присваивается значение переменной count, а не сама count.
|
мдя. ясно. надо повтыкать эту тему. про это я не подумал. спасибо всем
|
Очень был удивлен возможностью создавать константы в хроме
const X = 5; X = 10; alert(X);Какие еще браузеры их поддерживают? |
|
всегда ли функции запускаются в том порядке в каком их вызываешь?
|
Да.
|
Хорошо, а при нескольких setInterval() их итерации могут запускаться не последовательно? Например:
var int1 = setInterva(f1,1) var int2 = setInterval(f2,1) var int3 = setInterval(f3,1) К примеру итерация из int3 обогнать int1 или int2? |
Да.
|
спс
|
всем привет. при использовании setInterval() в разных браузерах минимальный интервал разный:
Firefox и Safari в среднем 11мс Opera — 2 мс Chrome — 4 мс IE — 15 мс. С помошью postMessage можно существенно сократить время для всех браузеров кроме IE. вот статья кому интересно. Вопрос в следующем. Есть ли какой-нибудь способ сократить время в IE? UPD Если есть ссылки на топик по данному сабжу буду признателен |
Зачем?
|
Можно ли сделать объект-константу либо свойство-константу?
|
FINoM, в ES5 есть Object.seal и Object.freeze, но они еще не везде реализованы. Константное "свойство" можно реализовать, используя методы, возвращающие копию значения.
|
Aetae, для быстрой и одновременно плавной анимации.
|
UpJump,
Мне кажется это будет зависеть больше не от этого времени, а от того, сколько стилей вы будете менять за 1 кадр, так как это очень медленная операция, так что оптимизировать нужно именно там, при возможности менять классы, а не значения свойств стилей. А скорости вполне хватить должно.
<!DOCTYPE html>
<meta charset = "utf-8" />
<script type = "text/javascript">
window.onload = function(){
var stranger = document.getElementById("stranger"), A = 250, STEP = 1;
var top, left, c = 0;
(function(){
c %= 360;
top = A + A * Math.sin((c ++)/180 * Math.PI);
left = A + A * Math.cos((c ++)/180 * Math.PI);
stranger.style.top = top + "px";
stranger.style.left = left + "px";
window.setTimeout(arguments.callee, STEP);
}())
}
</script>
<style type = "text/css">
#stranger{
position:absolute;
border: red solid thick;
background-color: green;
width: 50px;
height: 50px;
}
</style>
<div id = "stranger"></div>
в ie9 летает быстрее чем в FF и даже быстрее чем в хроме, правда открыто много вкладок. И еще, лично я считаю, что лучше пожертвовать плавностью в анимации перед загруженностью процессора, если вы раз в миллисекунду будете менять штук 10 стилей элемента, и если таких элементов будет несколько например (вдруг игра какая нибудь), то тормозов не избежать, лучше уж делать шаг перемещения побольше, чем супер короткие кадры. К тому же если анимация быстрая, то не заметно все равно. Это конечно относится только к длительным постоянным анимациям, а не всплывашкам/менюшкам/выезжашкам |
Задам вопрос здесь, чтобы не плодить темы.
Писал функционал для создания ДОМ узлов, поудобнее страндартного, на его основе. И возвращает он documentFragment, так как есть возможность за раз вернуть несколько элементов в него запакованных. Но нужна была возможность преобразовывать DOM Элемент в хтмл и я сначала сделал так
//корневой элемент, который я буду возвращать
chest = document.createDocumentFragment();
//создаем тут все дерево в зависимости от параметров
//***************
//в конце
chest.html = function(){
var div = document.createElement("DIV");
div.appendChild(this);
return div.innerHTML;
}
return chest;
Но по вставке фрагмента в узел, он исчезает. Вопрос в том, куда девается метод html() ? Удаляется garbage collector -ом? Пока я этого не понял я еще так попробовал
Object.prototype.html = function(){
if(!this.nodeType){
return "";
}
var div = document.createElement("DIV");
div.appendChild(this);
return div.innerHTML;
}
Проверил на html элементах, работает нормально. Не стал проверять nodeType == 1 или 3, вдруг коммент захочется создать (8) или еще чего (не знаю зачем, просто интересно). Любую ли nodeType можно appendChild ? И как как правильнее проверить Object что это XML node? (Жалко что нет прототипа у хтмл элементов в IE) |
Цитата:
Все тормоза в анимации, как подмечено ранее, в её тяжеловесности, во времени собсно обработки, и тут какой интервал не ставь - толку никакого. Надо оптимизировать.) |
огромное спасибо poorking и Aetae.
теперь понял где загвостку искуть.:thanks: |
poorking, используй строки (String.format, String.compile например). Во-первых, будет понятно, что ты за разметку генерируешь, а во-вторых, скорее всего будет быстрее, чем работа с DOM
по поводу DocumentFragment... метод html никуда не исчезает, просто appendChild(documentFragment) - это appendChild всех его детей. А как мы знаем, appendChild удаляет элементы из контейнера, в котором они до этого были Цитата:
Цитата:
|
Снова, чтоб не засорять форум, спрашиваю здесь.
Почему первый вариант вызывает ошибку, второй возвращает 4, третий работает корректно (получаем объект, указанный в скобках)?
eval('{a:4, b:6}'); //Unexpected token :
eval('{a:4}'); //4
eval('({a:4, b:6})'); //объект {a:4, b:6}
Проверялось только в хроме. |
Цитата:
Цитата:
Цитата:
Для подробностей читать грамматику языка :) |
Всем привет! Братья прошу помощи.
function f(a){
var a = a*(2*Math.PI/360);
var z = (2*(-Math.sin(a))+2*(Math.cos(a)));
alert(z);
}
f(45);
Почему результат не ноль. Даже не близко. Может кто углядит потому как глаз уже замылился. |
Цитата:
|
а ну да... понял. если округлить то да.
Math.cell(z); |
Всем привет! Вот такой мелкий скрипт:
<div id = 'd'></div>
<script>
function clear(div_id){
for(var i =0; i<document.getElementById(div_id).childNodes.length; i++)
document.getElementById(div_id).removeChild(document.getElementById(div_id).childNodes[i]);
}
function f(){
clear('d');
var c = document.createElement('canvas');
var div = document.getElementById('d');
div.appendChild(c);
}
window.setInterval(f,1);
</script>
Дело в том что он(скрипт) мало по малу но зжирает память. Никак не могу понять от чего. Есть подозрения что остаются ссылки на удаленные элементы(но опять таки где и как с ними бороться?). Читал про утечки памяти, но либо не дошло, либо не в этом дело. В общем братья может кто знает выход из данной ситуации? P.S. Это попытка написать примитивный движок на базе js + canvas если кому интересно. Код упрощен до проблемной зоны. Тестировал на Chrome и IE. |
народ а есть способ очистить canvas? Просто удалить canvas не подходит.
к примеру что бы с каждой итерацией обновлять составляющее канваса. |
Изменить размеры, например.
|
нет тут дело в том что бы анимировать векторный элемент в канвасе
UPD к примеру в css + javascript дает возможность анимировать простой див. в канвасе такого нет |
Конечно, это же растровая графика, а не векторная.
|
короче как я понял без вариантов? тупо удалять и создавать новый канвас
|
Нарисовать прямоугольник на весь canvas нужного цвета.
|
по вашей идеи залез в пыльный справочник ... и clearRect();
все гениальное просто. спасибо за идею! |
ребята может кто знает информацию по оптимизации javascript, для того что бы понять что больше а что меньше нагружает память?
читал это интересуюсь так же любой информацией касательно циклов и событий. как сэкономить и на чем. |
на какие версии распространяется определение IE таким образом?
document.all ? alert('IE!') : alert('Not IE!');
Хотя бы сработает на IE6? |
У меня восьмой. Действует. А вообще, самый короткий способ определить ie, который я знаю - это такой:
alert('\v'=='v' ? "IE!" : "Not IE!");
Нашёл где-то... |
| Часовой пояс GMT +3, время: 17:18. |