I hit a case where even when 5 - 10 pixels of the image is in the scrolling viewport, it is still not loaded, so hopefully it will take care of it as well. Let me know when this is in canary and I can try and test it out (at the moment I am not using lazy loading as a result). :)
☆*PhistucK* On Thu, Nov 30, 2023 at 10:27 AM Traian Captan <tcap...@chromium.org> wrote: > Hi Rick, > > Yes. I uploaded a CL that increases the spacer size by 30px: > https://chromium-review.googlesource.com/c/chromium/src/+/5075126 > > The tests are now failing as expected on Safari: > > https://wpt.fyi/results/html/semantics/embedded-content/the-img-element?label=pr_head&max-count=1&pr=43446 > > > On Thu, Nov 30, 2023 at 12:14 AM Rick Byers <rby...@chromium.org> wrote: > >> Interesting. Could you try to improve the tests to capture the interop >> difference and ensure passing reflects full conformance to the spec? We >> rely on WPTs as our quantifiable measure of interoperability... >> >> Rick >> >> On Thu, Nov 30, 2023 at 5:07 PM Traian Captan <tcap...@chromium.org> >> wrote: >> >>> Thank you Rick! >>> >>> I did some investigating into why WebKit is passing some of the new WPTs >>> for lazy loaded images. >>> I think it might be because WebKit is considering the edge as inclusive, >>> while Blink and Gecko do not. >>> In the following example if the spacer height is 100px Safari will >>> report intersecting as true while Chrome and FireFox would report it as >>> false. >>> If the height is increased to 101px, all 3 browsers will report the >>> intersection as false. >>> <!DOCTYPE html> >>> <style> >>> #scroller { width: 100px; height: 100px; overflow: scroll; >>> background-color: gray; } >>> #spacer { width: 50px; height: 100px; } >>> #target { width: 50px; height: 50px; background-color: green; } >>> </style> >>> >>> <div id=scroller> >>> <div id=spacer></div> >>> <div id=target></div> >>> </div> >>> >>> <script> >>> let entries = []; >>> >>> window.onload = function() { >>> const observer = new IntersectionObserver( >>> callback, >>> { >>> rootMargin: "0px" >>> } >>> ); >>> observer.observe(target); >>> }; >>> >>> function callback(entries) { >>> console.log(`isIntersecting = ${entries[0].isIntersecting}`); >>> } >>> </script> >>> >>> >>> >>> >>> On Mon, Nov 27, 2023 at 11:40 PM Rick Byers <rby...@chromium.org> wrote: >>> >>>> On Wed, Nov 22, 2023 at 2:37 PM Yoav Weiss <yoavwe...@chromium.org> >>>> wrote: >>>> >>>>> Thanks, that sounds like a strict improvement. >>>>> >>>>> On Wed, Nov 22, 2023 at 6:25 AM Traian Captan <tcap...@chromium.org> >>>>> wrote: >>>>> >>>>>> Yes, that's correct. >>>>>> >>>>>> >>>>>> On Tue, Nov 21, 2023 at 9:18 PM Yoav Weiss <yoavwe...@chromium.org> >>>>>> wrote: >>>>>> >>>>>>> Do I understand correctly that currently lazy-loaded images in CSS >>>>>>> scrollers have suboptimal behavior and this would improve that without >>>>>>> potentially harming other cases? >>>>>>> >>>>>>> On Wed, Nov 22, 2023 at 1:55 AM Traian Captan <tcap...@chromium.org> >>>>>>> wrote: >>>>>>> >>>>>>>> Contact emailstcap...@chromium.org >>>>>>>> >>>>>>>> ExplainerNone >>>>>>>> >>>>>>> >>>>> A short (inline) explainer would help reviewers to understand e.g. if >>>>> this involves changes to the API surface that developers need to care >>>>> about. >>>>> Can you write a few words on the impact on developers? >>>>> >>>>> >>>>>>>> >>>>>>>> Specificationhttps://html.spec.whatwg.org/#lazy-load-root-margin >>>>>>>> >>>>>>> >>>>> The spec doesn't mention anything specific around root margins or >>>>> scroll margins (other than the algorithm name). >>>>> Are these concepts interoperable? >>>>> >>>> >>>> I dug around a little to try to better understand this. The HTML spec >>>> does mention >>>> <https://html.spec.whatwg.org/#start-intersection-observing-a-lazy-loading-element> >>>> setting >>>> the "scrollMargin" on the IntersectionObserver, a new property we recently >>>> shipped (I2S >>>> <https://groups.google.com/a/chromium.org/g/blink-dev/c/Ax8rTBusZ4s/m/nogj-s-eGQAJ?utm_medium=email&utm_source=footer> >>>> ). >>>> While WebKit and Gecko aren't yet passing the WPT tests >>>> <https://wpt.fyi/results/intersection-observer?label=master&label=experimental&aligned&q=scroll-margin> >>>> for this yet, interestingly WebKit is already passing >>>> <https://wpt.fyi/results/html/semantics/embedded-content/the-img-element?label=master&label=experimental&aligned&q=image-loading-lazy-in-> >>>> most of the newly added >>>> <https://chromium-review.googlesource.com/c/chromium/src/+/5023396> >>>> WPTs for lazy loaded images in particular. So perhaps their implementation >>>> already handled this? >>>> >>>> Seems reasonable to me - LGTM1 >>>> >>>> >>>>>>>> >>>>>>>> Summary >>>>>>>> >>>>>>>> Changes the lazy load intersection observer's init dictionary to >>>>>>>> use a scrollMargin instead of a rootMargin. This allows lazy loading >>>>>>>> images >>>>>>>> contained inside CSS scrollers, like carousels, to load as expected >>>>>>>> when >>>>>>>> near the viewport instead of the current behavior where these images >>>>>>>> load >>>>>>>> when at least one pixel is intersecting the viewport. >>>>>>>> >>>>>>>> >>>>>>>> Blink componentBlink>Image >>>>>>>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EImage> >>>>>>>> >>>>>>>> Search tagslazyload >>>>>>>> <https://chromestatus.com/features#tags:lazyload>, scrollmargin >>>>>>>> <https://chromestatus.com/features#tags:scrollmargin> >>>>>>>> >>>>>>>> TAG reviewNone >>>>>>>> >>>>>>>> TAG review statusNot applicable >>>>>>>> >>>>>>>> Risks >>>>>>>> >>>>>>>> >>>>>>>> Interoperability and Compatibility >>>>>>>> >>>>>>>> Overall low as scroll margin also applies to the root element thus >>>>>>>> not affecting lazy loading images that are currently loading with just >>>>>>>> a >>>>>>>> root margin. >>>>>>>> >>>>>>>> >>>>>>>> *Gecko*: Positive ( >>>>>>>> https://github.com/w3c/IntersectionObserver/issues/431) >>>>>>>> https://bugzilla.mozilla.org/show_bug.cgi?id=1864794 >>>>>>>> >>>>>>>> *WebKit*: Positive ( >>>>>>>> https://github.com/w3c/IntersectionObserver/issues/431#issuecomment-930602435 >>>>>>>> ) https://bugs.webkit.org/show_bug.cgi?id=264864 >>>>>>>> >>>>>>>> *Web developers*: Positive ( >>>>>>>> https://bugs.chromium.org/p/chromium/issues/detail?id=1391989) >>>>>>>> >>>>>>>> *Other signals*: >>>>>>>> >>>>>>>> WebView application risks >>>>>>>> >>>>>>>> Does this intent deprecate or change behavior of existing APIs, >>>>>>>> such that it has potentially high risk for Android WebView-based >>>>>>>> applications? >>>>>>>> >>>>>>>> None >>>>>>>> >>>>>>>> >>>>>>>> Debuggability >>>>>>>> >>>>>>>> None >>>>>>>> >>>>>>>> >>>>>>>> Will this feature be supported on all six Blink platforms (Windows, >>>>>>>> Mac, Linux, Chrome OS, Android, and Android WebView)?Yes >>>>>>>> >>>>>>>> Is this feature fully tested by web-platform-tests >>>>>>>> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md> >>>>>>>> ?Yes >>>>>>>> >>>>>>>> >>>>>>>> https://wpt.fyi/results/html/semantics/embedded-content/the-img-element?label=master&label=experimental&aligned&q=image-loading-lazy-in- >>>>>>>> >>>>>>>> >>>>>>>> Flag name on chrome://flagsLazyLoadScrollMargin >>>>>>>> >>>>>>>> Finch feature nameNone >>>>>>>> >>>>>>>> Non-finch justification >>>>>>>> >>>>>>>> This feature is behind an enabled-by-default flag that can be >>>>>>>> disabled if needed. >>>>>>>> >>>>>>>> >>>>>>>> Requires code in //chrome?False >>>>>>>> >>>>>>>> Tracking bug >>>>>>>> https://bugs.chromium.org/p/chromium/issues/detail?id=1391989 >>>>>>>> >>>>>>>> Estimated milestones >>>>>>>> Shipping on desktop 121 >>>>>>>> DevTrial on desktop 121 >>>>>>>> Shipping on Android 121 >>>>>>>> DevTrial on Android 121 >>>>>>>> Shipping on WebView 121 >>>>>>>> >>>>>>>> Anticipated spec changes >>>>>>>> >>>>>>>> Open questions about a feature may be a source of future web compat >>>>>>>> or interop issues. Please list open issues (e.g. links to known github >>>>>>>> issues in the project for the feature specification) whose resolution >>>>>>>> may >>>>>>>> introduce web compat/interop risk (e.g., changing to naming or >>>>>>>> structure of >>>>>>>> the API in a non-backward-compatible way). >>>>>>>> None >>>>>>>> >>>>>>>> Link to entry on the Chrome Platform Status >>>>>>>> https://chromestatus.com/feature/5106926245642240 >>>>>>>> >>>>>>>> Links to previous Intent discussionsIntent to prototype: >>>>>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAFxahvtrmHkoOpTuD2eZYVOyFuAhP8ZFVoTuNBS8zYTVY%3DTaaQ%40mail.gmail.com >>>>>>>> >>>>>>>> This intent message was generated by Chrome Platform Status >>>>>>>> <https://chromestatus.com/>. >>>>>>>> >>>>>>>> -- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "blink-dev" group. >>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>> send an email to blink-dev+unsubscr...@chromium.org. >>>>>>>> To view this discussion on the web visit >>>>>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAFxahvsUb0GEG9WNWRN7Akkowjm03gLj%2Biiq5rG8%2BzdAWMBTNA%40mail.gmail.com >>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAFxahvsUb0GEG9WNWRN7Akkowjm03gLj%2Biiq5rG8%2BzdAWMBTNA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>>>> . >>>>>>>> >>>>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "blink-dev" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to blink-dev+unsubscr...@chromium.org. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAL5BFfVhH_QxckxRLbR05jrN0CY48aQ-Ag3BypusnsyKoDTc0A%40mail.gmail.com >>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAL5BFfVhH_QxckxRLbR05jrN0CY48aQ-Ag3BypusnsyKoDTc0A%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> -- > You received this message because you are subscribed to the Google Groups > "blink-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to blink-dev+unsubscr...@chromium.org. > To view this discussion on the web visit > https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAFxahvvCQF36A34oECY-0tpJVjTk%3D2gD_8WcwMWWAyc5_O3JFg%40mail.gmail.com > <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAFxahvvCQF36A34oECY-0tpJVjTk%3D2gD_8WcwMWWAyc5_O3JFg%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "blink-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+unsubscr...@chromium.org. To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CABc02_K_BkQMt5nvQiM6HyDU1TLm%3D8QzMywdqDq%2Bc5_Ty7ZEYw%40mail.gmail.com.