Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to force 1 page only to be rendered on mobile? #47

Open
Blankeos opened this issue Oct 21, 2023 · 4 comments
Open

How to force 1 page only to be rendered on mobile? #47

Blankeos opened this issue Oct 21, 2023 · 4 comments

Comments

@Blankeos
Copy link

I want to make my flipbook a little bit more responsive. Kind of hard to do.
For mobile, ideally I'd want it to just render 1 page instead of two since it's too small if it renders two pages in a small width.

@juncraul
Copy link

Looking for an answer for this as well.

@Blankeos
Copy link
Author

Blankeos commented Nov 2, 2023

YO @juncraul guess what? I was able to solve it! 🥳🥳🥳🎉🎉🚀🚀🚀🚀🚀🚀

Portrait Mode Gif (2)

I honestly have no idea how to make a smaller-scale example of this. But this is the rough code and description for this that made it work, so bare with me:

  1. I have a width and height from a state (this might not be necessary for your case but I wanted to have customizable sizes). The width and height comes from the callback resolved when I use react-pdf, which basically refers to the width and height of 1 page (not the book so like the width and height of the paper).
  2. I use that width and height for the parent div of the <HTMLFlipBook />. The parent div has a width * 2 because it has to be big enough for two pages. Also notice how the width used inside HTMLFlipBook's props is not multiplied by 2 because I think width and height only refers to 1 page here, not the book.
  3. I added a border class to the div. (It's weird but THIS WAS SUPER IMPORTANT to make this work).
  4. Add the minHeight: 0, and height: height on the Flip Book. Because for some weird reason the minimum height given to the stf_parent div is like 2x of what it's supposed to be, making the page look tall and centered.
  5. Lastly, add the usePortrait boolean. Attach it to a useState if you want.
  6. Additionally, if you want to make it responsive, just attach it to a library like useMediaQuery and control those states.
<div
  style={{ width: width! * 2, height: height }}
  className="relative bg-primary-100 pointer-events-auto border"
>
  <HTMLFlipBook
    key={`${width}-${height}-${isPortrait}`}
    style={{
      minHeight: 0,
     height: height,
   }}
   usePortrait={isPortrait}
   width={width!}
   height={height!}
   maxShadowOpacity={0.2}
   showCover
   onFlip={onPageFlip}
 >
   {renderedPages}
 </HTMLFlipBook>
</div>

@SaikiranReddyKudumula
Copy link

SaikiranReddyKudumula commented Nov 6, 2023

Hey @Blankeos excellent implementation of react page flip, where can i find the full implementation of this library, is it possible for you to share your full code?

@lhaynes96
Copy link

@Blankeos can you show entire code for this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants