Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (3)

Лучшие ответы пользователя

Все ответы (7)
  • Как узнать координату отступа сверху div блока, от верхнего края браузера?

    @GoodBoy123
    На нативном JS:
    var offsetTop = Element.getBoundingClientRect().top + document.body.scrollTop;


    Тестовая страница:
    <html>
    <head>
    	<title>afdafasdfasd</title>
    </head>
    <body>
    	<div>11</div>
    	<div>11</div>
    	<div>11</div>
    	<div>11</div>
    	<div>11</div>
    	<div>11</div>
    	<div id='test'>TESTTESTTEST</div>
    	<script type="text/javascript">
    		console.log(document.getElementById('test').getBoundingClientRect().top + document.body.scrollTop);
    	</script>
    </body>
    </html>


    Точно работает IE8+, должно работать в версиях ещё ниже.
    Ответ написан
    Комментировать
  • Так в чём преимущество паттерна репозиторий?

    @GoodBoy123
    По сути репозиторий это более высокий уровень абстракции. При использовании репозитория вы программируете к интерфейсу, а не к реализации. На примере Laravel. У вас есть MessagesRepository:

    interface MessagesRepository {
    
     // Выбрать все сообщение
     public function all();
    
     // Выбрать сообщение по id
     public function findById($id);
    
     //Записать  сообщение
     public function store($id, $userId);
    }


    В остальном коде вы обращаетесь именно к этому интерфейсу используя IOC контейнер:
    MessagesController.php
    protected $messages;
     public function __construct(MessagesRepository $messages){
            $this->messages = $messages;
     }
    
    public function index() {
     return view('messages.index')-with('messages', $this->messages->all());
    }


    После этого вы с помощью Laravel IOC контейнера связываете интерфейс с конкретной реализацией
    $this->app->bind(
                'App\Repositories\Messages\MessagesRepository',
                'App\Repositories\Messages\MysqlMessagesRepository'
            );


    И в MysqlMessagesRepository уже делаете реализацию применяя интерфейс
    class MysqlMessagesRepository implements MessagesRepository {
    
     // Выбрать все сообщение
     public function all() {
     MysqlGetAllMessages();
    }
    
    
     // Выбрать сообщение по id
     public function findById($id);
    
     //Записать  сообщение
     public function store($id, $userId);
    }


    Преимущество в том что код работает с интерфейсом, а не с реализацией, поэтому для того, чтобы поменять Mysql на redis нужно:
    создать реализацию MessagesRepository интерфейса
    class RedisMessagesRepository implements MessagesRepository {
    
     // Выбрать все сообщение
     public function all() {
     RedisGetAllMessages();
    }
    
    
     // Выбрать сообщение по id
     public function findById($id);
    
     //Записать  сообщение
     public function store($id, $userId);
    }


    Сказать IOC контейнеру, что нужно брать другую реализацию:
    $this->app->bind(
                'App\Repositories\Messages\MessagesRepository',
                'App\Repositories\Messages\RedisMessagesRepository'
            );


    И на этом все. Менять код в MessagesController не нужно, так как он работает с интерфейсом.
    Ответ написан
    1 комментарий
  • Есть ли в JS событие изменения DOM или конкретного элемента DOM?

    @GoodBoy123
    Всё зависит от версии IE которую нужно поддерживать.
    IE 11+ - MutationObserver ( https://developer.mozilla.org/ru/docs/Web/API/Muta... )
    IE 9+ - MutationEvent ( https://developer.mozilla.org/en-US/docs/Web/API/M... ) сильно влияют на производительность.

    Можете попробовать React.js ( facebook.github.io/react ) у него не плохо всё контролируется за счет Virtual DOM.
    Ответ написан
    1 комментарий
  • Как применить функцию из конструктора карусели?

    @GoodBoy123
    Быстро глянул увидел следующее:
    // the plugin initializer
    $.fn.galleria = function( options ) {
    
        return this.each(function() {
    
            var gallery = new Galleria();
            gallery.init( this, options );
    
        });
    };
    
    // Expose
    window.Galleria = Galleria;


    Твоя галерея создает глобальный объект Galleria, так что можно напрямую к нему обратиться:
    var gallery = new Galleria();
    gallery.init( $('#galleria'));


    И собственно обращаться к методам:
    gallery.updateCarousel();
    Ответ написан
    Комментировать
  • Какой js-фреймворк использовать для создания портала для обучения?

    @GoodBoy123
    Ответ выше, конечно полон сарказма, но доля истины в нем есть.
    Любой портал можно написать на чистом js в одном файле, и это будет работать. Но поддерживать код будет очень сложно. Фреймворки как раз и нужны для упрощения кода. Попробуйте каждый из популярных(Angular, React, Backbone), напишите на каждом свою копию твиттера, какой будет удобнее для Вас в работе, тот и выбирайте.
    Ответ написан
    Комментировать