glide icon indicating copy to clipboard operation
glide copied to clipboard

Instance in callbacks [duplicate]

Open nickcarterney opened this issue 3 years ago • 5 comments

If I have many Glides in a page like this, this context always return the latest initialized Glide:


let queries = ["slide1", "slide2"];

queries .forEach(function(queryItem){
    let currentGlide = new Glide(document.querySelector("." + queryItem), {
        //options...
    })

    currentGlide.on("run.after", function(e){
        //e should be an instance, then I can know the current Glide is
        console.log(this);// <= always return Slide 2
    })

    currentGlide.mount();
})

How can I get the current Glide in event callback function? same with issue in #44

nickcarterney avatar Dec 16 '21 11:12 nickcarterney

Current my solution :( although it's too bad, but I cannot find the other ways


let queries = ["slide1", "slide2"],
    glides = {};

queries.forEach(function(queryItem){
    let currentGlide = new Glide(document.querySelector("." + queryItem), {
        //options...
    })

    currentGlide.on("run.after", function(e){
        queries.forEach(function(queryItem){
            if(document.querySelector("." + queryItem).dataset.currentTarget) {
                //current Glide
                console.log(glides[queryItem]);
            }
        })
    })

    currentGlide.mount();

    currentGlide.addEventListener("mouseenter", function(e){
        queries.forEach(function(queryItem){
            document.querySelector("." + queryItem).dataset.currentTarget = false;
        })
        e.target.dataset.currentTarget = true;
    })
    glides[queryItem] = currentGlide;
})

It takes too many codes :(

nickcarterney avatar Dec 16 '21 11:12 nickcarterney

Well, I've customized for myself. Hope that this feature will available in 4.0 version image

nickcarterney avatar Dec 16 '21 12:12 nickcarterney

let queries = ["slide1", "slide2"];

queries .forEach(function(queryItem){
    let currentGlide = new Glide(document.querySelector("." + queryItem), {
        //options...
    })

    currentGlide.on("run.after", function(e) {
        console.log(currentGlide); // <= current glide instance
    })

    currentGlide.mount();
})

jedrzejchalubek avatar Dec 17 '21 13:12 jedrzejchalubek

let queries = ["slide1", "slide2"];

queries .forEach(function(queryItem){
    let currentGlide = new Glide(document.querySelector("." + queryItem), {
        //options...
    })

    currentGlide.on("run.after", function(e) {
        console.log(currentGlide); // <= current glide instance
    })

    currentGlide.mount();
})

that's not correct bro :D currentGlide always is Slide 2, because we've stored the 2nd initialized Glide into currentGlide.

1. currentGlide  = Slide 1
2. currentGlide  = Slide 2
3. currentGlide.on("run.after", function(e) {
        console.log(currentGlide); // <= current glide instance = Slide 2, what i need is Slide 1
    })

nickcarterney avatar Dec 17 '21 17:12 nickcarterney

In that case, create an extension where you have direct access to an instance of glide and event bus. Details here: https://glidejs.com/docs/extending-components/

jedrzejchalubek avatar Dec 19 '21 14:12 jedrzejchalubek