美文网首页前端开发Web 前端开发
纯js实现支持触摸的3D照片墙

纯js实现支持触摸的3D照片墙

作者: gzgogo | 来源:发表于2016-08-05 16:11 被阅读611次

    继上一篇如何用H5实现一个触屏版的轮播器?之后,又写了一个具有3D效果的照片墙,支持触摸操作,在手机上也可以使用。效果如下:

    gallery.PNG

    该组件以两种形式提供,一种以js库形式提供,需要使用者自行拷贝html和css代码;另一种被封装成react组件,使用者只需提供几个属性即可。下面具体介绍两种形式的使用方法。

    js库

    具体可参考github上的示例 3d-touch-gallery

    首先添加样式:

    <link rel="stylesheet" type="text/css" href="lib/gallery.css" />
    

    按照如下格式定义html,item-wrapperitem类是必须的:

    <div id="dg-container" class="dg-container">
      <div class="item-wrapper">
        <a class="item" href="#">&lt;img src="images/1.jpg" alt="image01"&gt;<div>http://www.colazionedamichy.it/</div></a>
        <a class="item" href="#">&lt;img src="images/2.jpg" alt="image02"&gt;<div>http://www.percivalclo.com/</div></a>
        <a class="item" href="#">&lt;img src="images/3.jpg" alt="image03"&gt;<div>http://www.wanda.net/fr</div></a>
        <a class="item" href="#">&lt;img src="images/4.jpg" alt="image04"&gt;<div>http://lifeingreenville.com/</div></a>
        <a class="item" href="#">&lt;img src="images/5.jpg" alt="image05"&gt;<div>http://circlemeetups.com/</div></a>
        <a class="item" href="#">&lt;img src="images/6.jpg" alt="image06"&gt;<div>http://www.castirondesign.com/</div></a>
      </div>
    </div>
    

    引用gallery.js文件:

    <script type="text/javascript" src="lib/gallery.js"></script>
    

    调用createGallery方法,该方法会返回一个对象,该对象提供3个方法:

    • bindTouchEvent():支持触摸
    • prev():翻到前一页
    • next():翻到下一页
    var gallery = createGallery(document.getElementsByClassName('dg-container')[0]);
    gallery.bindTouchEvent(); //调用此函数可支持触摸滑动
    
    var btnPrev = document.getElementsByClassName('dg-prev')[0];
    var btnNext = document.getElementsByClassName('dg-next')[0];
    
    btnPrev.addEventListener('click', function () {
      gallery.prev();
    });
    
    btnNext.addEventListener('click', function () {
      gallery.next();
    });
    

    react组件

    具体可参考github上的示例Touch3DGallery,该示例工程使用脚手架generator-react-web-app生成。

    可向该组件传递三个prop:

    • items:图片数组,数组元素是一个包含imagetext属性的对象
    • touchbool类型,设为true可使组件支持触摸滑动,在手机上使用时需设为true
    • onMountedfunc类型,该回调会回传一个gallery对象给父组件,父组件可通过该对象控制组件的翻页

    具体使用方法如下:

    import React from 'react';
    import Touch3DGallery from '../components/Touch3DGallery/Touch3DGallery';
    
    var items = [
      {
        image: require('../../images/1.jpg'),
        text: 'http://www.percivalclo.com'
      },
      {
        image: require('../../images/2.jpg'),
        text: 'http://www.wanda.net/fr'
      },
      {
        image: require('../../images/3.jpg'),
        text: 'http://lifeingreenville.com'
      },
      {
        image: require('../../images/4.jpg'),
        text: 'http://circlemeetups.com'
      },
      {
        image: require('../../images/5.jpg'),
        text: 'http://www.castirondesign.com'
      },
      {
        image: require('../../images/6.jpg'),
        text: 'http://www.mathiassterner.com/home'
      }
    ];
    
    var App = React.createClass({
      _gallery: null,
    
      render() {
        return (
          <div className="app">
            <div className="gallery-container">
              <Touch3DGallery items={items} onMounted={this.onGalleryMounted} touch={false}/>
            </div>
            <nav>
              <button onClick={this.onPrev}><</button>
              <button onClick={this.onNext}>></button>
            </nav>
          </div>
        );
      },
    
      onGalleryMounted(gallery) {
        this._gallery = gallery;
      },
    
      onPrev() {
        if (this._gallery) {
          this._gallery.prev();
        }
      },
    
      onNext() {
        if (this._gallery) {
          this._gallery.next();
        }
      }
    });
    
    module.exports = App;
    

    相关文章

      网友评论

        本文标题:纯js实现支持触摸的3D照片墙

        本文链接:https://www.haomeiwen.com/subject/siwhsttx.html