cmswalker / fullpage-react

Stateful fullpage.js inspired scrolling for React
https://cmswalker.github.io/fullpage-react/
206 stars 42 forks source link

Unable to Scroll Scrollable Content #106

Open NaniChennuri opened 3 years ago

NaniChennuri commented 3 years ago

My Structure (There are no vertical slides but only Horizontal Slides.) FullPage ------Horizontal Sliders ---------Slider1 ---------Slider2

On each of the Horizontal Slide, I am having a table which lists set of items. I am able to scroll horizontally but unable to scroll the contents inside the table using mouse wheeler.

Below is the sample Code.

--------------------------------------------------MainPage------------------------------------------------------------------- `import React from 'react';

import { Fullpage, HorizontalSlider, Slide } from '../lib/index'; const { changeFullpageSlide, changeHorizontalSlide } = Fullpage;

require('./normalize.css'); require('./skeleton.css'); require('./exampleStyles.styl');

const fullPageOptions = { // for mouse/wheel events // represents the level of force required to generate a slide change on non-mobile, 0 is default scrollSensitivity: 2,

// for touchStart/touchEnd/mobile scrolling // represents the level of force required to generate a slide change on mobile, 0 is default touchSensitivity: 2, scrollSpeed: 500, resetSlides: true, hideScrollBars: true, enableArrowKeys: true,

// optional, set the initial vertical slide activeSlide: 0 };

const horizontalNavStyle = { position: 'absolute', width: '100%', top: '50%', zIndex: 10 };

const horizontalSliderProps = { name: 'horizontalSlider1', infinite: true };

class FullpageReact extends React.Component { constructor(props) { super(props); this.state = { active: { Fullpage: 0, horizontalSlider1: 0 } };

this.onSlideChangeStart = this.onSlideChangeStart.bind(this);
this.onSlideChangeEnd = this.onSlideChangeEnd.bind(this);

}

onSlideChangeStart(name, props, state, newState) { if (!this.horizontalNav) { this.horizontalNav = document.getElementById('horizontal-nav'); }

if (name === 'horizontalSlider1') {
  scrollNavStart(this.horizontalNav);
}

}

onSlideChangeEnd(name, props, state, newState) { if (name === 'horizontalSlider1') { scrollNavEnd(this.horizontalNav); }

const oldActive = this.state.active;
const sliderState = {
  [name]: newState.activeSlide
};

const updatedState = Object.assign(oldActive, sliderState);
this.setState(updatedState);

}

render() { const { active } = this.state;

const horizontalSliderName = horizontalSliderProps.name;
const horizontalActive = this.state.active[horizontalSliderName];

const prevHorizontalSlide = changeHorizontalSlide.bind(null, horizontalSliderName, horizontalActive - 1);
const nextHorizontalSlide = changeHorizontalSlide.bind(null, horizontalSliderName, horizontalActive + 1);

const horizontalNav = (
  <div id='horizontal-nav' style={horizontalNavStyle}>
    <span onClick={prevHorizontalSlide}><button>PREV</button></span>
    <span style={{position: 'absolute', right: '0px'}} onClick={nextHorizontalSlide}><button>Next</button></span>
  </div>
);

const horizontalSlides = [
  <Slide style={{backgroundColor: 'red'}}>
      <TableData cardTitle="one"/>
  </Slide>,
  <Slide style={{backgroundColor: 'yellow'}}>
        <TableData cardTitle="two"/>
  </Slide>,
];
horizontalSliderProps.slides = horizontalSlides;

const horizontalSlider = <HorizontalSlider id='horizontal-slider-1' {...horizontalSliderProps}>{horizontalNav}</HorizontalSlider>;

const verticalSlides = [
  horizontalSlider,
];
fullPageOptions.slides = verticalSlides;

return (
  <Fullpage onSlideChangeStart={this.onSlideChangeStart} onSlideChangeEnd={this.onSlideChangeEnd} {...fullPageOptions}>
  </Fullpage>
);

} }

function scrollNavStart(nav) { // make the nav fixed when we start scrolling horizontally nav.style.position = 'fixed'; }

function scrollNavEnd(nav) { // make the nav absolute when scroll finishes nav.style.position = 'absolute'; }

export default FullpageReact; `

--------------------------------------------------TablePage------------------------------------------------------------------- `import React from 'react'

export default class TableData extends React.Component { constructor(props) { super(props); }

render() { return (

{this.props.cardTitle}
{itemList.map((item) => { return ( ) })}
{item.name}
)

} } `

--------------------------------------------------Table Page CSS-------------------------------------------------------------------

`.single-field-editor-card-wrap { position: relative;
}

.single-field-editor-table-wrap { height: 300px; overflow-y: scroll; border: 1px solid #ddddddff; border-radius: 5px; padding: 5px; }

.single-field-editor-table { table-layout: initial; }

.Card { max-width: 50%; min-width: 50%; left: 20%; position: absolute; }`