Мигающий флажок [дубликат]

И еще одно решение: вместо создания другого цикла просто привяжите функцию this к функции возврата.

var funcs = [];

function createFunc(i) {
  return function() {
    console.log('My value: ' + i); //log value of i.
  }.call(this);
}

for (var i = 1; i <= 5; i++) {  //5 functions
  funcs[i] = createFunc(i);     // call createFunc() i=5 times
}

By связывая это, решает также проблему.

48
задан Heretic Monkey 25 May 2016 в 21:25
поделиться

11 ответов

Самый простой способ избежать этого - использовать спрайты изображений. Для хорошего обзора посмотрите эту статью CSS Tricks .

Таким образом, вы не только решаете проблему мерцания, которую видите, но также уменьшаете количество HTTP-запросов , Ваш CSS будет выглядеть примерно так:

a.class-btn { background: url('path/to/image.jpg') 0 0 no-repeat; }
a.class-btn:hover { background-position: 0 -40px; }

Специфика будет зависеть от ваших изображений. Вы также можете использовать онлайн-генератор спрайтов , чтобы облегчить процесс.

56
ответ дан CherryFlavourPez 25 August 2018 в 01:44
поделиться

Вы можете предварительно загрузить изображения

function preloadImages(srcs, imgs, callback) {
var img;
var remaining = srcs.length;
for (var i = 0; i < srcs.length; i++) {
    img = new Image();
    img.onload = function() {
        --remaining;
        if (remaining <= 0) {
            callback();
        }
    };
    img.src = srcs[i];
    imgs.push(img);
}
}
// then to call it, you would use this
var imageSrcs = ["src1", "src2", "src3", "src4"];
var images = [];
preloadImages(imageSrcs, images, myFunction);
0
ответ дан Anshuman Jasrotia 25 August 2018 в 01:44
поделиться

Если они имеют одинаковые размеры, одна возможность состоит в том, чтобы нарисовать два изображения непосредственно друг над другом, а класс CSS :hover для верхнего изображения, имеющего display: none;

. Таким образом, оба изображения будут предварительно загружены, но зависание сделает второй видимым.

0
ответ дан asc99c 25 August 2018 в 01:44
поделиться

Если вы это сделаете:

#the-button {
background-image: url('images/img.gif');
}
#the-button:before {
  content: url('images/animated-img.gif');
  width:0;
  height:0;
  visibility:hidden;
}

#the-button:hover {
  background-image: url('images/animated-img.gif');
}

Это действительно поможет!

См. здесь:

http: // particle-in -a-box.com/blog-post/pre-load-hover-images-css-only

PS - не моя работа, а решение, которое я нашел:)

8
ответ дан Benjamin Dordoigne 25 August 2018 в 01:44
поделиться

Простой трюк, который я использую, состоит в том, чтобы удвоить исходное фоновое изображение, убедившись, что сначала нарисовано наведенное изображение

.next {
  background: url(../images/next-hover.png) center center no-repeat;
  background: url(../images/next.png) center center no-repeat;
    &:hover{
      background: url(../images/next-hover.png) center center no-repeat;
    }
 }

Нет производительности и очень просто

Или, если вы 'еще не использовать SCSS:

.next {
  background: url(../images/next-hover.png) center center no-repeat;
  background: url(../images/next.png) center center no-repeat;        
 }
 .next:hover{
  background: url(../images/next-hover.png) center center no-repeat;
 }
13
ответ дан Callam 25 August 2018 в 01:44
поделиться

@ Метод использования скрытого контента: url () после использования тела Kristian, похоже, не работает в Firefox 48.0 (OS X).

Однако изменение «display: none»; к чему-то вроде:

body:after {
 position: absolute; overflow: hidden; left: -50000px;
 content: url(/path/to/picture-1.jpg) url(/path/to/picture-2.jpg);
}

... сделал трюк для меня. Возможно, Firefox не загрузит скрытые изображения, или, может быть, это связано с рендерингом (?).

1
ответ дан hdscp 25 August 2018 в 01:44
поделиться

Вот простая и эффективная техника предварительной загрузки изображений CSS, которую я использовал несколько раз. Вы можете загрузить несколько изображений, разместив контент: url () url () url () ... и т. Д.

body:after{
 display:none;
 content: url(path/to/image-hovered.jpg) url(path/to/another-image-hovered.jpg);
}
55
ответ дан Kristian Svensson 25 August 2018 в 01:44
поделиться

Это решение, отличное от CSS: если изображения hover находятся в одном каталоге и имеют общее соглашение об именах, например, содержат подстроку «-on.», можно выбрать имена файлов и поместить их в HTML как серия:

<img src='...' style='display: none' />
2
ответ дан Martin Staufcik 25 August 2018 в 01:44
поделиться

Трюк «удвоить исходное фоновое изображение» не работал для меня, поэтому я использовал еще один трюк css:

.next {
    background: url(../images/next.png) center center no-repeat;        
}
.next:hover {
    background: url(../images/next-hover.png) center center no-repeat;
}
.next:after {
    content: url(../images/next-hover.png);
    display: none;
}
0
ответ дан Nailgun 25 August 2018 в 01:44
поделиться

Просто измените размер фонового изображения, а не его источник! Итак ...

a.class-btn {
    background-image: url('path/to/image-hovered.jpg');
    background-size: 0;
}
a.class-btn:hover {
    background-size: auto;
}
-1
ответ дан Pluto 25 August 2018 в 01:44
поделиться

Лучший способ сделать это - просто вставить изображения на веб-страницу и установить отображение на none.

-1
ответ дан Spencer Lively 25 August 2018 в 01:44
поделиться