• Как отследить появление элемента на экране и получить его id?

    Seasle
    @Seasle Куратор тега JavaScript
    Можно при помощи Intersection Observer API:
    function scrollTracking(entries) {}
    
    const observer = new IntersectionObserver(scrollTracking, {
        threshold: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
    });
    
    observer.observe(YOUR_ELEMENT));

    Ответ написан
    2 комментария
  • Чем webpack лучше gulp/grunt?

    Webpack - это система сборки с массой возможностей. В частности, он анализирует JS-код (а также CSS или другой, через лоадеры), это даёт ему superpowers.

    Gulp/grunt - это общая система для организации задач, которая сама по себе сборку не поддерживает, но её можно на ней написать, с помощью плагинов. При этом анализа кода, скорее всего, не будет, а значит ряд продвинутых фич отпадут.

    То есть, это две разные вещи. В качестве одной из задач на gulp/grunt вполне может быть сборка webpack, так обычно и делают.

    Простую сборку вполне можно написать и на gulp/grunt напрямую. А если посложнее или просто хочется иметь задел "на будущее", то можно воспользоваться специальным инструментом (Webpack).

    P.S. У меня когда-то были и gulp task'и сборщики и browserify, но уже давно их место плотненько занял Webpack.
    Ответ написан
    18 комментариев
  • Как убрать элемент с яндекс.карт?

    Sadist07
    @Sadist07
    Верстальщик, Недо дизайнер
    Если честно странно при в данный момент не должно быть вообще не каких элементов.... Кроме той что вы создали var myPlacemark = new ymaps.Placemark([56.34820425, 41.30735193]........................
    и добавили moscow_map.geoObjects.add(myPlacemark);

    Вообщем попробуй переделать вызов карты по аналогу....
    <div class="img" id="YMapsID">
    					
    </div>

    <script src="http://api-maps.yandex.ru/1.1/index.xml" type="text/javascript"></script>
    	<script type="text/javascript">
    	    // Создает обработчик события window.onLoad
    	    YMaps.jQuery(function () {
    	        // Создает экземпляр карты и привязывает его к созданному контейнеру
    	        var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
    	            
    	        // Устанавливает начальные параметры отображения карты: центр карты и коэффициент масштабирования
    	        map.setCenter(new YMaps.GeoPoint(30.349234, 59.940919), 15);
    
    
    	        // Создает стиль
    			var s = new YMaps.Style();
    
    			// Создает стиль значка метки
    			s.iconStyle = new YMaps.IconStyle();
    			s.iconStyle.href = "img/map.png";
    			s.iconStyle.size = new YMaps.Point(140, 139);
    			s.iconStyle.offset = new YMaps.Point(-140, -139);
    
    			// Создает метку 
    			var placemark = new YMaps.Placemark(new YMaps.GeoPoint(30.349234, 59.940919), {style: s});
    			var placemark2 = new YMaps.Placemark(new YMaps.GeoPoint(30.249336, 60.015226), {style: s});
    
    			// Устанавливает содержимое балуна
    			placemark.name = "Плов без слов";
    			placemark.description = "Литейный пр., 28";
    
    			placemark2.name = "Плов без слов";
    			placemark2.description = "Комендатский пр., 30";
    
    			// Создает группу меток
    
    			var group = new YMaps.GeoObjectCollection();
    	        group.add(placemark);
    	        group.add(placemark2);
    
    	        // Добавляет группу меток на карту
    			map.addOverlay(group);
    
    						// Действия при добавлении элемента на карту
    
    			function OfficeNavigator (offices) {
    
    			this.onAddToMap = function (map, position) {
    			        this.container = YMaps.jQuery("<ul></ul>")
    			        this.map = map;
    			        this.position = position || new YMaps.ControlPosition(YMaps.ControlPosition.TOP_RIGHT, new YMaps.Size(10, 10));
    
    			        // CSS-свойства, определяющие внешний вид элемента
    			        this.container.css({
    			            position: "absolute",
    			            zIndex: YMaps.ZIndex.CONTROL,
    			            listStyle: 'none',
    			            padding: '10px',
    			            margin: 0
    			        });
    			        
    			        // Формирует список офисов
    			        this._generateList();
    			        
    			        // Располагает элемент управления в верхнем правом углу карты
    			        this.position.apply(this.container);
    			        
    			        // Добавляет элемент управления на карту
    			        this.container.appendTo(this.map.getContainer());
    			}
    
    			// Обработчик удаления элемента управления с карты
    			this.onRemoveFromMap = function () {
    			    if (this.container.parent()) {
    			        this.container.remove();
    			        this.container = null;
    			    }
    			    this.map = null;
    			};
    
    
    							// Формирует выпадающий список офисов
    				this._generateList = function () {
    				    var _this = this;
    				    
    				    // Вызывает функцию-обработчик для каждого объекта
    				    offices.forEach(function (obj) {
    				        // Создает ссылку на объект
    				        var li = YMaps.jQuery("<li><a href=\"#\">" + obj.description + "</li>"),
    				            a = li.find("a"); 
    				        
    				        // Создает обработчик щелчка мыши по ссылке
    				        li.bind("click", function () {
    				            _this.map.panTo(obj.getGeoPoint(), {
    				                flying: 1,
    				                callback: function () {
    				                    size: "large";
    				                }
    				            });
    				            return false;
    				        });
    				        
    				        // Создает слушатели событий открытия и закрытия балуна объекта
    				        YMaps.Events.observe(obj, obj.Events.BalloonOpen, function () {
    				            a.css("text-decoration", "none");
    				        });
    				        
    				        YMaps.Events.observe(obj, obj.Events.BalloonClose, function () {
    				            a.css("text-decoration", "");
    				        });
    				        
    				        // Добавляет ссылку на объект в общий список
    				        li.appendTo(_this.container);
    				    });
    				};
    			}
    
    				// Создает элемент управления "Путеводитель по офисам"
    				map.addControl(new OfficeNavigator(group));
    
    			// Добавляет метку на карту
    			/*
    			map.addOverlay(placemark);
    			map.addOverlay(placemark2);
    			*/
    
    
    			// Создает элемент масштабирования
    			var smallZoomControl = new YMaps.SmallZoom();
    			map.addControl(smallZoomControl);
    
    
    
    
    		})
    	</script>


    Правда тебе нужна ток верхняя часть до момента группировки меток.
    Ответ написан
    1 комментарий
  • Android: ListView — разноцветные items?

    Allesad
    @Allesad
    PVOID задал справедливый вопрос — зачем хранить в адаптере вьюшки? Это совершенно не рациональное использование ресурсов. По сути, все что вам нужно знать — тип текущего элемента листа. По этому типу вы можете устанавливать фон нужного цвета.

    Пример:
    1) Создаем статичный класс (опционально статичный, можно куда-нибудь запихать в нагрузку) со всеми цветами — скажем, ListColors.

    public class ListColors {
        public static final Integer RED      = 0;
        public static final Integer GREEN    = 1;
        public static final Integer BLUE     = 2;
        public static final Integer YELLOW   = 3;
        public static final Integer PURPLE   = 4;
    }
    


    2) Создаем класс, описывающий элемент списка — ListItem. Тут важно свойство type, которое будет хранить тип элемента. А типом элемента будет любая из констант класса ListColors.

    class ListItem {
        private Long id;
        private Integer type;
    
        public ListItem(Long id, Integer type){
            this.id     = id;
            this.type   = type;
        }
    
        public Long getId(){
            return id;
        }
    
        public Integer getType(){
            return type;
        }
    }
    


    3) Далее пишем сам адаптер, в конструктор которого будет передаваться Context (никогда не помешает) и список элементов в формате List<ListItem>.

    class TestAdapter extends BaseAdapter implements ListAdapter {
    
        private Context context;
        private List<ListItem> items;
    
        public TestAdapter(Context context, List<ListItem> items){
            this.context    = context;
            this.items      = items;
        }
    
        @Override
        public int getCount() {
            return items.size();
        }
    
        @Override
        public ListItem getItem(int position) {
            return items.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return items.get(position).getId();
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ListItem item = getItem(position);
            convertView = LayoutInflater.from(context).inflate(R.layout.list_row_item, null);
    
            LinearLayout layout = (LinearLayout) convertView.findViewById(R.id.view_background);
    
            Integer colorRes;
            switch (item.getType())
            {
                default:
                case ListColors.RED:
                    colorRes = context.getResources().getColor(R.id.red);
                    break;
                case ListColors.GREEN:
                    colorRes = context.getResources().getColor(R.id.green);
                    break;
                case ListColors.BLUE:
                    colorRes = context.getResources().getColor(R.id.blue);
                    break;
                case ListColors.YELLOW:
                    colorRes = context.getResources().getColor(R.id.yellow);
                    break;
                case ListColors.PURPLE:
                    colorRes = context.getResources().getColor(R.id.purple);
                    break;
            }
            layout.setBackgroundColor(colorRes);
            return convertView;
        }
    }
    


    В методе getView() мы получаем элемент списка, получаем базовый layot элемента списка (в данном случае типа LinearLayout), затем проверяем тип элемента и присваиваем layout'y нужный цвет. Можно еще хранить view элемента списка в holder'e, чтобы не создавать его каждый раз, но это частности.
    Ответ написан
    2 комментария
  • Как с помощью javascript определить устройство, с которого зашли на сайт?

    And__Smi
    @And__Smi Автор вопроса
    всем спасибо за полезные советы, нашел вот простой, не громоздкий, самое главное(!), скрипт:
    if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
        // код для мобильных устройств
      } else {
        // код для обычных устройств
    }
    Ответ написан
    1 комментарий
  • Как сделать auto width для поля input?

    teotlu
    @teotlu
    Навёрстываю упущенное
    Вот вам быстренько решение на jQuery (он и так на большинстве сайтов используется). На нативный js, в общем-то, очень легко переделать, если нужно.
    Через css можно задать минимальную, максимальную и начальную ширину у input.
    Учтено, что может быть разный размер шрифта и расстояние между буквами.
    Ответ написан
    3 комментария
  • Какой корректный share url в Одноклассниках?

    recomp
    @recomp
    web developer
    https://apiok.ru/ext/like

    https://connect.ok.ru/offer
    ?url=<URL_TO_SHARE>
    &title=<TITLE>
    &description=<DESCRIPTION>
    &imageUrl=<IMAGE_URL>


    Только параметр url обязателен, остальные параметры опциональны.
    Ответ написан
    Комментировать
  • Как настроить cascade delete в Entity Framework?

    Используйте лябды вместо строк
    context.Partiya
                        .Include(x => x.Zakupki)
                        .Include(x => x.Zakladki)
                        .Include(x => x.Vivod)
                        .Include(x => x.Prodagi)
    Ответ написан
    Комментировать
  • Как настроить cascade delete в Entity Framework?

    @zakar1ya Автор вопроса
    Junior
    После долгого чтения мануалов по fluent api, оказалось что дело совсем в другом.
    Fluent api поддерживает cascade delete по умолчанию, проблема была в том, что нажимая "удалить", представление передавало контроллеру сущность в которой поля
    public virtual List<Zakupki> Zakupki { get; set; }
            public virtual List<Zakladki> Zakladki { get; set; }
            public virtual List<Vivod> Vivod { get; set; }
            public virtual List<Prodagi> Prodagi { get; set; }
    , то есть навигационные свойства были null.
    Соответственно EF не мог удалить связанные записи потому что не знал какие, до тех пор пока я вручную не включил их в выборку
    [HttpPost]
            public ActionResult Delete(Partiya partiya)
            {
                BirdKeepingDBContext context = new BirdKeepingDBContext();
                if (ModelState.IsValid)
                {
                    Partiya part = context.Partiya
                        .Include("Zakupki")
                        .Include("Zakladki")
                        .Include("Vivod")
                        .Include("Prodagi")
                        .Single(p => p.NomerPartii == partiya.NomerPartii);
                    context.Partiya.Remove(part);
                    context.SaveChanges();
                }
    
                return View(partiya);
            }

    Остался небольшой вопрос, Include требует строку с именем связанного объекта, но напрямую прописывать, как у меня, как-то не хорошо. Как это лучше записать и вообще может есть конструкции получше чем эта?
    context.Partiya
                        .Include("Zakupki")
                        .Include("Zakladki")
                        .Include("Vivod")
                        .Include("Prodagi")
    Ответ написан
    Комментировать
  • Как выполнить скрипт с задержкой?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • Как сделать на bootstrap 4 карусель с несколькими элементами на слайде?

    4mobile
    @4mobile
    WEB developer
    Ответ написан
    Комментировать
  • Что за библиотеки сценариев в asp.net?

    byte916
    @byte916
    При установке галочки генератор представления добавит вам в view js-скрипты. Выглядеть это будет так:
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryval")

    Более никакой разницы нет.
    Ответ написан
    3 комментария
  • Как убрать браузерную обводку у кнопок (появляющуюся в состоянии :focus) в Chrome и Firefox?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    jsfiddle.net/r4mef13v/3
    Про FF и рамки.

    button:active, button:focus {
    	outline: none;
    }
    button::-moz-focus-inner {
    	border: 0;
    }
    Ответ написан
    Комментировать
  • Моар символьных шрифтов для веба

    Finom
    @Finom Автор вопроса
    icons.marekventur.de/ — нашел то, о чем спрашивал в UPD.
    Ответ написан
    Комментировать
  • Как правильно указывать путь к изображениям в ASP.NET MVC 5?

    petermzg
    @petermzg
    Самый лучший программист
    1. Хранить изображения в каталогах доступ к которым настроен через IIS (или другой web сервер), пример: "~/Images" проекта.
    2. Отдавать содержимое файла,через созданный контроллер, тогда вы указываете на странице путь до контроллера, а он уже отдает контент файла, по пути указанному из записи в базе.
    Ответ написан
    1 комментарий
  • Почему скорость интернета меняется скачками?

    @pfg21
    ex-турист
    виндовый качальщик может между закачками отдельных файлов может чегонить мозговать в своих неизведанных недрах.
    проверять на лиценизонность и прочее.

    поставь торрент и качни какую-нить раздачу побольше, а лучше сразу несколько.
    он качественно и эффективно забьет интерне-канал на все 146%
    а микрософт поделками лучше пользоваться только в пределах мс-сайтов.
    Ответ написан
    Комментировать
  • События для динамически добавленных в DOM элементов?

    @relic
    используйте метод on
    $(document).ready(function() {
        ...
        $('.clickable-elements element').on('click', 'a', function(e){
            //Какое-то действие
        });
       ...
    });
    
    Ответ написан
    4 комментария
  • Как сделать кнопку подробнее, которая будет раскрывать блок?

    Для текста установить нужную высоту max-height , скрываем лишнее - установить overflow: hidden. При нажатие кнопки установить max-height текста 999px(к примеру). Это можно например с помощью JS , либо чисто на css с помощью input checkbox.
    P.S. ну для красоты добавить transition.
    Ответ написан
    Комментировать