¸üÐÂʱ¼ä:2018Äê11ÔÂ26ÈÕ16ʱ29·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:
¡¡¡¡Ê²Ã´ÊÇÀÁ¼ÓÔØ
¡¡¡¡ÀÁ¼ÓÔØÆäʵ¾ÍÊÇÑÓ³Ù¼ÓÔØ£¬ÊÇÒ»ÖÖ¶ÔÍøÒ³ÐÔÄÜÓÅ»¯µÄ·½Ê½£¬±ÈÈçµ±·ÃÎÊÒ»¸öÒ³ÃæµÄʱºò£¬ÓÅÏÈÏÔʾ¿ÉÊÓÇøÓòµÄͼƬ¶ø²»Ò»´ÎÐÔ¼ÓÔØËùÓÐͼƬ£¬µ±ÐèÒªÏÔʾµÄʱºòÔÙ·¢ËÍͼƬÇëÇ󣬱ÜÃâ´ò¿ªÍøÒ³Ê±¼ÓÔØ¹ý¶à×ÊÔ´¡£
¡¡¡¡Ê²Ã´Ê±ºòÓÃÀÁ¼ÓÔØ
¡¡¡¡µ±Ò³ÃæÖÐÐèÒªÒ»´ÎÐÔÔØÈëºÜ¶àͼƬµÄʱºò£¬ÍùÍù¶¼ÊÇÐèÒªÓÃÀÁ¼ÓÔØµÄ¡£
¡¡¡¡ÀÁ¼ÓÔØÔÀí
¡¡¡¡ÎÒÃǶ¼ÖªµÀHTMLÖÐµÄ ±êÇ©ÊÇ´ú±íÎĵµÖеÄÒ»¸öͼÏñ¡£¡£ËµÁ˸ö·Ï»°¡£¡£
¡¡¡¡±êÇ©ÓÐÒ»¸öÊôÐÔÊÇ src£¬ÓÃÀ´±íʾͼÏñµÄURL£¬µ±Õâ¸öÊôÐÔµÄÖµ²»Îª¿Õʱ£¬ä¯ÀÀÆ÷¾Í»á¸ù¾ÝÕâ¸öÖµ·¢ËÍÇëÇó¡£Èç¹ûûÓÐ srcÊôÐÔ£¬¾Í²»»á·¢ËÍÇëÇó¡£
¡¡¡¡àÅ?Ã²ËÆÕâµã¿ÉÒÔÀûÓÃÒ»ÏÂ?
¡¡¡¡ÎÒÏȲ»ÉèÖà src£¬ÐèÒªµÄʱºòÔÙÉèÖÃ?
¡¡¡¡nice£¬¾ÍÊÇÕâÑù¡£
¡¡¡¡ÎÒÃÇÏȲ»¸ø ÉèÖà src£¬°ÑÍ¼Æ¬ÕæÕýµÄURL·ÅÔÚÁíÒ»¸öÊôÐÔ data-srcÖУ¬ÔÚÐèÒªµÄʱºòÒ²¾ÍÊÇͼƬ½øÈë¿ÉÊÓÇøÓòµÄ֮ǰ£¬½«URLÈ¡³ö·Åµ½ srcÖС£
¡¡¡¡ÊµÏÖ
¡¡¡¡HTML½á¹¹
¡¡¡¡
¡¡¡¡×Ðϸ¹Û²ìһϣ¬ ±êÇ©´ËʱÊÇûÓÐ srcÊôÐԵģ¬Ö»ÓÐ altºÍ data-srcÊôÐÔ¡£
¡¡¡¡alt ÊôÐÔÊÇÒ»¸ö±ØÐèµÄÊôÐÔ£¬Ëü¹æ¶¨ÔÚͼÏñÎÞ·¨ÏÔʾʱµÄÌæ´úÎı¾¡£ data-* È«¾ÖÊôÐÔ£º¹¹³ÉÒ»ÀàÃû³ÆÎª×Ô¶¨ÒåÊý¾ÝÊôÐÔµÄÊôÐÔ£¬¿ÉÒÔͨ¹ý HTMLElement.datasetÀ´·ÃÎÊ¡£
¡¡¡¡ÈçºÎÅжÏÔªËØÊÇ·ñÔÚ¿ÉÊÓÇøÓò
¡¡¡¡·½·¨Ò»
¡¡¡¡ÍøÉÏ¿´µ½ºÃ¶àÕâÖÖ·½·¨£¬ÉÔ΢¼Ç¼һÏ¡£
¡¡¡¡1¡¢Í¨¹ý document.documentElement.clientHeight»ñÈ¡ÆÁÄ»¿ÉÊÓ´°¿Ú¸ß¶È
¡¡¡¡2¡¢Í¨¹ý document.documentElement.scrollTop»ñÈ¡ä¯ÀÀÆ÷´°¿Ú¶¥²¿ÓëÎĵµ¶¥²¿Ö®¼äµÄ¾àÀ룬Ҳ¾ÍÊǹö¶¯Ìõ¹ö¶¯µÄ¾àÀë
¡¡¡¡3¡¢Í¨¹ý element.offsetTop»ñÈ¡ÔªËØÏà¶ÔÓÚÎĵµ¶¥²¿µÄ¾àÀë
¡¡¡¡È»ºóÅжϢÚ-¢Û<¢ÙÊÇ·ñ³ÉÁ¢£¬Èç¹û³ÉÁ¢£¬ÔªËؾÍÔÚ¿ÉÊÓÇøÓòÄÚ¡£
¡¡¡¡·½·¨¶þ(ÍÆ¼ö)
¡¡¡¡Í¨¹ý getBoundingClientRect()·½·¨À´»ñÈ¡ÔªËØµÄ´óСÒÔ¼°Î»Öã¬MDNÉÏÊÇÕâÑùÃèÊöµÄ£º
¡¡¡¡The Element.getBoundingClientRect() method returns the size of an element and its position relative to the viewport.
¡¡¡¡Õâ¸ö·½·¨·µ»ØÒ»¸öÃûΪ ClientRectµÄ DOMRect¶ÔÏ󣬰üº¬ÁË top¡¢ right¡¢ botton¡¢ left¡¢ width¡¢ heightÕâЩֵ¡£
¡¡¡¡MDNÉÏÓÐÕâÑùÒ»ÕÅͼ£º
¡¡¡¡
¡¡¡¡¿ÉÒÔ¿´³ö·µ»ØµÄÔªËØÎ»ÖÃÊÇÏà¶ÔÓÚ×óÉϽǶøÑԵ쬶ø²»ÊDZ߾ࡣ
¡¡¡¡ÎÒÃÇ˼¿¼Ò»Ï£¬Ê²Ã´Çé¿öÏÂͼƬ½øÈë¿ÉÊÓÇøÓò¡£
¡¡¡¡¼ÙÉè constbound=el.getBoundingClientRect();À´±íʾͼƬµ½¿ÉÊÓÇøÓò¶¥²¿¾àÀë; ²¢Éè constclientHeight=window.innerHeight;À´±íʾ¿ÉÊÓÇøÓòµÄ¸ß¶È¡£
¡¡¡¡Ëæ×Źö¶¯ÌõµÄÏòϹö¶¯£¬ bound.top»áÔ½À´Ô½Ð¡£¬Ò²¾ÍÊÇͼƬµ½¿ÉÊÓÇøÓò¶¥²¿µÄ¾àÀëÔ½À´Ô½Ð¡£¬µ± bound.top===clientHeightʱ£¬Í¼Æ¬µÄÉÏÑØÓ¦¸ÃÊÇλÓÚ¿ÉÊÓÇøÓòÏÂÑØµÄλÖõÄÁÙ½çµã£¬ÔÙ¹ö¶¯Ò»µãµã£¬Í¼Æ¬¾Í»á½øÈë¿ÉÊÓÇøÓò¡£
¡¡¡¡Ò²¾ÍÊÇ˵£¬ÔÚ bound.top<=clientHeightʱ£¬Í¼Æ¬ÊÇÔÚ¿ÉÊÓÇøÓòÄڵġ£
¡¡¡¡ÎÒÃÇÕâÑùÅжϣº
¡¡¡¡function isInSight(el) {
¡¡¡¡const bound = el.getBoundingClientRect();
¡¡¡¡const clientHeight = window.innerHeight;
¡¡¡¡//Èç¹ûÖ»¿¼ÂÇÏòϹö¶¯¼ÓÔØ
¡¡¡¡//const clientWidth = window.innerWeight;
¡¡¡¡return bound.top <= clientHeight + 100;
¡¡¡¡}
¡¡¡¡ÕâÀïÓиö+100ÊÇΪÁËÌáǰ¼ÓÔØ¡£
¡¡¡¡¼ÓÔØÍ¼Æ¬
¡¡¡¡Ò³Ãæ´ò¿ªÊ±ÐèÒª¶ÔËùÓÐͼƬ½øÐмì²é£¬ÊÇ·ñÔÚ¿ÉÊÓÇøÓòÄÚ£¬Èç¹ûÊǾͼÓÔØ¡£
¡¡¡¡function checkImgs() {
¡¡¡¡const imgs = document.querySelectorAll('.my-photo');
¡¡¡¡Array.from(imgs).forEach(el => {
¡¡¡¡if (isInSight(el)) {
¡¡¡¡loadImg(el);
¡¡¡¡}
¡¡¡¡})
¡¡¡¡}
¡¡¡¡function loadImg(el) {
¡¡¡¡if (!el.src) {
¡¡¡¡const source = el.dataset.src;
¡¡¡¡el.src = source;
¡¡¡¡}
¡¡¡¡}
¡¡¡¡ÕâÀïÓ¦¸ÃÊÇÓÐÒ»¸öÓÅ»¯µÄµØ·½£¬ÉèÒ»¸ö±êʶ·û±êʶÒѾ¼ÓÔØÍ¼Æ¬µÄindex£¬µ±¹ö¶¯Ìõ¹ö¶¯Ê±¾Í²»ÐèÒª±éÀúËùÓеÄͼƬ£¬Ö»ÐèÒª±éÀúδ¼ÓÔØµÄͼƬ¼´¿É¡£
¡¡¡¡º¯Êý½ÚÁ÷
¡¡¡¡ÔÚÀàËÆÓÚ¹ö¶¯Ìõ¹ö¶¯µÈƵ·±µÄDOM²Ù×÷ʱ£¬×Ü»áÌáµ½“º¯Êý½ÚÁ÷¡¢º¯ÊýÈ¥¶¶”¡£
¡¡¡¡ËùνµÄº¯Êý½ÚÁ÷£¬Ò²¾ÍÊÇÈÃÒ»¸öº¯Êý²»ÒªÖ´ÐеÄ̫Ƶ·±£¬¼õÉÙһЩ¹ý¿ìµÄµ÷ÓÃÀ´½ÚÁ÷¡£
¡¡¡¡»ù±¾²½Ö裺
¡¡¡¡1¡¢»ñÈ¡µÚÒ»´Î´¥·¢Ê¼þµÄʱ¼ä´Á
¡¡¡¡2¡¢»ñÈ¡µÚ¶þ´Î´¥·¢Ê¼þµÄʱ¼ä´Á
¡¡¡¡3¡¢Ê±¼ä²îÈç¹û´óÓÚij¸öãÐÖµ¾ÍÖ´ÐÐʼþ£¬È»ºóÖØÖõÚÒ»¸öʱ¼ä
¡¡¡¡function throttle(fn, mustRun = 500) {
¡¡¡¡const timer = null;
¡¡¡¡let previous = null;
¡¡¡¡return function() {
¡¡¡¡const now = new Date();
¡¡¡¡const context = this;
¡¡¡¡const args = arguments;
¡¡¡¡if (!previous){
¡¡¡¡previous = now;
¡¡¡¡}
¡¡¡¡const remaining = now - previous;
¡¡¡¡if (mustRun && remaining >= mustRun) {
¡¡¡¡fn.apply(context, args);
¡¡¡¡previous = now;
¡¡¡¡}
¡¡¡¡}
¡¡¡¡}
¡¡¡¡ÕâÀïµÄ mustRun¾ÍÊǵ÷Óú¯ÊýµÄʱ¼ä¼ä¸ô£¬ÎÞÂÛ¶àôƵ·±µÄµ÷Óà fn£¬Ö»ÓÐ remaining>=mustRunʱ fn²ÅÄܱ»Ö´ÐС£
¡¡¡¡ÊµÑé
¡¡¡¡Ò³Ãæ´ò¿ªÊ±
¡¡¡¡
¡¡¡¡¿ÉÒÔ¿´³ö´Ëʱ½ö½öÊǼÓÔØÁËimg1ºÍimg2£¬ÆäËüµÄimg¶¼Ã»·¢ËÍÇëÇ󣬿´¿´´ËʱµÄä¯ÀÀÆ÷
¡¡¡¡
¡¡¡¡µÚÒ»ÕÅͼƬÊÇÍêÕûµÄ³ÊÏÖÁË£¬µÚ¶þÕÅͼƬ¸Õ½øÈë¿ÉÊÓÇøÓò£¬ºóÃæµÄ¾Í¿´²»µ½ÁË~
¡¡¡¡Ò³Ãæ¹ö¶¯Ê±
¡¡¡¡µ±ÎÒÏòϹö¶¯£¬´Ëʱä¯ÀÀÆ÷ÊÇÕâÑù
¡¡¡¡
¡¡¡¡´ËʱµÚ¶þÕÅͼƬÍêÈ«ÏÔʾÁË£¬¶øµÚÈýÕÅͼƬÏÔʾÁËÒ»µãµã£¬ÕâʱºòÎÒÃÇ¿´¿´ÇëÇóÇé¿ö
¡¡¡¡
¡¡¡¡img3µÄÇëÇó·¢³öÀ´£¬¶øºóÃæµÄÇëÇó»¹ÊÇû·¢³ö~
¡¡¡¡È«²¿ÔØÈëʱ
¡¡¡¡µ±¹ö¶¯Ìõ¹öµ½×îµ×ÏÂʱ£¬È«²¿ÇëÇó¶¼Ó¦¸ÃÊÇ·¢³öµÄ£¬Èçͼ£º

×÷ÕߣºÀÖÓã²¥¿Íǰ¶ËÓëÒÆ¶¯¿ª·¢ÅàѵѧԺ
Ê×·¢£º http://web.itcast.cn
±±¾©Ð£Çø