Skip to content

Page control arrows for PWA

Solved Customisation
27 2 15.1k 1
  • @crazycells Right - I’ve put together a base design on this site which will only fire when PWA mode is detected. It looks like the below - note the left and right arrows. They are “basic” but functional 🙂

    ba4e6203-55d8-4462-82d7-cba35ad530da-image.png

    CSS

    /* START - CSS settings for PWA navigation */
        
    .arrow {
      width: 40px;
      height: 40px;
      background-color: var(--bs-body-bg);
      text-align: center;
      line-height: 30px;
      cursor: pointer;
      font-size: 30px;
      border: 1px solid var(--bs-border-color);
      border-radius: var(--bs-border-radius);
    }
    .arrow.left, .arrow.right {
        margin-left: 10px;
        margin-right: 10px;
        align-content: center;
        position: fixed;
        top: 50%;
    }
    .arrow.right {
        position: fixed;
        right: 0;
    }
    
    /* END - CSS settings for PWA navigation */
    

    JS

    The below code does rely on serviceWorker but that’s typically present in all “modern” browsers

    $(document).ready(function() {
      // Check if serviceWorker API is available
      if ('serviceWorker' in navigator) {
        // The browser supports service workers
        console.log('This web app supports service workers.');
    
        // Check if the app is installed (as PWA)
        if (window.matchMedia('(display-mode: standalone)').matches) {
          console.log('This web app is running as a Progressive Web App.');
          
          // Add HTML for navigation arrows
          $('body').append('<div class="navigation"><div class="arrow left">&lt;</div><div class="arrow right">&gt;</div></div>');
    
          // Handle click on left arrow
          $('.arrow.left').click(function() {
            history.back(); // Go back in history
          });
    
          // Handle click on right arrow
          $('.arrow.right').click(function() {
            history.forward(); // Go forward in history
          });
        } else {
          console.log('This web app is not running as a Progressive Web App.');
        }
      } else {
        console.log('This web browser does not support service workers.');
      }
    });
    

    Again, this is basic and more of a POC. Other functionality can be added in a similar way if you’d like it.

    wrote on last edited by
    #6

    @phenomlab thank you very much 🙏

  • @phenomlab thank you very much 🙏

    wrote on last edited by
    #7

    @crazycells what would be the z-index value to hide it when the navigation menu options appear? I believe they should be invisible when those options panels are opened…

  • @crazycells what would be the z-index value to hide it when the navigation menu options appear? I believe they should be invisible when those options panels are opened…

    wrote on last edited by
    #8

    @crazycells yeah, I set that quite high at 9999 which is complete overkill! Try lowering that value to something more sane like 1500

  • wrote on last edited by
    #9

    @crazycells I think I found a bug. If you position a topic between the two navigation arrows on a mobile device, you cannot click that topic until you scroll up or down past the arrows. I noticed this last night and will address it.

  • wrote on last edited by phenomlab
    #10

    A better explanation of that is below

    image.png

    As you can see from the developer view, the width: 100%; sits over the top of the topic meaning it cannot be clicked or tapped. A workaround here should be to set z-index: -1; on the navigation class, but whilst that resolves the ordering issue, it means the navigation buttons no longer work as they sit under the content.

  • wrote on last edited by
    #11

    Fixed. Change the CSS block (original post is also updated) to the below

    /* START - CSS settings for PWA navigation */
        
    .arrow {
      width: 40px;
      height: 40px;
      background-color: var(--bs-body-bg);
      text-align: center;
      line-height: 30px;
      cursor: pointer;
      font-size: 30px;
      border: 1px solid var(--bs-border-color);
      border-radius: var(--bs-border-radius);
    }
    .arrow.left, .arrow.right {
        margin-left: 10px;
        margin-right: 10px;
        align-content: center;
        position: fixed;
        top: 50%;
    }
    .arrow.right {
        position: fixed;
        right: 0;
    }
    
    /* END - CSS settings for PWA navigation */
    
  • wrote on last edited by
    #12

    I have not tested them in details yet, but I will let you know about any bugs for sure 👍🏼

    Additionally, is there any reason that they are in the middle but not close to the bottom? That is usually where the fingers will be

  • I have not tested them in details yet, but I will let you know about any bugs for sure 👍🏼

    Additionally, is there any reason that they are in the middle but not close to the bottom? That is usually where the fingers will be

    wrote on last edited by phenomlab
    #13

    @crazycells They can be anywhere you’d prefer. You can just change the .arrow.left, .arrow.right class to move to the preferred position. Currently, it’s set at 50%, but can be any value you want to reach the desired position. In this case, it would probably be better to substitute top for bottom and set the position in px to ensure the placement is the same no matter which screen estate you have.

    For example

    .arrow.left, .arrow.right {
        margin-left: 10px;
        margin-right: 10px;
        align-content: center;
        position: fixed;
        bottom: 120px;
    }
    

    That now means the page scroller (the button that appears bottom right) will be in the way, although on thinking about it, we already have a page navigation when you are in the topic, so no point in having another. That would be a minor alteration to the scroll top function to have it not appear on posts.

  • @crazycells They can be anywhere you’d prefer. You can just change the .arrow.left, .arrow.right class to move to the preferred position. Currently, it’s set at 50%, but can be any value you want to reach the desired position. In this case, it would probably be better to substitute top for bottom and set the position in px to ensure the placement is the same no matter which screen estate you have.

    For example

    .arrow.left, .arrow.right {
        margin-left: 10px;
        margin-right: 10px;
        align-content: center;
        position: fixed;
        bottom: 120px;
    }
    

    That now means the page scroller (the button that appears bottom right) will be in the way, although on thinking about it, we already have a page navigation when you are in the topic, so no point in having another. That would be a minor alteration to the scroll top function to have it not appear on posts.

    wrote on last edited by
    #14

    @phenomlab thanks, yes, I will move them close to the menu bar, but I was asking in case there is a technical detail I was not aware…

  • @phenomlab thanks, yes, I will move them close to the menu bar, but I was asking in case there is a technical detail I was not aware…

    wrote on last edited by
    #15

    @crazycells No, none that I am aware of - move them to where you’d prefer. In fact, I took your advice and moved them on Sudonix, which uses the CSS class I added in the previous post.

  • @crazycells No, none that I am aware of - move them to where you’d prefer. In fact, I took your advice and moved them on Sudonix, which uses the CSS class I added in the previous post.

    wrote on last edited by
    #16

    @phenomlab yes, I believe this looks more natural, they are closer to the fingers and on the top of these, it is not blocking any content in the middle of the screen…

  • @phenomlab yes, I believe this looks more natural, they are closer to the fingers and on the top of these, it is not blocking any content in the middle of the screen…

    wrote on last edited by
    #17

    @crazycells Exactly. i’m going to hire you as a design guru! You have some great ideas on what Sudonix should look like and I’m grateful for any contribution that enhances what I hope is already a good experience.

  • @crazycells Exactly. i’m going to hire you as a design guru! You have some great ideas on what Sudonix should look like and I’m grateful for any contribution that enhances what I hope is already a good experience.

    wrote on last edited by
    #18

    @phenomlab It is nice to hear that I am able to contribute your website 😄

  • @crazycells They can be anywhere you’d prefer. You can just change the .arrow.left, .arrow.right class to move to the preferred position. Currently, it’s set at 50%, but can be any value you want to reach the desired position. In this case, it would probably be better to substitute top for bottom and set the position in px to ensure the placement is the same no matter which screen estate you have.

    For example

    .arrow.left, .arrow.right {
        margin-left: 10px;
        margin-right: 10px;
        align-content: center;
        position: fixed;
        bottom: 120px;
    }
    

    That now means the page scroller (the button that appears bottom right) will be in the way, although on thinking about it, we already have a page navigation when you are in the topic, so no point in having another. That would be a minor alteration to the scroll top function to have it not appear on posts.

    wrote on last edited by
    #19

    @phenomlab said in Page control arrows for PWA:

    That now means the page scroller (the button that appears bottom right) will be in the way, although on thinking about it, we already have a page navigation when you are in the topic, so no point in having another.

    Based on the above point made, I have now disabled the scroll to top button inside topics.

  • @phenomlab said in Page control arrows for PWA:

    That now means the page scroller (the button that appears bottom right) will be in the way, although on thinking about it, we already have a page navigation when you are in the topic, so no point in having another.

    Based on the above point made, I have now disabled the scroll to top button inside topics.

    wrote on last edited by
    #20

    @phenomlab this works great! thanks a lot. And thanks to your JS codes, it is only activated on PWA, not on mobile…

  • @phenomlab this works great! thanks a lot. And thanks to your JS codes, it is only activated on PWA, not on mobile…

    wrote on last edited by
    #21

    @crazycells Not sure if you are using the scroll-top function, but if you are, I have enhanced the position of the button and re-sized it to match the forward and back arrows as below

    bd290755-5232-4a4c-9801-aa23235c1563-image.png

    The scroll-top button is located on the bottom right.

  • @crazycells Not sure if you are using the scroll-top function, but if you are, I have enhanced the position of the button and re-sized it to match the forward and back arrows as below

    bd290755-5232-4a4c-9801-aa23235c1563-image.png

    The scroll-top button is located on the bottom right.

    wrote on last edited by
    #22

    @phenomlab yes I used it before but not very frequently… Maybe you should put it above… just because it is more intuitive…
    ^
    < >
    v

  • @phenomlab yes I used it before but not very frequently… Maybe you should put it above… just because it is more intuitive…
    ^
    < >
    v

    wrote on last edited by
    #23

    @crazycells Ok, but there’s no “scroll-down” 🙂

  • @crazycells Ok, but there’s no “scroll-down” 🙂

    wrote on last edited by
    #24

    @phenomlab yeah , I know 😄 not necessary, but “up” should be above right/left buttons I guess… that is how people would think…

  • @phenomlab yeah , I know 😄 not necessary, but “up” should be above right/left buttons I guess… that is how people would think…

    wrote on last edited by
    #25

    @crazycells Good point, thanks.


Did this solution help you?
Did you find the suggested solution useful? Support 💗 Sudonix with a coffee ☕
If your organisation needs deeper expertise around infrastructure, security, or technology leadership, learn more about Phenomlab Ltd. Many of the deeper technical guides behind Sudonix are published there.

Related Topics
  • Spam spam spam

    Solved Configure nodebb
    6
    2 Votes
    6 Posts
    3k Views
    phenomlab
    @Panda said in Spam spam spam: ok, yes Ive seen the queue, it shows IP, but doesnt have a field for comments from registrant. It’s not designed for that. It merely serves as a gateway between posts appearing on your form or not. @Panda said in Spam spam spam: It would be better if nodebb had this plugin included in ACP list, as not only then do you know its approved and should work, but many people cant or dont want to use CLI on the server That’s a question for the NodeBB devs but in all honesty you can’t not use the CLI when installing nodebb so to be this isn’t a big deal.
  • 14 Votes
    17 Posts
    5k Views
    DownPW
    No problem dude ! I hope you have a good vacation. Enjoy your loved ones!
  • Nodebb icon on google page

    Solved Customisation nodebb
    9
    1
    4 Votes
    9 Posts
    4k Views
    phenomlab
    @Panda It’s been raised multiple times, but only for the open source version, and not hosted.
  • Header Menu After Upgrading V3.1.1

    Solved Customisation header nodebb
    2
    1
    2 Votes
    2 Posts
    1k Views
    phenomlab
    @cagatay this relates to a change the css classes used for the brand header meaning it will now float to the left instead of right. If you’d like to retain the original behavior, you can add this css class [data-widget-area="brand-header"] { justify-content: end; display: flex; } Further information here https://community.nodebb.org/topic/17090/manual-build-a-custom-header-in-harmony/19?_=1684069325296
  • Make logo rotate on page load and hover

    Solved Customisation
    20
    2 Votes
    20 Posts
    6k Views
    DownPW
    @phenomlab grrrrrrr [image: grrrrr] that simple… Thanks Mark
  • fading in /tags page

    Solved Customisation nodebb
    32
    1
    30 Votes
    32 Posts
    13k Views
    DownPW
    Fix working perfectly
  • CSS codes for fa-info icon

    Solved Customisation nodebb
    9
    1
    6 Votes
    9 Posts
    3k Views
    crazycells
    I have just figured it out… it can be targeted with text-decoration-color: I was mistakenly using color
  • [NODEBB] Reply Button/arrow answer

    Solved Customisation css nodebb
    25
    4
    4 Votes
    25 Posts
    12k Views
    DownPW
    Topic open https://sudonix.com/topic/207/nodebb-help-for-my-custom-css