No More Posting New Topics!

If you have a question or an issue, please start a thread in our Github Discussions Forum.
This forum is closed for new threads/ topics.

Navigation

    Quasar Framework

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    q-Tree auto-scroll to last node

    Help
    4
    12
    1088
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      studio511 last edited by

      I have a dynamic tree that is auto-building its nodes when it receives a data.
      After creating like 20 nodes, my display remains at the first node while I have to scroll down on my app page to see the end of the tree.
      Is there any way that after a tree is built, the tree auto-focus to the last node?

      1 Reply Last reply Reply Quote 0
      • S
        studio511 last edited by

        Could this be scroll-observer instead?

        Y 1 Reply Last reply Reply Quote 0
        • Y
          yo @studio511 last edited by yo

          @studio511 yeah I think using observers is the right way to do it !

          Can you post your code of the dynamic q-tree replaced by dynamic lorem ipsum ?

          Ps : after thinking 30 seconds, observer is an observer so no you can’t do it with it.

          I have found the property scroll-target of the q-virtual-scroll.
          Maybe you could dynamically create and id to the last html element and del the last one when you create a new tree element. Then scroll-target to it.
          Or simply create an empty div/span with end id, but maybe it could create weird display.
          Or you could using the last element of a class you created for it.

          There’s also Scroll position

          When I’ll be on my computer, I’ll try few stuff, that’s if you can share me the code it will be cool !

          S 1 Reply Last reply Reply Quote 0
          • S
            studio511 @yo last edited by

            hi @yo currently i’m not using the scroll component, the scroll bar was self-created when the page gets extended so when that happens, a class = ‘q-panel-scroll’ got created…
            So I’ll thinking if I really needed to include a scroll component in order to control it…
            and regarding the dynamics of q-tree, conceptually, I created a computed property to watch the nodes. managed by a delay, I updated the nodes every few seconds and the tree rebuilds itself when it receives the updated nodes

            Y 1 Reply Last reply Reply Quote 0
            • Y
              yo @studio511 last edited by

              If you don’t want to use a scroll area you can do a dom search to get the scroll area inside your page, then you add a ref argument called ‘myScroll’ (if doesn’t exist yet), then do this after adding a new tree element (if the scroll exist) :

              this.$refs.myScroll.setScrollPosition(999999)
              

              Maybe it won’t work cause ref depending on Vue, then use a common Dom id to get the element.

              But I don’t think dom manipulation works for mobile (maybe I’m wrong)

              S 1 Reply Last reply Reply Quote 0
              • S
                studio511 @yo last edited by

                @yo thanks mate! I think you just simplified my problem. I was thinking too deep into how I could control the scroll position until your suggestion. Yes it works for me now. Defaulting the scroll position at the end really worked 🙂

                Y 1 Reply Last reply Reply Quote 0
                • Y
                  yo @studio511 last edited by

                  @studio511 you’re welcome 😉

                  1 Reply Last reply Reply Quote 0
                  • P
                    pintaf last edited by pintaf

                    Hey.

                    I had more or less the same problem, I wanted to scroll a specific entry of my Qtree.
                    I followed the instructions here

                    but I discovered that it was scrolling only a little bit. This is because el.offsetTop return the offset to direct parent.

                    So I adapted the function a littlebit:

                    function scrollToElement (el) {
                      const target = getScrollTarget(el);
                      let offset = 0;
                      while (el.id !== "YOURQTREE_ID") {
                        offset += el.offsetTop;
                        el = el.offsetParent;
                      }
                      const duration = 1000;
                      setScrollPosition(target, offset, duration);
                    }
                    

                    in order to have it working, you need to define an id on the Qtree and also the class “scroll” or others such as defined here

                    and then call this function when you need it:

                    scrollToElement(YOUR_ELEMENT);
                    

                    The only bug I see is when you’ve scrolled to the place, if you call the function again it doesn’t work perfectly.
                    But it’s maybe linked to my setup as I call scrollToElement in mounted(), so I refresh the page to call again the scroll, and in this case, it goes nuts.

                    It was indeed linked to the page refresh. Otherwise, no problem.

                    Tell me if unclear and I’ll explain further.

                    A 1 Reply Last reply Reply Quote 0
                    • A
                      ArkIv @pintaf last edited by ArkIv

                      @pintaf said in q-Tree auto-scroll to last node:

                      while (el.id !== “YOURQTREE_ID”) {
                      offset += el.offsetTop;
                      el = el.offsetParent;
                      }

                      And if so?
                      import { dom } from “quasar”;
                      let offset = dom.offset(el).top

                      1 Reply Last reply Reply Quote 0
                      • P
                        pintaf last edited by pintaf

                        Well I though your proposal would be a very good solution, but it is actually not working.
                        Main problems:

                        • It calculate offset from top of DOM so top of quasar application. If the top of your QTree is not touching the top of your dom, then it will return invalid values (easy to solve though, by subtracting that margin between top dom and top QTree).
                        • Second and main problem:
                          Let’s imagine you have 100 values in your Qtree all at level/depth 0 (no children), just to make it simple. Let’s say you scrolled manually at the end of your Qtree.
                          and you want programmatically scroll to the 10th. Well the 10th is above the top of dom, so your method return negative value. And a scroll value is always positive.
                        S 1 Reply Last reply Reply Quote 0
                        • S
                          studio511 @pintaf last edited by

                          @pintaf hi,

                          I did not work with offset but practically specify the position. I found some usage during the massive googling and incorporate the following into my code.
                          in vue: <q-tree ref=“referencetree”>
                          in script :
                          var getlast = document.getElementById(‘referencetree’).scrollHeight
                          document.getElementById(‘referencetree’).scrollTop = getlast

                          not sure if it works for your case but if you could get the position of your entry, you could modify that ‘getlast’ definition.

                          1 Reply Last reply Reply Quote 0
                          • P
                            pintaf last edited by

                            Hey.

                            Thanks. but the solution I posted actually works. I do not have issues, I just wanted to share how I did things 🙂

                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post