最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

react實(shí)現(xiàn)無限循環(huán)滾動信息

 更新時間:2021年10月20日 15:04:37   作者:孤風(fēng)隨雨  
這篇文章主要為大家詳細(xì)介紹了react實(shí)現(xiàn)無限循環(huán)滾動信息,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了react實(shí)現(xiàn)無限循環(huán)滾動信息的具體代碼,供大家參考,具體內(nèi)容如下

需求

后端傳遞過來的數(shù)據(jù)滾動顯示,鼠標(biāo)移入后停止?jié)L動,鼠標(biāo)移出后繼續(xù)滾動,參考公司門戶的公告信息欄

實(shí)現(xiàn)思路

思路一

在componentDidMount中定義一個定時器,每過1000ms觸發(fā)一次事件,將數(shù)組中第一條數(shù)據(jù)push到數(shù)組中,再刪除掉第一條數(shù)據(jù),最后給div添加onMouEnter和onMouseLeave事件,讓鼠標(biāo)移入時清除定時器,鼠標(biāo)移出時重新開啟定時器。

代碼:

class Roll extends React.Component{
  
  state = {
    list: [
      { title: '靜夜思' },
      { title: '唐-李白' },
      { title: '窗前明月光' },
      { title: '疑是地上霜' },
      { title: '舉頭望明月' },
      { title: '低頭思故鄉(xiāng)' },
    ]
  }

  componentWillMount = () => {
    this.begin()
  }

  roll = () => {
    let arr = this.state.list;
    arr.push(this.state.list[0])
    arr.splice(0,1)
    this.setState({
      list: arr,
    })
    console.log(this.state.list);
  }

  begin = () => {
    this.timer = setInterval(() => {
      this.roll()
    }, 1000);
  }

  stop = () => {
    clearInterval(this.timer)
  }

  render () {
    return (
      <div onMouseEnter={this.stop} onMouseLeave={this.begin} className='box'>
        {this.state.list.map(item => {
          return (
            <p>
              {item.title}
            </p>
          )
        })}
      </div>
    )
  }
}

效果圖:

可以看到實(shí)現(xiàn)出來的效果并不好,沒有往上偏移的效果,所以有了思路二。

思路二

在思路一的基礎(chǔ)上進(jìn)行修改,在componentDidMount中定義定時器,每次向上偏移幾個px,當(dāng)偏移到一定距離后,將數(shù)組中第一條數(shù)據(jù)push到數(shù)組中,再刪除掉第一條數(shù)據(jù),最后給div添加onMouEnter和onMouseLeave事件。

js文件

class Roll extends React.Component{

  state = {
    list: [
      { title: '這是消息1' },
      { title: '這是消息2' },
      { title: '這是消息3' },
      { title: '這是消息4' },
      { title: '這是消息5' },
      { title: '這是消息6' },
      { title: '這是消息7' },
      { title: '這是消息8' },
      { title: '這是消息9' },
    ],
    count: 0,
  }

  // 頁面掛載時開啟定時器
  componentDidMount = () => {
    this.begin()
  }

  // 定時器
  begin = () => {
    this.timer = setInterval(() => {
      this.Roll()
    }, 10);
  }

  // 關(guān)閉定時器
  stop = () => {
    clearInterval(this.timer)
  }

  // 每次向上偏移0.5px,使用state儲存偏移的次數(shù)
  Roll = () => {
    this.setState({
      count: this.state.count+1
    })
    this.refs.roll.style.top = -0.5*this.state.count+'px';
    // 當(dāng)偏移量達(dá)到40px時,將數(shù)組中第一個數(shù)據(jù)剪切到數(shù)組的最后,再減去一行高度對應(yīng)的偏移次數(shù)
    if(-0.5*this.state.count <= -40){
      let arr = this.state.list;
      arr.push(this.state.list[0])
      arr.splice(0,1);
      this.setState({
        list: arr,
        count: this.state.count - 50,
      })
      this.refs.roll.style.top = (this.state.count*(-0.5)) + 'px'
    }
    
  }

  render(){
    return (
      <div className="box" onMouseEnter={this.stop} onMouseLeave={this.begin}>
        <div className="content" ref='roll'>
          {this.state.list.map((item)=>{
            return (
              <p className='row'>
                <a href="#" rel="external nofollow" >
                  {item.title}
                </a>
              </p>
            )
          })}
        </div>
      </div>
    )
  }
}

css文件

.box{
  width: 300px;
  height: 160px;
  border: 1px solid black;
  margin: 200px 300px;
  position: relative;
  overflow: hidden;
}

.content{
  position: absolute;
  top: 0px;
}

.row{
  height: 20px;
  margin: 5px auto;
}

效果圖:

獲取節(jié)點(diǎn)

1.document獲取節(jié)點(diǎn)

之前是真的沒想到react里也能使用document獲取元素節(jié)點(diǎn),和js里一樣的用法

2.refs獲取

通過this.refs.xxx獲取

componentDidMount = () => {
        console.log(this.refs.test);
    }

    render () {
        return (
            <div ref='test'>
                123
            </div>
        )
    }

3.findDOMNode獲取

通過ReactDom.findDOMNode(this)來獲取
this為當(dāng)前組件的實(shí)例

componentDidMount = () => {
    console.log(ReactDom.findDOMNode(this));
  }

  render () {
    return (
      <div className='test'>
        123
      </div>
    )
  }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • React中DOM事件和狀態(tài)介紹

    React中DOM事件和狀態(tài)介紹

    這篇文章主要介紹了React中DOM事件和狀態(tài)介紹,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-08-08
  • React狀態(tài)提升案例介紹

    React狀態(tài)提升案例介紹

    這篇文章主要介紹了React狀態(tài)提升案例,所謂 狀態(tài)提升 就是將各個子組件的 公共state 提升到它們的父組件進(jìn)行統(tǒng)一存儲、處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-04-04
  • React競態(tài)條件Race Condition實(shí)例詳解

    React競態(tài)條件Race Condition實(shí)例詳解

    這篇文章主要為大家介紹了React競態(tài)條件Race Condition實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 解決antd的Table組件使用rowSelection屬性實(shí)現(xiàn)多選時遇到的bug

    解決antd的Table組件使用rowSelection屬性實(shí)現(xiàn)多選時遇到的bug

    這篇文章主要介紹了解決antd的Table組件使用rowSelection屬性實(shí)現(xiàn)多選時遇到的bug問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • react-router-dom v6版本實(shí)現(xiàn)Tabs路由緩存切換功能

    react-router-dom v6版本實(shí)現(xiàn)Tabs路由緩存切換功能

    今天有人問我怎么實(shí)現(xiàn)React-Router-dom類似標(biāo)簽頁緩存,很久以前用的是react-router v5那個比較容易實(shí)現(xiàn),v6變化挺大,但了解react的機(jī)制和react-router的機(jī)制就容易了,本文介紹react-router-dom v6版本實(shí)現(xiàn)Tabs路由緩存切換,感興趣的朋友一起看看吧
    2023-10-10
  • 一文帶你深入理解React中的Context

    一文帶你深入理解React中的Context

    React?Context是React提供給開發(fā)者的一種常用的狀態(tài)管理機(jī)制,本文主要來和大家講講為什么需要Context,又是如何使用Context的,感興趣的可以了解一下
    2023-05-05
  • React styled-components設(shè)置組件屬性的方法

    React styled-components設(shè)置組件屬性的方法

    這篇文章主要介紹了styled-components設(shè)置組件屬性的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • React條件渲染實(shí)例講解使用

    React條件渲染實(shí)例講解使用

    在React中,你可以創(chuàng)建不同的組件來封裝各種你需要的行為。然后還可以根據(jù)應(yīng)用的狀態(tài)變化只渲染其中的一部分。React 中的條件渲染和JavaScript中的一致,使用JavaScript操作符if或條件運(yùn)算符來創(chuàng)建表示當(dāng)前狀態(tài)的元素,然后讓React根據(jù)它們來更新UI
    2022-11-11
  • 淺談React Native Flexbox布局(小結(jié))

    淺談React Native Flexbox布局(小結(jié))

    這篇文章主要介紹了淺談React Native Flexbox布局(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • react項(xiàng)目如何運(yùn)行在微信公眾號

    react項(xiàng)目如何運(yùn)行在微信公眾號

    這篇文章主要介紹了react項(xiàng)目如何運(yùn)行在微信公眾號,幫助大家更好的理解和學(xué)習(xí)使用react,感興趣的朋友可以了解下
    2021-04-04

最新評論

金湖县| 钟祥市| 科技| 永登县| 封开县| 孝感市| 岳阳市| 根河市| 孝昌县| 北碚区| 甘肃省| 那坡县| 宁南县| 石棉县| 加查县| 潼关县| 浪卡子县| 克山县| 永泰县| 濉溪县| 明光市| 绥棱县| 东光县| 台南县| 且末县| 巧家县| 临澧县| 隆尧县| 册亨县| 荥阳市| 望江县| 洞口县| 徐州市| 随州市| 乡宁县| 洛扎县| 朝阳区| 习水县| 商河县| 临泽县| 黎川县|