【问题标题】:Hammerjs and React: Detect end of pinch eventHammerjs 和 React:检测夹点事件的结束
【发布时间】:2018-11-08 12:03:18
【问题描述】:

我需要能够检测到捏合事件的“结束”。使用 Hammerjs 似乎应该很容易,但相反我得到了多个捏事件。此外,似乎其中一个夹点事件应该设置event.isFinal 标志,但这并没有发生。

基本的 React 应用结构如下所示

class App extends React.Component {

    state = {   urls: [],
                header:[""] };

    render() {
        return (<div>
                    {this.state.header.map(item => <span>{item}<br/></span>)}
                    <div className="grid" ref={elem => this.gridElement = elem}>
                        {this.state.urls.map(entry => {
                            const fullSizeUrl = imageURL + entry.slice(0,-1-sizeEnding.length) + '.jpg'
                            return (<div className="cell" key={fullSizeUrl}>
                                        <a href={fullSizeUrl}><img src={imageURL + entry} className="responsive-image"/></a>
                                    </div>)
                            })
                        }
                    </div>
                </div>);
    }

    selectSize = urls => {
        return urls.reduce(function (correctSizeUrls, url) {
            if (url.endsWith(sizeEnding)) {
                correctSizeUrls.push(url);
            }
            return correctSizeUrls;
        }, []);
    };

    doLog = ( text, event ) => {
        // this.setState({header: text + '\n' + stringify(event).replace(",","\n")});
        this.setState(state => {
                        const header = text + ':' + event.type + ", " + event.scale+ ", " + event.isFirst + ", " + event.isFinal;
                        let newHeader = this.state.header.slice();
                        console.log(newHeader);
                        newHeader.push(header);
                        return {header: newHeader};
                        }
                    );
    } 

    swipeleft = event => {
        this.doLog("swipeleft", event);
    } 

    swiperight = event => {
        this.doLog("swiperight", event);
    } 

    pinch = event => {
        this.doLog("pinch", event);
    }

    componentDidMount() {
        this.hammer = Hammer(this.gridElement)
        this.hammer.get('pinch').set({ enable: true });
        this.hammer.on("pinch", this.pinch);
        this.hammer.on('swipeleft', this.swipeleft);
        this.hammer.on('swiperight', this.swiperight);
        fetch(url)
            .then(data => data.json())
            .then(data => this.selectSize(data))
            .then(data => this.setState({urls: data}));
    }
}

ReactDOM.render(<App/>, document.getElementById("root"));

header 废话的唯一原因是试图公开这些hammerjs 事件中可用的内容。我正在尝试在移动设备上进行测试,因此使用 console.log 之类的标头可以帮助我了解发生了什么。

【问题讨论】:

    标签: javascript reactjs hammer.js


    【解决方案1】:

    我的错误...我应该注册“pinchEnd”事件。也就是说,我需要换行

        this.hammer.on("pinch", this.pinch);
    

        this.hammer.on("pinchend", this.pinch);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      相关资源
      最近更新 更多