2016-07-22 4 views
5

मैं, छवि एक बार यह कुछ इस तरह कर रही है पूरी तरह से लोड है दिखाएगा एक पृष्ठभूमि छवि/लोड हो रहा है स्पिनर एक div अंदर है कि इसके अंदर एक छवि लोड होगा दिखाना चाहते हैं, जबकि:एक लोडिंग आइकन प्रदर्शित छवियों भार

<div style="background-image:url('imageThatWillAppearBeforeLoad')"></div> 

Demo (In jQuery)

मैं कोणीय 2/आयनिक 2 का उपयोग कर कैसे कर सकता हूं?

+0

की संभावित डुप्लिकेट [आयोनिक 2: (Lazy) चित्रों के लिए स्पिनर लोड हो रहा है] (http://stackoverflow.com/

यहाँ मेरी समाधान है प्रश्न/38846271/आयनिक -2-आलसी-लोडिंग-स्पिनर-फॉर-पिक्चर्स) –

उत्तर

12

एक घटक बनाएं जो प्लेसहोल्डर छवि को तब तक दिखाता है जब तक अनुरोधित छवि लोड नहीं हो जाती है, और अनुरोधित छवि को छुपाता है। एक बार छवि लोड होने के बाद, आप प्लेसहोल्डर को छुपाएं और छवि दिखाएं।

@Component({ 
    selector: 'image-loader', 
    template: `<img *ngIf="!loaded" src="url-to-your-placeholder"/> 
    <img [hidden]="!loaded" (load)="loaded = true" [src]="src"/>` 
}) 
export class ImageLoader { 
    @Input() src; 
} 

इसे Plunker में काम करना देखें।

अद्यतन

अब जब कि मैं आवश्यकताओं को बेहतर समझते हैं, यहाँ पृष्ठभूमि छवि के साथ एक समाधान है। यह थोड़ा हैकी है, और मुझे मूल एक बेहतर पसंद है ...

@Directive({ 
    selector: '[imageLoader]' 
}) 
export class ImageLoader { 
    @Input() imageLoader; 

    constructor(private el:ElementRef) { 
    this.el = el.nativeElement; 
    this.el.style.backgroundImage = "url(http://smallenvelop.com/demo/image-loading/spinner.gif)"; 
    } 

    ngOnInit() { 
    let image = new Image(); 
    image.addEventListener('load',() => { 
     this.el.style.backgroundImage = `url(${this.imageLoader})`; 
    }); 
    image.src = this.imageLoader; 
    } 
} 

Updated plunker

+0

आपका कोड ठीक काम कर रहा है, लेकिन मेरे मामले के लिए मैंने पोस्ट किया है, मेरे पास '

'है जिसमें पृष्ठभूमि में एक छवि है I मैंने आपके पास 'div' से मेल खाने के लिए अपने कोड को ट्विक करने का प्रयास किया है लेकिन यह काम नहीं किया है, क्या यह इसे एक काम के रूप में बनाना संभव है 'div'? –

+0

जो मैंने अभी तक हासिल किया है, मुझे लगता है कि (लोड) किसी कारण से काम नहीं करता है! क्योंकि मैंने 'div' के साथ 'img' को बदल दिया है, आदि ... जब मैं 'डोम' की जांच करने के लिए जाता हूं, तो मुझे छुपा दिखाई देता है जिसका अर्थ है कि लोड किया गया = सत्य किसी कारण से लागू नहीं किया गया था, जिससे मुझे यह भी सुनिश्चित हो जाता है कि '(लोड) 'के साथ कोई समस्या है कि मैं इसे' (क्लिक करें) 'से बदलता हूं, फिर मैं इसे प्लेसहोल्डर' div' में रखता हूं और यह काम करता है! तो, क्या आपको कोई विचार है कि '(लोड) 'क्यों काम नहीं किया? –

+0

यह काम नहीं किया क्योंकि 'div के पास' अधिभार 'ईवेंट नहीं है ... यही कारण है कि मैंने इस तरह से घटक बनाया है। – yarons

3

यहाँ मेरी posts

मैं अंत में सीएसएस के साथ कि समस्या हल में से एक की एक प्रति है! जब आयनिक 2 में कोई छवि लोड हो रही है, तो आयन-आईएमजी टैग में कोई वर्ग नहीं है। हालांकि, जब छवि अंततः लोड हो जाती है, तो आयन-आईएमजी टैग कक्षा "img-loaded" प्राप्त करती है।

<ion-img [src]="img.src"></ion-img> 
    <ion-spinner></ion-spinner> 

और मेरे सीएसएस:

.img-loaded + ion-spinner { 
    display:none; 
} 
संबंधित मुद्दे