Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.12.2014, 17:05
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

Помогите в apply в requestAnimationFrame
Прочитал про .apply и интуитивно понимаю что мне его нужно использовать, но как - не понимаю.
...
animate: function () {
                A = this
                window.requestAnimationFrame(function () {
                    A.animate();
                    A.draw()
                });
            }

...
Эта функция - часть класса. Когда я создаю 1 объект этого класса - все хорошо, но когда я создаю 2 и более объекта, то функция работает исключительно с последним объектом - это логично, ведь она в каждом объекте переопределется. Но как мне сделать так, чтобы она не переопределялась, а просто каждый объект добавлял в нее свою функцию?
Ответить с цитированием
  #2 (permalink)  
Старый 06.12.2014, 17:47
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Добавь в начало скрипта, в самый верх:
'use strict';


Теперь, если скрипт перестанет работать - значит где-то была допущена ошибка, которая раньше просто тебе прощалась.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 06.12.2014, 17:56
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

Причем здесь это? поставил, но проблему это не выявило. Есть конкретная задача - добавить в requestAnimationFrame не одну функцию а несколько, с разных объектов, изнутри этих объектов.

т.е.
function G() {
            window.requestAnimationFrame(function () {
                testObj.draw()
                testObj.draw()
                testObj.draw()
                G()
            });
        }
        G()

работает нормально, но здесь я вне объектов объявил эту функцию. А я хочу чтобы она внутри каждого объекта вызывалась, непосредственно для этого объекта - и тут возникает проблема - функция переопределяется в каждом объекте... Мне кажется, что apply мог бы помочь, но не понимаю как его использовать ((
Ответить с цитированием
  #4 (permalink)  
Старый 06.12.2014, 18:39
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Siend
поставил, но проблему это не выявило
Давай код полностью. Где у тебя объявлена A? Почему ты сначала показал один код, а щас - другой?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 06.12.2014, 19:29
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

console.clear();

        if (!window.requestAnimationFrame) {

            window.requestAnimationFrame = (function () {

                return window.webkitRequestAnimationFrame ||
                window.mozRequestAnimationFrame ||
                window.oRequestAnimationFrame ||
                window.msRequestAnimationFrame ||
                function (callback, element) {
                    window.setTimeout(callback, 16.7);
                };
            })();
        }

        var Elements = {
            canvas: []
        }

        var Class = function () {
            var _class = function (canvas_element) {
                if (_class.init && typeof _class.init == "function") {
                    _class.init.apply(this, Array.prototype.slice.call(arguments));
                }
            };
            _class.fn = _class.prototype;

            _class.extend = function (prop) {
                for (var i in prop) {
                    _class[i] = prop[i];
                }
            };
            _class.include = function (prop) {
                for (var i in prop) {
                    _class.fn[i] = prop[i];
                }
            };
            return _class;
        };
        var T = 0;
        var CanvasControl = new Class();
        CanvasControl.extend({
            init: function (canvas_element) {
                this.canvas = canvas_element;
                this.canvas.width = canvas_element.offsetWidth;
                this.canvas.height = canvas_element.offsetHeight;
                this.ctx = this.canvas.getContext("2d");
                this.WIDTH = window.innerWidth;
                this.HEIGHT = window.innerHeight;
                this.canvas.onmousemove = this.myMove;
                Elements.canvas.push(this)
                this.EP = Elements.canvas.length-1
            }
        });
        CanvasControl.include({
            ClearStyle: function () {
                this.ctx.strokeStyle = "rgba(0,0,0,1)";
                this.ctx.fillStyle = "rgba(0,0,0,1)";
                this.ctx.lineWidth = 1;
            },
            RECT: function (x, y, w, h) {
                this.ctx.beginPath();
                this.ctx.rect(x, y, w, h);
                this.ctx.fill();
                this.ctx.stroke();
            },
            DrawText: function (s, x, y) {
                this.ctx.textBaseline = "middle";
                this.ctx.textAlign = "center";
                this.ctx.strokeText(s, x, y);
            },
            draw: function () {
                this.RECT(0, 0, 100, 100);
            },
            myMove: function (e) {
                //this.xMouse = e.pageX// - this.Cleft
                //this.yMouse = e.pageY// - this.Ctop

                console.log(this)
            }
        });

        var can1 = new CanvasControl(document.getElementById("canvasA"));

        function G() {
            window.requestAnimationFrame(function () {
                can1.draw()
                G()
            });
        }
        G()


Сейчас в конце, в функции G происходит вызов requestAnimationFrame, а до этого была функция animate внутри самого класса, которая пыталась вызывать requestAnimationFrame, но каждый следующий объект этого класса её перекрывал.
Ответить с цитированием
  #6 (permalink)  
Старый 06.12.2014, 19:33
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Siend
а до этого была функция animate внутри самого класса
Вот верни ее на место. И добавь use strict.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 06.12.2014, 19:39
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Siend, а че ты за поебень намутил. Какой-то непонятный Class. Внутри херня какая-то происходит. Какието extend'ы, include'ы.
Тебе че надо? Конструктор и набор методов? Ну тогда это так делается:


function CanvasControl() {
    // код конструктора
}

CanvasControl.prototype = {
    // тут методы
};


Все просто и понятно. Или у тебя задача - сделать так, чтоб хуй кто смог разобраться. Кста, ты уже вкурсе, что через некоторое время ты сам будешь смотреть на свой код как баран на новые ворота? Код почистую забывается, гарантирую.

И почитай какой-нибудь code style-guide. А то у тя хаос.
Конструкторы - с большой буквы. Инстансы, переменные, методы - с маленькой. Кэпслоком - константы.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 06.12.2014, 19:51
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

Ну, это имитация класса, как в с# XD
Ответить с цитированием
  #9 (permalink)  
Старый 06.12.2014, 19:57
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Siend
как в с#
А в моем примере тогда что? Или ты думаешь упомянул в коде слово Class, и твой код стал сразу заебатым?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 06.12.2014, 20:10
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

не мой код, точно также помогли, потому что как самостоятельно это реализовать я не знал.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с попап окном 3168424 Javascript под браузер 2 29.01.2014 16:20
Помогите решить задачку. Андрей_ Javascript под браузер 3 26.06.2012 16:21
Помогите! Многоуровневые вкладки! sergeeeeee Элементы интерфейса 2 02.08.2010 23:50
Анимация. Помогите понять почему не работает. kadurban jQuery 4 08.07.2010 20:50
Помогите разобраться с галереей IMAGIN yana_studio Общие вопросы Javascript 4 12.12.2009 17:24