1
의 지배적 인 색상을 얻을 수 있습니다. 안타깝게도 이미지가 완전히로드되지 않는 한 색상을 계산할 수 없습니다 (자바 스크립트 경고 참조). 그러면 애니메이션이 작동하지 않습니다. 페이지를 다시로드하면 이미지가 브라우저에서 캐시되고 모든 것이 charme처럼 작동합니다.사전로드 이미지 나는 다음과 같은 testpage를 만들어 이미지
관련 코드는 다음과 같습니다
$('.bg').each(function(index) {
var url = $(this).data('background-image');
img = new Image();
img.src = url;
averageColours[url] = getAverageColourAsRGB(img);
$(this).css('background-image', 'url(' + url + ')');
});
$('.bg').waypoint(function() {
var url = $(this).data('background-image');
var colour = getPreloadedAverageColourAsRGB(url);
console.log(url + ' ' + colour.r + ',' + colour.g + ',' + colour.b);
$('body').data('bgColour', 'rgb(' + colour.r + ',' + colour.g + ',' + colour.b + ')');
$('body').animate({backgroundColor: $('body').data('bgColour')});
}, { offset: 0 });
어떻게 완전히로드 된 이미지까지 바인딩 웨이 포인트를 연기 할 수 있습니까?
이 게시물을 http://stackoverflow.com/questions/5057990/how-can-i-check-if-a-background-image-is-loaded 비록 내가 아직도 이해할 수는 없지만, 왜 나를 위해 img 엘리먼트를 만들어야 만 하는가? img-Element와 새로운 Image() 사이의 차이점은 무엇입니까? 두 함수 모두 onload() 콜백을가집니다. –