From 522c0edd90ce05504f1a58d97b44cc800419c04c Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Sun, 1 Nov 2015 02:37:22 +0900 Subject: [PATCH] =?UTF-8?q?ArticleList=E3=81=AB=E8=87=AA=E5=8B=95scroll?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/main/HomePage.js | 6 +++--- browser/main/HomePage/ArticleDetail.js | 8 ++++++++ browser/main/HomePage/ArticleList.js | 21 +++++++++++++++++++++ 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/browser/main/HomePage.js b/browser/main/HomePage.js index 4aa47847..00f11dc1 100644 --- a/browser/main/HomePage.js +++ b/browser/main/HomePage.js @@ -18,12 +18,12 @@ class HomePage extends React.Component { componentDidMount () { // React自体のKey入力はfocusされていないElementからは動かないため、 // `window`に直接かける - this.listener = (e) => this.handleKeyDown(e) - window.addEventListener('keydown', this.listener) + this.keyHandler = e => this.handleKeyDown(e) + window.addEventListener('keydown', this.keyHandler) } componentWillUnmount () { - window.removeEventListener('keydown', this.listener) + window.removeEventListener('keydown', this.keyHandler) } handleKeyDown (e) { diff --git a/browser/main/HomePage/ArticleDetail.js b/browser/main/HomePage/ArticleDetail.js index 7803803d..ae2a6acd 100644 --- a/browser/main/HomePage/ArticleDetail.js +++ b/browser/main/HomePage/ArticleDetail.js @@ -33,6 +33,14 @@ export default class ArticleDetail extends React.Component { } } + componentDidMount () { + this.refreshTimer = setInterval(() => this.forceUpdate(), 60 * 1000) + } + + componentWillUnmount () { + clearInterval(this.refreshTimer) + } + componentDidUpdate (prevProps) { let isModeChanged = prevProps.status.mode !== this.props.status.mode if (isModeChanged && this.props.status.mode !== IDLE_MODE) { diff --git a/browser/main/HomePage/ArticleList.js b/browser/main/HomePage/ArticleList.js index cc81423e..5232ca79 100644 --- a/browser/main/HomePage/ArticleList.js +++ b/browser/main/HomePage/ArticleList.js @@ -1,4 +1,5 @@ import React, { PropTypes } from 'react' +import ReactDOM from 'react-dom' import ModeIcon from 'boost/components/ModeIcon' import moment from 'moment' import { switchArticle, NEW } from 'boost/actions' @@ -15,6 +16,26 @@ export default class ArticleList extends React.Component { clearInterval(this.refreshTimer) } + componentDidUpdate () { + let { articles, activeArticle } = this.props + var index = articles.indexOf(activeArticle) + var el = ReactDOM.findDOMNode(this) + var li = el.querySelectorAll('.ArticleList>div')[index] + + if (li == null) { + return + } + + var overflowBelow = el.clientHeight + el.scrollTop < li.offsetTop + li.clientHeight + if (overflowBelow) { + el.scrollTop = li.offsetTop + li.clientHeight - el.clientHeight + } + var overflowAbove = el.scrollTop > li.offsetTop + if (overflowAbove) { + el.scrollTop = li.offsetTop + } + } + // 移動ができなかったらfalseを返す: selectPriorArticle () { let { articles, activeArticle, dispatch } = this.props