郭元民 發表於 2020-5-15 16:30:00

React+Taro开发小程序实现左滑喜欢右滑不喜欢效果

<p><span style="font-size: 16px">序言:</span></p>
<p>&nbsp; &nbsp; &nbsp; 年后入职了一家新公司,与前同事交接完之后,发现公司有一个四端的项目(iOS,Android,H5,小程序),iOS和安卓都实现了左滑右滑的效果,而h5和小程序端没实现,询问得知前同事因网上没找到对应的插件相关博客也比较少,加上公司任务比较紧,所以没做就搁置下来了。</p>
<p>&nbsp; &nbsp; &nbsp; 利用闲暇时间,于是乎在网上也搜索了一下,发现相关博客确实很少,但是有人提到可以用小程序可拖动组件<span style="color: rgba(255, 102, 0, 1)"><span style="color: rgba(255, 102, 0, 1)">movable-view</span></span>来实现,自己尝试来一下发现可行,于是来写这篇博客记录一下,希望能帮助到后面需要用到这个功能的人!</p>
<p>&nbsp;</p>
<p><span style="font-size: 14pt">第一种实现方式:</span></p>
<p><span style="color: rgba(0, 0, 255, 1)">先上效果图:</span><span style="color: rgba(0, 0, 0, 1)">展示了<span style="color: rgba(0, 128, 0, 1)">左滑</span>,<span style="color: rgba(0, 128, 0, 1)">右滑</span>,<span style="color: rgba(0, 128, 0, 1)">点击喜欢按钮</span>,<span style="color: rgba(0, 128, 0, 1)">不喜欢按钮</span>分别的效果;</span></p>
<p><img src="https://img2020.cnblogs.com/blog/1244003/202009/1244003-20200930104944763-1663967157.gif"></p>
<p>&nbsp;</p>
<p><span style="font-size: 15px"><span style="color: rgba(0, 0, 255, 1)">主要技术</span>:</span><span style="color: rgba(0, 128, 128, 1)">Taro</span>+<span style="color: rgba(0, 128, 128, 1)">Taro UI</span>+<span style="color: rgba(0, 128, 128, 1)">React</span>(如果你是小程序原生或者uniapp+vue写法都差不多,可以通用)</p>
<p><span style="font-size: 15px; color: rgba(0, 0, 255, 1)">可拖动组件文档地址:</span></p>
<p><span style="color: rgba(0, 128, 0, 1)">Taro</span>:&nbsp; &nbsp; &nbsp;https://taro-docs.jd.com/taro/docs/components/viewContainer/movable-view.html</p>
<p><span style="color: rgba(0, 128, 0, 1)">微信小程序</span>:&nbsp; &nbsp;&nbsp;https://developers.weixin.qq.com/miniprogram/dev/component/movable-view.html</p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; color: rgba(0, 0, 255, 1)">思路:</span></p>
<p><span style="font-size: 15px"><span style="color: rgba(255, 102, 0, 1)">一</span>,我们首先把<span style="color: rgba(0, 128, 0, 1)">movable-area</span>和<span style="color: rgba(0, 128, 0, 1)">movable-view</span>标签写出来;</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">movable-area</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">movable-view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
       ......
    </span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">movable-view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">movable-area</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p><span style="font-size: 15px"><span style="color: rgba(255, 102, 0, 1)">二</span>,我们可以看到文档里面有一个<span style="color: rgba(0, 128, 0, 1)">onChange</span>方法,即拖动过程中触发的事件;</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">movable-area</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">movable-view </span><span style="color: rgba(255, 0, 0, 1)">onChange </span><span style="color: rgba(0, 0, 255, 1)">={this. </span><span style="color: rgba(255, 0, 0, 1)">onChange.bind(this)}</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
       ......
    </span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">movable-view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">movable-area</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 0, 255, 1)">

// 触发方法,打印参数</span>
<span style="color: rgba(0, 128, 0, 1)">onChange(e)</span> {
   <span style="color: rgba(0, 128, 0, 1)">console</span>.log('参数',e);
}</span></pre>
</div>
<p>我们可以看到打印出了,<span style="color: rgba(0, 128, 0, 1)">拖动的位置</span>和<span style="color: rgba(0, 128, 0, 1)">产生移动的原因等</span>;</p>
<p><span style="font-size: 15px"><span style="color: rgba(255, 102, 0, 1)">三</span>,我们接着加入开始<span style="color: rgba(0, 128, 0, 1)">onTouchstart</span>,移动<span style="color: rgba(0, 128, 0, 1)">onTouchmove</span>,结束<span style="color: rgba(0, 128, 0, 1)">onTouchcancel,onTouchend</span>三个事件方法;</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">MovableView
</span><span style="color: rgba(255, 0, 0, 1)">key</span><span style="color: rgba(0, 0, 255, 1)">={item.id}
</span><span style="color: rgba(255, 0, 0, 1)">onTouchcancel</span><span style="color: rgba(0, 0, 255, 1)">={this.onCancel}
</span><span style="color: rgba(255, 0, 0, 1)">onTouchend</span><span style="color: rgba(0, 0, 255, 1)">={this.onCancel}
</span><span style="color: rgba(255, 0, 0, 1)">onTouchstart</span><span style="color: rgba(0, 0, 255, 1)">={this.onTouchStart}
</span><span style="color: rgba(255, 0, 0, 1)">onTouchmove</span><span style="color: rgba(0, 0, 255, 1)">={this.onTouchMove}
</span><span style="color: rgba(255, 0, 0, 1)">x</span><span style="color: rgba(0, 0, 255, 1)">={this.state.x}</span><span style="color: rgba(255, 0, 0, 1)">// 横坐标位置
y</span><span style="color: rgba(0, 0, 255, 1)">={this.state.y}</span><span style="color: rgba(255, 0, 0, 1)">// 纵坐标位置
direction</span><span style="color: rgba(0, 0, 255, 1)">='all'</span><span style="color: rgba(255, 0, 0, 1)">// 移动方向都可以
outOfBounds// 可超过可移动区域
className</span><span style="color: rgba(0, 0, 255, 1)">='shop-imgbox'
</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">--</span><span style="color: rgba(255, 0, 0, 1)">中间加入图片之类的滑动内容--</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">MovableView</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                  </pre>
</div>
<p>初始数据如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">state</span> =<span style="color: rgba(0, 0, 0, 1)"> {
    <span style="color: rgba(0, 128, 0, 1)">x</span>: </span>'16'<span style="color: rgba(0, 0, 0, 1)">,
    <span style="color: rgba(0, 128, 0, 1)">y</span>: </span>'16'<span style="color: rgba(0, 0, 0, 1)">,
    <span style="color: rgba(0, 128, 0, 1)">like</span>: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
    <span style="color: rgba(0, 128, 0, 1)">unlike</span>: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
    <span style="color: rgba(0, 128, 0, 1)">shopList</span>: [
      {
      <span style="color: rgba(0, 128, 0, 1)">img</span>: </span>'https://edgefix-image.edgecom.top/ABD846F6672997A7F76CD38E8A57F954.jpg'<span style="color: rgba(0, 0, 0, 1)">,
      },
      {
      <span style="color: rgba(0, 128, 0, 1)">img</span>: </span>'https://edgefix-image.edgecom.top/F6E5801C304CC76DA63C02C9FB38B8F4.jpg'<span style="color: rgba(0, 0, 0, 1)">,
      },
      {
      <span style="color: rgba(0, 128, 0, 1)">img</span>: </span>'https://edgefix-image.edgecom.top/D518952AD1DD61B2D32556E20CC527C4.jpg'<span style="color: rgba(0, 0, 0, 1)">,
      },
      {
      <span style="color: rgba(0, 128, 0, 1)">img</span>: </span>'https://edgefix-image.edgecom.top/1D187E28B349679908A44BBE81F3D3CA.jpg'<span style="color: rgba(0, 0, 0, 1)">,
      },
      {
      <span style="color: rgba(0, 128, 0, 1)">img</span>: </span>'https://edgefix-image.edgecom.top/1129A411AC9CF5F81187CBED181B6F57.jpg'<span style="color: rgba(0, 0, 0, 1)">,
      }
    ]
} </span></pre>
</div>
<p>三个方法我们可以取到移动后改变的位置,来改变喜欢与不喜欢的状态css,以及实现卡片滑动的效果:</p>
<p><span style="color: rgba(0, 128, 0, 1)">1.&nbsp;</span>触摸触发的时候,我们<span style="color: rgba(0, 0, 255, 1)">获取到刚刚开始触摸卡片的x,y的位置坐标</span>;</p>
<p><span style="color: rgba(0, 128, 0, 1)">2.&nbsp;</span>在触摸滑动时,我们通过<span style="color: rgba(0, 0, 255, 1)">滑动后的位置-滑动前的位置</span>,来<span style="color: rgba(0, 0, 255, 1)">判断距离多少来改变喜欢和不喜欢的值</span>;</p>
<p><span style="color: rgba(0, 128, 0, 1)">3.&nbsp;</span>当手离开时,触发取消事件,我们需要<span style="color: rgba(0, 0, 255, 1)">把状态数据改为原始值</span>,即回到最初的状态;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 触摸触发 </span>
<span style="color: rgba(0, 0, 0, 1)">onTouchStart(e) {
    console.log(</span>'222',e.touches.pageX);
    </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
      x: e.touches[</span>0<span style="color: rgba(0, 0, 0, 1)">].pageX,
      y: e.touches[</span>0<span style="color: rgba(0, 0, 0, 1)">].pageY,
    });
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 触摸移动 </span>
<span style="color: rgba(0, 0, 0, 1)">onTouchMove(e) {
    console.log(</span>'333',e.touches.pageX);
    let dx </span>= e.touches.pageX - <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.x;
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (dx &gt; 50<span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
      like: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
      unlike: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
      });
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (dx &lt; -50<span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
      like: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
      unlike: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
      });
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
      like: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
      unlike: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
      });
    }
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 取消 </span>
<span style="color: rgba(0, 0, 0, 1)">onCancel(e) {
    console.log(</span>'444',e.changedTouches.pageX);
    </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
      x: </span>'16'<span style="color: rgba(0, 0, 0, 1)">,
      y: </span>'16'<span style="color: rgba(0, 0, 0, 1)">,
      like: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
      unlike: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">, </span><span style="color: rgba(0, 0, 0, 1)">
    });
} </span></pre>
</div>
<p>当我们写到这里,我们去拖动我们的卡片时,你会发现确实可以拖动,并且取消的时候会回到原点,但是同样你也会发现一个问题,就是你拖动的时候,五张卡片都被触发来移动的效果,出现了<span style="color: rgba(0, 128, 0, 1)">触点混乱</span>的问题,查找问题发现卡片共用了x,y,因此我们可以给<span style="color: rgba(0, 128, 0, 1)">每张卡片设置独立的参数</span>;</p>
<p><span style="font-size: 15px"><span style="color: rgba(255, 102, 0, 1)">四</span>,给每张卡片独立的参数并且设置卡片倾斜度效果;</span></p>
<p><span style="font-size: 15px">1.设置倾斜度效果</span></p>
<div class="cnblogs_code">
<pre>style={{transform:'rotate('+<span style="color: rgba(0, 0, 255, 1)">this</span>.state.tiltAngle+'deg)'}}</pre>
</div>
<p>然后我们通过卡片移动位置计算出一个你决定合适的倾斜角度;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 拖动后相差距离进行换算角度</span>
let dxangle = (e.touches.pageX - <span style="color: rgba(0, 0, 255, 1)">this</span>.state.startX) * 45 / 500;</pre>
</div>
<p><span style="font-size: 15px">2.设置独立的参数</span></p>
<p>方法携带索引,我们取到对应的卡片index,来改变对应卡片的数据;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">MovableView
</span><span style="color: rgba(255, 0, 0, 1)">key</span><span style="color: rgba(0, 0, 255, 1)">={item.id}
</span><span style="color: rgba(255, 0, 0, 1)">onTouchcancel</span><span style="color: rgba(0, 0, 255, 1)">={this.onCancel.bind(this,index)}
</span><span style="color: rgba(255, 0, 0, 1)">onTouchend</span><span style="color: rgba(0, 0, 255, 1)">={this.onCancel.bind(this,index)}
</span><span style="color: rgba(255, 0, 0, 1)">onTouchstart</span><span style="color: rgba(0, 0, 255, 1)">={this.onTouchStart.bind(this,index)}
</span><span style="color: rgba(255, 0, 0, 1)">onTouchmove</span><span style="color: rgba(0, 0, 255, 1)">={this.onTouchMove.bind(this,index)}
</span><span style="color: rgba(255, 0, 0, 1)">x</span><span style="color: rgba(0, 0, 255, 1)">={this.state.x}
</span><span style="color: rgba(255, 0, 0, 1)">y</span><span style="color: rgba(0, 0, 255, 1)">={this.state.y}
</span><span style="color: rgba(255, 0, 0, 1)">direction</span><span style="color: rgba(0, 0, 255, 1)">='all'
</span><span style="color: rgba(255, 0, 0, 1)">outOfBounds
className</span><span style="color: rgba(0, 0, 255, 1)">='shop-imgbox'
</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">MovableView</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p>同时,我们需要改变初始参数的形式为数组,我们通过索引改变对应卡片的值;</p>
<div class="cnblogs_code">
<pre>state =<span style="color: rgba(0, 0, 0, 1)"> {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 开始位置</span>
    startX: ''<span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 开始位置-最终位置距离</span>
    placeX: ''<span style="color: rgba(0, 0, 0, 1)">,
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 倾斜角度</span>
    tiltAngle: ['0','0','0','0','0'<span style="color: rgba(0, 0, 0, 1)">],
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 坐标</span>
    x: ['16','16','16','16','16'<span style="color: rgba(0, 0, 0, 1)">],
    y: [</span>'16','16','16','16','16'<span style="color: rgba(0, 0, 0, 1)">],
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 是否喜欢状态</span>
    like: [<span style="color: rgba(0, 0, 255, 1)">false</span>,<span style="color: rgba(0, 0, 255, 1)">false</span>,<span style="color: rgba(0, 0, 255, 1)">false</span>,<span style="color: rgba(0, 0, 255, 1)">false</span>,<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">],
    unlike: [</span><span style="color: rgba(0, 0, 255, 1)">false</span>,<span style="color: rgba(0, 0, 255, 1)">false</span>,<span style="color: rgba(0, 0, 255, 1)">false</span>,<span style="color: rgba(0, 0, 255, 1)">false</span>,<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">],
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 推荐商品数组</span>
<span style="color: rgba(0, 0, 0, 1)">    shopList: [
      {
      id: </span>1<span style="color: rgba(0, 0, 0, 1)">,
      img: </span>'https://edgefix-image.edgecom.top/ABD846F6672997A7F76CD38E8A57F954.jpg'<span style="color: rgba(0, 0, 0, 1)">,
      },
      {
      id: </span>2<span style="color: rgba(0, 0, 0, 1)">,
      img: </span>'https://edgefix-image.edgecom.top/F6E5801C304CC76DA63C02C9FB38B8F4.jpg'<span style="color: rgba(0, 0, 0, 1)">,
      },
      {
      id: </span>3<span style="color: rgba(0, 0, 0, 1)">,
      img: </span>'https://edgefix-image.edgecom.top/D518952AD1DD61B2D32556E20CC527C4.jpg'<span style="color: rgba(0, 0, 0, 1)">,
      },
      {
      id: </span>4<span style="color: rgba(0, 0, 0, 1)">,
      img: </span>'https://edgefix-image.edgecom.top/1D187E28B349679908A44BBE81F3D3CA.jpg'<span style="color: rgba(0, 0, 0, 1)">,
      },
      {
      id: </span>5<span style="color: rgba(0, 0, 0, 1)">,
      img: </span>'https://edgefix-image.edgecom.top/1129A411AC9CF5F81187CBED181B6F57.jpg'<span style="color: rgba(0, 0, 0, 1)">,
      }
    ]
}</span></pre>
</div>
<p>方法我们就举一个例子,比如<span style="color: rgba(0, 128, 0, 1)">onTouchStart</span>方法,我们遍历卡片数组,通过判断索引来得到是那张卡片,从而来改变对应值</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 触摸触发</span>
<span style="color: rgba(0, 0, 0, 1)">onTouchStart(index,e) {
    console.log(</span>'1111',index,e.touches.pageX,e.touches.pageY);
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 重定义数组</span>
    <span style="color: rgba(0, 0, 255, 1)">var</span> againX =<span style="color: rgba(0, 0, 0, 1)"> [];
    </span><span style="color: rgba(0, 0, 255, 1)">var</span> againY =<span style="color: rgba(0, 0, 0, 1)"> [];
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 遍历,判断拖动的该数组的位置</span>
    <span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> i=0; i&lt;<span style="color: rgba(0, 0, 255, 1)">this</span>.state.shopList.length; i++<span style="color: rgba(0, 0, 0, 1)">){
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (i ==<span style="color: rgba(0, 0, 0, 1)"> index) {
      againX </span>= e.touches.pageX;
      againY </span>= e.touches.pageY;
      } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
      againX </span>= '16'<span style="color: rgba(0, 0, 0, 1)">;
      againY </span>= '16'<span style="color: rgba(0, 0, 0, 1)">;
      }
    }
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 赋值</span>
    <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
      startX: e.touches[</span>0<span style="color: rgba(0, 0, 0, 1)">].pageX,
      x: againX,
      y: againY,
    });
}</span></pre>
</div>
<p>这样,我们运行代码,发现拖动第一张卡片不会影响到后面卡片的位置了,</p>
<p>同时,我们现在拖动卡片删除的是数组,在实际项目中,我们在触发删除数组的地方接入接口,调用喜欢,不喜欢改变数据参数,从而也能改变数组的长度;</p>
<p><span style="font-size: 15px"><span style="color: rgba(255, 102, 0, 1)">五</span>,完整代码;</span></p>
<p><span style="color: rgba(0, 128, 0, 1)">下面我将贴出完整的代码供大家参考</span></p>
<p><span style="color: rgba(0, 128, 0, 1)">html文件:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 128, 0, 1)">import</span> Taro, { Component } from '@tarojs/taro';
<span style="color: rgba(0, 128, 0, 1)">import</span> { View, Image, Button, Text, MovableArea, MovableView } from '@tarojs/components';
<span style="color: rgba(0, 128, 0, 1)">import</span> { observer, inject } from '@tarojs/mobx';
<span style="color: rgba(0, 128, 0, 1)">import</span> { AtButton, AtFloatLayout} from 'taro-ui';
<span style="color: rgba(0, 128, 0, 1)">import</span> userStore from '../../store/user.store';

<span style="color: rgba(0, 128, 0, 1)">import</span> './stroll.scss';

@inject('userStore')
@observer
class <span style="color: rgba(0, 128, 0, 1)">Stroll</span> extends Component {
config = {
    navigationBarTitleText: '逛',
}

state = {
    <span style="color: rgba(0, 128, 0, 1)">// 开始位置</span>
    <span style="color: rgba(0, 128, 0, 1)">startX</span>: '',
    <span style="color: rgba(0, 128, 0, 1)">// 开始位置-最终位置距离</span>
    <span style="color: rgba(0, 128, 0, 1)">placeX</span>: '',
    <span style="color: rgba(0, 128, 0, 1)">// 倾斜角度</span>
    <span style="color: rgba(0, 128, 0, 1)">tiltAngle</span>: ['0','0','0','0','0'],
    <span style="color: rgba(0, 128, 0, 1)">// 坐标</span>
    <span style="color: rgba(0, 128, 0, 1)">x</span>: ['16','16','16','16','16'],
    <span style="color: rgba(0, 128, 0, 1)">y</span>: ['16','16','16','16','16'],
    <span style="color: rgba(0, 128, 0, 1)">// 是否喜欢状态</span>
    <span style="color: rgba(0, 128, 0, 1)">like</span>: ,
    <span style="color: rgba(0, 128, 0, 1)">unlike</span>: ,
    <span style="color: rgba(0, 128, 0, 1)">// 推荐商品数组</span>
    <span style="color: rgba(0, 128, 0, 1)">shopList</span>: [
      {
      id: 1,
      img: 'https://edgefix-image.edgecom.top/ABD846F6672997A7F76CD38E8A57F954.jpg',
      },
      {
      id: 2,
      img: 'https://edgefix-image.edgecom.top/F6E5801C304CC76DA63C02C9FB38B8F4.jpg',
      },
      {
      id: 3,
      img: 'https://edgefix-image.edgecom.top/D518952AD1DD61B2D32556E20CC527C4.jpg',
      },
      {
      id: 4,
      img: 'https://edgefix-image.edgecom.top/1D187E28B349679908A44BBE81F3D3CA.jpg',
      },
      {
      id: 5,
      img: 'https://edgefix-image.edgecom.top/1129A411AC9CF5F81187CBED181B6F57.jpg',
      }
    ]
}

<span style="color: rgba(0, 0, 255, 1)">componentWillMount</span> () { }

<span style="color: rgba(0, 0, 255, 1)">componentWillReact</span> () { }

<span style="color: rgba(0, 0, 255, 1)">componentDidMount</span> () {
}

<span style="color: rgba(0, 128, 0, 1)">// 触摸触发</span>
<span style="color: rgba(0, 0, 255, 1)">onTouchStart</span>(index,e) {
    console.log('1111',index,e.touches.pageX,e.touches.pageY);
    <span style="color: rgba(0, 128, 0, 1)">// 重定义数组</span>
    <span style="color: rgba(0, 0, 255, 1)">var</span> againX = [];
    <span style="color: rgba(0, 0, 255, 1)">var</span> againY = [];
    <span style="color: rgba(0, 128, 0, 1)">// 遍历,判断拖动的该数组的位置</span>
    for (var i=0; i</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">this</span><span style="color: rgba(255, 0, 0, 1)">.state.shopList.length; i++){
      if (i </span><span style="color: rgba(0, 0, 255, 1)">== </span><span style="color: rgba(255, 0, 0, 1)">index) {
      againX </span><span style="color: rgba(0, 0, 255, 1)">= e.touches.pageX;
      </span><span style="color: rgba(255, 0, 0, 1)">againY </span><span style="color: rgba(0, 0, 255, 1)">= e.touches.pageY;
      </span><span style="color: rgba(255, 0, 0, 1)">} else {
      againX </span><span style="color: rgba(0, 0, 255, 1)">= '16';
      </span><span style="color: rgba(255, 0, 0, 1)">againY </span><span style="color: rgba(0, 0, 255, 1)">= '16';
      </span><span style="color: rgba(255, 0, 0, 1)">}
    }
    // 赋值
    this.setState({
      startX: e.touches.pageX,
      x: againX,
      y: againY,
    });
}
// 触摸离开
onTouchMove(index,e) {
    console.log('2222',index,e.touches.pageX,e.touches.pageY);
    // 重定义数组
    var tiltAngleT </span><span style="color: rgba(0, 0, 255, 1)">= [];
    </span><span style="color: rgba(255, 0, 0, 1)">var againX </span><span style="color: rgba(0, 0, 255, 1)">= [];
    </span><span style="color: rgba(255, 0, 0, 1)">var againY </span><span style="color: rgba(0, 0, 255, 1)">= [];
    </span><span style="color: rgba(255, 0, 0, 1)">// 拖动后相差距离
    let dxplace </span><span style="color: rgba(0, 0, 255, 1)">= e.touches.pageX </span><span style="color: rgba(255, 0, 0, 1)">- this.state.startX;
    // 拖动后相差距离进行换算角度
    let dxangle </span><span style="color: rgba(0, 0, 255, 1)">= (e.touches.pageX </span><span style="color: rgba(255, 0, 0, 1)">- this.state.startX) * 45 / 500;
    console.log(dxangle);
    // 遍历,判断拖动的该数组的位置
    for (var i</span><span style="color: rgba(0, 0, 255, 1)">=0; </span><span style="color: rgba(255, 0, 0, 1)">i&lt;this.state.shopList.length; i++){
      if (i </span><span style="color: rgba(0, 0, 255, 1)">== </span><span style="color: rgba(255, 0, 0, 1)">index &amp;&amp; dxplace </span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)"> 50) {
      tiltAngleT = dxangle,
      againX = true;
      againY = false;
      } else if (i == index &amp;&amp; dxplace </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">= -50</span><span style="color: rgba(255, 0, 0, 1)">) {
      tiltAngleT </span><span style="color: rgba(0, 0, 255, 1)">= dxangle,
      </span><span style="color: rgba(255, 0, 0, 1)">againX </span><span style="color: rgba(0, 0, 255, 1)">= false;
      </span><span style="color: rgba(255, 0, 0, 1)">againY </span><span style="color: rgba(0, 0, 255, 1)">= true;
      </span><span style="color: rgba(255, 0, 0, 1)">} else if (i </span><span style="color: rgba(0, 0, 255, 1)">== </span><span style="color: rgba(255, 0, 0, 1)">index &amp;&amp; dxplace &lt; 50 &amp;&amp; dxplace </span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)"> -50) {
      tiltAngleT = dxangle,
      againX = false;
      againY = false;
      } else {
      tiltAngleT = '0',
      againX = false;
      againY = false;
      }
    }
    <span style="color: rgba(0, 128, 0, 1)">// 赋值</span>
    <span style="color: rgba(0, 0, 255, 1)">this</span>.setState({
      placeX: dxplace,
      tiltAngle: tiltAngleT,
      like: againX,
      unlike: againY,
    });
}
<span style="color: rgba(0, 128, 0, 1)">// 取消</span>
<span style="color: rgba(0, 0, 255, 1)">onCancel</span>(index,e) {
    console.log('3333',index,e.changedTouches.pageX,e.changedTouches.pageY);
    <span style="color: rgba(0, 128, 0, 1)">// 赋值</span>
    <span style="color: rgba(0, 0, 255, 1)">this</span>.setState({
      tiltAngle: ['0','0','0','0','0'],
      x: ['16','16','16','16','16'],
      y: ['16','16','16','16','16'],
      like: ,
      unlike: ,
    });
    <span style="color: rgba(0, 128, 0, 1)">// 如果偏移已经达到则清除第一张图片</span>
    if (this.state.placeX &gt; 50 || this.state.placeX </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)"> -50</span><span style="color: rgba(255, 0, 0, 1)">) {
      this.setState({
      shopList: this.state.shopList.splice(1,4),
      });
    }
}
<span style="color: rgba(0, 128, 0, 1)">// 不喜欢按钮点击</span>
dislikebtn() {
    <span style="color: rgba(0, 128, 0, 1)">// 改变按钮的状态以及图片位置及显示</span>
    this.setState({
      tiltAngle: ['-18','0','0','0','0'],
      x: ['-30','16','16','16','16'],
      y: ['267','16','16','16','16'],
      unlike: ,
    }, () </span><span style="color: rgba(0, 0, 255, 1)">=</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)"> {
      setTimeout( () =&gt; {
      <span style="color: rgba(0, 0, 255, 1)">this</span>.setState({
          tiltAngle: ['0','0','0','0','0'],
          x: ['16','16','16','16','16'],
          y: ['16','16','16','16','16'],
          unlike: ,
          shopList: this.state.shopList.splice(1,4),
      });
      },100);
    });
}
<span style="color: rgba(0, 128, 0, 1)">// 喜欢按钮点击</span>
<span style="color: rgba(0, 0, 255, 1)">likebtn</span>() {
    <span style="color: rgba(0, 128, 0, 1)">// 改变按钮的状态以及图片位置及显示</span>
    <span style="color: rgba(0, 0, 255, 1)">this</span>.setState({
      tiltAngle: ['18','0','0','0','0'],
      x: ['284','16','16','16','16'],
      y: ['267','16','16','16','16'],
      like: ,
    }, () =&gt; {
      setTimeout( () =&gt; {
      this.setState({
          tiltAngle: ['0','0','0','0','0'],
          x: ['16','16','16','16','16'],
          y: ['16','16','16','16','16'],
          like: ,
          shopList: this.state.shopList.splice(1,4),
      });
      },100);
    });
}

<span style="color: rgba(0, 0, 255, 1)">componentWillUnmount</span> () { }

<span style="color: rgba(0, 0, 255, 1)">componentDidShow</span> () {
}

<span style="color: rgba(0, 0, 255, 1)">componentDidHide</span> () { }

<span style="color: rgba(0, 0, 255, 1)">render</span>() {
    return (
      </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='stroll-tab'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='stroll-text'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
          <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Text </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='text-tip1'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>搭配师每天为你推荐5件单品<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
          <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='text-tip2'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Text </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='t1'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>右滑喜欢<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/ic_like.png')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='icon-image'</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Text </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='t1'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>,左滑不喜欢<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/ic_dislike.png')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='icon-image'</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
          <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
      {
          this.state.shopList.length != 0&amp;&amp;
          </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">MovableArea </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='stroll-shop'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
            {
            this.state.shopList&amp;</span><span style="color: rgba(255, 0, 0, 1)">&amp;this</span><span style="color: rgba(0, 0, 0, 1)">.state.shopList.map((item,index) =&gt; {
            return(
                </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">MovableView
                  </span><span style="color: rgba(255, 0, 0, 1)">key</span><span style="color: rgba(0, 0, 255, 1)">={item.id}
                  </span><span style="color: rgba(255, 0, 0, 1)">onTouchcancel</span><span style="color: rgba(0, 0, 255, 1)">={this.onCancel.bind(this,index)}
                  </span><span style="color: rgba(255, 0, 0, 1)">onTouchend</span><span style="color: rgba(0, 0, 255, 1)">={this.onCancel.bind(this,index)}
                  </span><span style="color: rgba(255, 0, 0, 1)">onTouchstart</span><span style="color: rgba(0, 0, 255, 1)">={this.onTouchStart.bind(this,index)}
                  </span><span style="color: rgba(255, 0, 0, 1)">onTouchmove</span><span style="color: rgba(0, 0, 255, 1)">={this.onTouchMove.bind(this,index)}
                  </span><span style="color: rgba(255, 0, 0, 1)">x</span><span style="color: rgba(0, 0, 255, 1)">={this.state.x}
                  </span><span style="color: rgba(255, 0, 0, 1)">y</span><span style="color: rgba(0, 0, 255, 1)">={this.state.y}
                  </span><span style="color: rgba(255, 0, 0, 1)">direction</span><span style="color: rgba(0, 0, 255, 1)">='all'
                  </span><span style="color: rgba(255, 0, 0, 1)">outOfBounds
                  className</span><span style="color: rgba(0, 0, 255, 1)">='shop-imgbox'
                </span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                  <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='images-box' </span><span style="color: rgba(255, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">={{transform:'rotate('+this.state.tiltAngle+'deg)'}}</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                  <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={item.img} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='images'</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
                  {
                      this.state.like==true&amp;&amp;
                      </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/text_like.png')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='imagelike'</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
                  }
                  {
                      this.state.unlike==true&amp;&amp;
                      </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/text_dislike.png')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='imageunlike'</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
                  }
                  </span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">MovableView</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
            );})
            }
          </span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">MovableArea</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
      }
      {
          this.state.shopList.length === 0&amp;&amp;
          </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='noshop-card'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/noshop.png')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='noshop-image'</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
          <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
      }
      </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='stroll-fotter'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
          {
            this.state.shopList.length != 0&amp;&amp;
            </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='fot-twoimg'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
            {
                this.state.unlike==false&amp;&amp;
                </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/dislike_default.png')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='dislike-image' </span><span style="color: rgba(255, 0, 0, 1)">onClick</span><span style="color: rgba(0, 0, 255, 1)">={this.dislikebtn.bind(this)}</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
            }
            {
                this.state.unlike==true&amp;&amp;
                </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/dislike_click.png')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='dislike-image'</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
            }
            {
                this.state.like==false&amp;&amp;
                </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/like_default.png')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='like-image' </span><span style="color: rgba(255, 0, 0, 1)">onClick</span><span style="color: rgba(0, 0, 255, 1)">={this.likebtn.bind(this)}</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
            }
            {
                this.state.like==true&amp;&amp;
                </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/like_click.png')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='like-image'</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
            }
            </span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
          }
          </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Text </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='fot-text'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>查看我喜欢的<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
    );
}
}

<span style="color: rgba(0, 0, 255, 1)">export</span> default Stroll;</span></pre>
</div>
<p><span style="color: rgba(0, 128, 0, 1)">css文件:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">page </span>{<span style="color: rgba(255, 0, 0, 1)">
height</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
background</span>:<span style="color: rgba(0, 0, 255, 1)"> #F6F6F6</span>;
}<span style="color: rgba(128, 0, 0, 1)">

.stroll-tab </span>{<span style="color: rgba(255, 0, 0, 1)">
width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
min-height</span>:<span style="color: rgba(0, 0, 255, 1)"> 100vh</span>;<span style="color: rgba(255, 0, 0, 1)">
background</span>:<span style="color: rgba(0, 0, 255, 1)"> #F6F6F6</span>;<span style="color: rgba(255, 0, 0, 1)">
.stroll-text {
    width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
    margin-top</span>:<span style="color: rgba(0, 0, 255, 1)"> 40px</span>;<span style="color: rgba(255, 0, 0, 1)">
    display</span>:<span style="color: rgba(0, 0, 255, 1)"> flex</span>;<span style="color: rgba(255, 0, 0, 1)">
    flex-direction</span>:<span style="color: rgba(0, 0, 255, 1)"> column</span>;<span style="color: rgba(255, 0, 0, 1)">
    align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
    .text-tip1 {
      font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 28px</span>;<span style="color: rgba(255, 0, 0, 1)">
      color</span>:<span style="color: rgba(0, 0, 255, 1)"> #333333</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
    .text-tip2 </span>{<span style="color: rgba(255, 0, 0, 1)">
      display</span>:<span style="color: rgba(0, 0, 255, 1)"> flex</span>;<span style="color: rgba(255, 0, 0, 1)">
      flex-direction</span>:<span style="color: rgba(0, 0, 255, 1)"> row</span>;<span style="color: rgba(255, 0, 0, 1)">
      align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
      .t1 {
      font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 28px</span>;<span style="color: rgba(255, 0, 0, 1)">
      color</span>:<span style="color: rgba(0, 0, 255, 1)"> #333333</span>;
      }<span style="color: rgba(128, 0, 0, 1)">
      .icon-image </span>{<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)">20px</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)">20px</span>;
      }<span style="color: rgba(128, 0, 0, 1)">
    }
}
.stroll-shop </span>{<span style="color: rgba(255, 0, 0, 1)">
    width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
    height</span>:<span style="color: rgba(0, 0, 255, 1)"> 700px</span>;<span style="color: rgba(255, 0, 0, 1)">
    margin-top</span>:<span style="color: rgba(0, 0, 255, 1)"> 40px</span>;<span style="color: rgba(255, 0, 0, 1)">
    .shop-imgbox {
      height</span>:<span style="color: rgba(0, 0, 255, 1)"> 600px</span>;<span style="color: rgba(255, 0, 0, 1)">
      border-radius</span>:<span style="color: rgba(0, 0, 255, 1)"> 24px</span>;<span style="color: rgba(255, 0, 0, 1)">
      .images-box {
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)"> 520px</span>;<span style="color: rgba(255, 0, 0, 1)">
      border-radius</span>:<span style="color: rgba(0, 0, 255, 1)"> 24px</span>;<span style="color: rgba(255, 0, 0, 1)">
      box-shadow</span>:<span style="color: rgba(0, 0, 255, 1)"> 0px 2px 5px 0px rgba(0,0,0,0.1)</span>;<span style="color: rgba(255, 0, 0, 1)">
      background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #fff</span>;<span style="color: rgba(255, 0, 0, 1)">
      position</span>:<span style="color: rgba(0, 0, 255, 1)"> relative</span>;<span style="color: rgba(255, 0, 0, 1)">
      .images {
          width</span>:<span style="color: rgba(0, 0, 255, 1)"> 606px</span>;<span style="color: rgba(255, 0, 0, 1)">
          height</span>:<span style="color: rgba(0, 0, 255, 1)"> 480px</span>;<span style="color: rgba(255, 0, 0, 1)">
          position</span>:<span style="color: rgba(0, 0, 255, 1)"> absolute</span>;<span style="color: rgba(255, 0, 0, 1)">
          left</span>:<span style="color: rgba(0, 0, 255, 1)"> 40px</span>;<span style="color: rgba(255, 0, 0, 1)">
          top</span>:<span style="color: rgba(0, 0, 255, 1)"> 20px</span>;
      }<span style="color: rgba(128, 0, 0, 1)">
      .imagelike </span>{<span style="color: rgba(255, 0, 0, 1)">
          width</span>:<span style="color: rgba(0, 0, 255, 1)"> 96px</span>;<span style="color: rgba(255, 0, 0, 1)">
          height</span>:<span style="color: rgba(0, 0, 255, 1)"> 48px</span>;<span style="color: rgba(255, 0, 0, 1)">
          position</span>:<span style="color: rgba(0, 0, 255, 1)"> absolute</span>;<span style="color: rgba(255, 0, 0, 1)">
          right</span>:<span style="color: rgba(0, 0, 255, 1)"> 40px</span>;<span style="color: rgba(255, 0, 0, 1)">
          top</span>:<span style="color: rgba(0, 0, 255, 1)"> 20px</span>;
      }<span style="color: rgba(128, 0, 0, 1)">
      .imageunlike </span>{<span style="color: rgba(255, 0, 0, 1)">
          width</span>:<span style="color: rgba(0, 0, 255, 1)"> 148px</span>;<span style="color: rgba(255, 0, 0, 1)">
          height</span>:<span style="color: rgba(0, 0, 255, 1)"> 48px</span>;<span style="color: rgba(255, 0, 0, 1)">
          position</span>:<span style="color: rgba(0, 0, 255, 1)"> absolute</span>;<span style="color: rgba(255, 0, 0, 1)">
          left</span>:<span style="color: rgba(0, 0, 255, 1)"> 40px</span>;<span style="color: rgba(255, 0, 0, 1)">
          top</span>:<span style="color: rgba(0, 0, 255, 1)"> 20px</span>;
      }<span style="color: rgba(128, 0, 0, 1)">
      }
    }
    .shop-imgbox:nth-child(1) </span>{<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 686px</span>;<span style="color: rgba(255, 0, 0, 1)">
      z-index</span>:<span style="color: rgba(0, 0, 255, 1)"> 50</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
    .shop-imgbox:nth-child(2) </span>{<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 676px</span>;<span style="color: rgba(255, 0, 0, 1)">
      z-index</span>:<span style="color: rgba(0, 0, 255, 1)"> 40</span>;<span style="color: rgba(255, 0, 0, 1)">
      margin</span>:<span style="color: rgba(0, 0, 255, 1)"> 15px 0px 0px 5px</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
    .shop-imgbox:nth-child(3) </span>{<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 666px</span>;<span style="color: rgba(255, 0, 0, 1)">
      z-index</span>:<span style="color: rgba(0, 0, 255, 1)"> 30</span>;<span style="color: rgba(255, 0, 0, 1)">
      margin</span>:<span style="color: rgba(0, 0, 255, 1)"> 30px 0px 0px 10px</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
    .shop-imgbox:nth-child(4) </span>{<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 656px</span>;<span style="color: rgba(255, 0, 0, 1)">
      z-index</span>:<span style="color: rgba(0, 0, 255, 1)"> 20</span>;<span style="color: rgba(255, 0, 0, 1)">
      margin</span>:<span style="color: rgba(0, 0, 255, 1)"> 0px 0px 0px 15px</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
    .shop-imgbox:nth-child(5) </span>{<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 646px</span>;<span style="color: rgba(255, 0, 0, 1)">
      z-index</span>:<span style="color: rgba(0, 0, 255, 1)"> 10</span>;<span style="color: rgba(255, 0, 0, 1)">
      margin</span>:<span style="color: rgba(0, 0, 255, 1)"> 0px 0px 0px 20px</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
}
.noshop-card </span>{<span style="color: rgba(255, 0, 0, 1)">
    width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
    margin-top</span>:<span style="color: rgba(0, 0, 255, 1)"> 40px</span>;<span style="color: rgba(255, 0, 0, 1)">
    padding</span>:<span style="color: rgba(0, 0, 255, 1)"> 0px 16px</span>;<span style="color: rgba(255, 0, 0, 1)">
    .noshop-image {
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)"> 806px</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
}
.stroll-fotter </span>{<span style="color: rgba(255, 0, 0, 1)">
    width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
    display</span>:<span style="color: rgba(0, 0, 255, 1)"> flex</span>;<span style="color: rgba(255, 0, 0, 1)">
    flex-direction</span>:<span style="color: rgba(0, 0, 255, 1)"> column</span>;<span style="color: rgba(255, 0, 0, 1)">
    align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
    margin-top</span>:<span style="color: rgba(0, 0, 255, 1)"> 20px</span>;<span style="color: rgba(255, 0, 0, 1)">
    .fot-twoimg {
      display</span>:<span style="color: rgba(0, 0, 255, 1)"> flex</span>;<span style="color: rgba(255, 0, 0, 1)">
      flex-direction</span>:<span style="color: rgba(0, 0, 255, 1)"> row</span>;<span style="color: rgba(255, 0, 0, 1)">
      align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
      .dislike-image {
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 120px</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)"> 120px</span>;
      }<span style="color: rgba(128, 0, 0, 1)">
      .like-image </span>{<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 120px</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)"> 120px</span>;<span style="color: rgba(255, 0, 0, 1)">
      margin-left</span>:<span style="color: rgba(0, 0, 255, 1)"> 48px</span>;
      }<span style="color: rgba(128, 0, 0, 1)">
    }
    .fot-text </span>{<span style="color: rgba(255, 0, 0, 1)">
      color</span>:<span style="color: rgba(0, 0, 255, 1)"> #368BE5</span>;<span style="color: rgba(255, 0, 0, 1)">
      font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 28px</span>;<span style="color: rgba(255, 0, 0, 1)">
      margin-top</span>:<span style="color: rgba(0, 0, 255, 1)"> 40px</span>;<span style="color: rgba(255, 0, 0, 1)">
      margin-bottom</span>:<span style="color: rgba(0, 0, 255, 1)"> 50px</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
}
}</span></pre>
</div>
<p>好了,小程序左滑右滑效果就说到这里了,如果大家有更好的办法请在下方留言,如果有什么不懂的可以在下面提问,有时间我会一一回复的,谢谢了!</p>
<p>&nbsp;</p>
<p><span style="font-size: 14pt">第二种实现方式:</span></p>
<p><span style="font-size: 16px">更优解决方法</span></p>
<p><span style="font-size: 14px">GIF效果如下:</span></p>
<p><span style="font-size: 14px"><img src="https://img2020.cnblogs.com/blog/1244003/202009/1244003-20200930104835837-212924747.gif"></span></p>
<p>附加:由于MovableView目前只支持小程序,并且图片无法完全滑出页面,h5不太适用,接下来提供第二种方法,效果比第一种方法更好,直接贴源码</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">import Taro, { Component } from '@tarojs/taro';
import { View, Image, Button, Text } from '@tarojs/components';
import { observer, inject } from '@tarojs/mobx';
import { AtButton, AtFloatLayout} from 'taro-ui';
import { userRecommend, userFavorite, userFavoHistory } from '../../api/index';
import userStore from '../../store/user.store';

import './stroll.scss';

@inject('userStore')
@observer
class Stroll extends Component {
config = {
    navigationBarTitleText: '逛',
    disableScroll: true,
}

state = {
    // 列表参数
    lastId: '',
    count: 20,
    // 推荐商品数组
    cardshow: false,
    shopList: [{skuId:'',skuPicture:''}],
    // 历史浏览条数
    browseCount: '',
    recommendCount: '',
    // 按钮显示状态
    dislikeshow: true,
    likeshow: true,
    // 提示弹窗状态
    popupshow: false,
    popupstate: 0,
    // basicdata数据包含组件基本数据
    startx: '', // 记录起始位置
    starty: '', // 记录起始位置
    endx: '', // 记录终点位置
    endy: '', // 记录终点位置
    currentPage: 0, // 默认首图的序列
    // temporaryData数据包含组件临时数据
    poswidth: 0, // 记录位移
    posheight: 0, // 记录位移
    dxangle: 0, // 拖拽角度
    tracking: false, // 是否在滑动,防止多次操作,影响体验
    animation: false, // 首图是否启用动画效果,默认为否
    opacity: 1, // 记录首图透明度
}

componentWillMount () { }

componentWillReact () { }

componentDidShow () {
    // 用户推荐列表
    this.recommendList();
    // 判断用户是否是第一次进入该页面,储存一个判断值
    if (Taro.getStorageSync('stepState') === '') {
      this.setState({
      popupshow: true,
      popupstate: 1,
      });
    }
}

// 推荐列表接口
async recommendList() {
    // 第一次进来需要调用加载图
    if (this.state.cardshow === false) {
      Taro.showLoading();
    }
    const = await userRecommend({
      lastId: this.state.lastId,
      count:this.state.count,
    });
    Taro.hideLoading();
    if (err) {
      return;
    }
    if (!err&amp;</span><span style="color: rgba(255, 0, 0, 1)">&amp;res</span>&amp;<span style="color: rgba(255, 0, 0, 1)">&amp;res</span><span style="color: rgba(0, 0, 0, 1)">.data) {
      this.setState({
      // 显示状态
      cardshow: true,
      currentPage: 0,
      // 历史浏览条数
      browseCount: res.data.browseCount,
      recommendCount: res.data.recommendCount,
      // 图片数组
      shopList: res.data.record,
      });
    }
}

// 进入页面执行
componentDidMount() {
    //登录并且没有选择性别
    setTimeout(() =&gt; {
      if(this.props.userStore.hasLogin&amp;&amp;!this.props.userStore.hasChoiceSex){
      Taro.navigateTo({
          url:'/sub-pages/gender/gender',
      });
      }
    },1500);
}

componentWillUnmount () {}

componentDidHide () {
    console.log('11111',this.state.currentPage,this.state.shopList);
    this.setState({
      // 数组计算
      shopList: this.state.shopList.splice(this.state.currentPage,100),
    },() =&gt; {
      this.setState({
      // 序列清零
      currentPage: 0,
      },() =&gt; {
      console.log('2222',this.state.currentPage,this.state.shopList);
      });
    });
}

// 首页样式切换
transformIndex (index,color) {
    // console.log('transformIndex', index);
    // 处理3D效果
    if (index === this.state.currentPage) {
      let style = {};
      style['transform'] = 'translate3D(' + this.state.poswidth + 'px' + ',' + this.state.posheight + 'px' + ',0px)'+ 'rotate(' + this.state.dxangle + 'deg)';
      style['opacity'] = this.state.opacity;
      style['zIndex'] = 10;
      style['box-shadow'] = '0px 1px 20px 0px rgba(0,0,0,0.1)';
      style['background'] = color;
      if (this.state.animation) {
      style['transitionTimingFunction'] = 'ease';
      style['transitionDuration'] = 400 + 'ms';
      }
      // console.log('style1', style);
      return style;
    }
}

// 非首页样式切换
transform (index,color) {
    // console.log('transform', index);
    if (index &gt; this.state.currentPage) {
      let style = {};
      let visible = 3;
      let perIndex = index - this.state.currentPage;
      // visible可见数量前滑块的样式
      if (index </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">= this</span><span style="color: rgba(255, 0, 0, 1)">.state.currentPage + visible) {
      style['opacity'] </span><span style="color: rgba(0, 0, 255, 1)">= '1';
      </span><span style="color: rgba(255, 0, 0, 1)">style['transform'] </span><span style="color: rgba(0, 0, 255, 1)">= 'translate3D(0,0,' </span><span style="color: rgba(255, 0, 0, 1)">+ -1 * perIndex * 10 + 'px' + ')';
      style['zIndex'] </span><span style="color: rgba(0, 0, 255, 1)">= visible </span><span style="color: rgba(255, 0, 0, 1)">- index + this.state.currentPage;
      style['transitionTimingFunction'] </span><span style="color: rgba(0, 0, 255, 1)">= 'ease';
      </span><span style="color: rgba(255, 0, 0, 1)">style['transitionDuration'] </span><span style="color: rgba(0, 0, 255, 1)">= 400 </span><span style="color: rgba(255, 0, 0, 1)">+ 'ms';
      style['box-shadow'] </span><span style="color: rgba(0, 0, 255, 1)">= '0px </span><span style="color: rgba(255, 0, 0, 1)">1px 20px 0px rgba(0,0,0,0.1)';
      style['background'] </span><span style="color: rgba(0, 0, 255, 1)">= color;
      </span><span style="color: rgba(255, 0, 0, 1)">} else {
      style['zIndex'] </span><span style="color: rgba(0, 0, 255, 1)">= '-1';
      </span><span style="color: rgba(255, 0, 0, 1)">style['transform'] </span><span style="color: rgba(0, 0, 255, 1)">= 'translate3D(0,0,' </span><span style="color: rgba(255, 0, 0, 1)">+ -1 * visible * 10 + 'px' + ')';
      style['background'] </span><span style="color: rgba(0, 0, 255, 1)">= color;
      </span><span style="color: rgba(255, 0, 0, 1)">}
      // console.log('</span><span style="color: rgba(0, 0, 255, 1)">==========', </span><span style="color: rgba(255, 0, 0, 1)">index, this.state.currentPage);
      // console.log('style2', style);
      return style;
    } else {
      let style </span><span style="color: rgba(0, 0, 255, 1)">= {};
      </span><span style="color: rgba(255, 0, 0, 1)">style['opacity'] </span><span style="color: rgba(0, 0, 255, 1)">= '0';
      </span><span style="color: rgba(255, 0, 0, 1)">style['transitionDuration'] </span><span style="color: rgba(0, 0, 255, 1)">= '0ms';
      </span><span style="color: rgba(255, 0, 0, 1)">// console.log('+++++++++++', index, this.state.currentPage);
      // console.log('style3', style);
      return style;
    }
}

//触摸开始
touchstart (e) {
    e.preventDefault();
    // console.log('touchstart', e);
    // 是否在滑动
    if (this.state.tracking) {
      return;
    }
    // 是否为touch
    if (e.type </span><span style="color: rgba(0, 0, 255, 1)">=== </span><span style="color: rgba(255, 0, 0, 1)">'touchstart') {
      if (e.touches.length </span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)"> 1) {
      // console.log('触摸开始-----------------------touches.length &gt; 1');
      this.setState({
          tracking: false,
      });
      return;
      } else {
      // console.log('触摸开始-----------------------startxstarty');
      // 记录起始位置
      this.setState({
          startx: e.changedTouches.clientX,
          starty: e.changedTouches.clientY,
      });
      this.setState({
          endx: e.changedTouches.clientX,
          endy: e.changedTouches.clientY,
      });
      }
    }
    this.setState({
      tracking: true,
      animation: false,
    });
    // console.log('1011');
}

// 触摸移动
touchmove (e) {
    e.preventDefault();
    // console.log('touchmove', e);
    // 记录滑动位置
    if (this.state.tracking &amp;&amp; !this.state.animation) {
      // console.log('触摸移动-----------------------');
      if (e.type === 'touchmove') {
      // console.log('触摸移动-----------------------endxendy');
      this.setState({
          endx: e.changedTouches.clientX,
          endy: e.changedTouches.clientY,
      });
      }
      // 计算滑动值与偏移角度
      this.setState({
      poswidth: this.state.endx - this.state.startx,
      posheight: this.state.endy - this.state.starty,
      dxangle: (this.state.endx - this.state.startx)/10,
      });
      // 判断移动的距离改变按钮状态
      if (this.state.poswidth </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)"> -100</span><span style="color: rgba(255, 0, 0, 1)">) {
      this.setState({
          dislikeshow: false,
      });
      } else if (this.state.poswidth </span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)"> 100) {
      this.setState({
          likeshow: false,
      });
      } else {
      this.setState({
          dislikeshow: true,
          likeshow: true,
      });
      }
    }
}

touchend (id,type,e) {
    e.preventDefault();
    // console.log('touchend', e);
    // 是否在滑动,动画
    this.setState({
      tracking: false,
      animation: true
    });
    // 滑动结束,触发判断
    // 简单判断滑动宽度超出100像素时触发滑出
    if (Math.abs(this.state.poswidth) &gt;= 100) {
      // console.log('滑动宽度超出100像素时触发滑出-----------------------');
      // 最终位移简单设定为x轴200像素的偏移
      let ratio = Math.abs(this.state.posheight / this.state.poswidth);
      this.setState({
      poswidth: this.state.poswidth &gt;= 0 ? this.state.poswidth + 500 : this.state.poswidth - 500,
      posheight: this.state.posheight &gt;= 0 ? Math.abs(this.state.poswidth * ratio) : -Math.abs(this.state.poswidth * ratio),
      opacity: 0,
      }, () =&gt; {
      setTimeout( () =&gt; {
          this.setState({
            // 删除第一张图片和重置样式
            currentPage: this.state.currentPage+1,
            poswidth: 0,
            posheight: 0,
            dxangle: 0,
            opacity: 1,
            animation: false,
            // 按钮状态
            dislikeshow: true,
            likeshow: true,
            // index显示
            browseCount: this.state.browseCount+1,
          },() =&gt; {
            if (this.state.currentPage === this.state.shopList.length) {
            this.setState({
                // 重置样式
                shopList: [],
                currentPage: 0,
            });
            }
          });
      },400);
      });
      // 调用接口
      if (this.state.poswidth &gt;= 0) {
      // 喜欢接口
      this.rightLike(id,type);
      } else {
      // 不喜欢接口
      this.leftNoLike(id,type);
      }
    // 不满足条件则滑入
    } else {
      // console.log('滑回来-----------------------');
      this.setState({
      poswidth: 0,
      posheight: 0,
      dxangle: 0,
      });
    }
}

// 不喜欢按钮
dislikebtn() {
    // console.log('不喜欢');
    // 不喜欢接口
    this.leftNoLike(this.state.shopList.skuId,this.state.shopList.productSourceType);
    this.setState({
      // 按钮状态
      dislikeshow: false,
      // 图片位移效果
      poswidth: -500,
      posheight: 100,
      dxangle: -20,
      opacity: 0,
      animation: true,
    }, () =&gt; {
      setTimeout( () =&gt; {
      this.setState({
          // 删除第一张图片和重置样式
          currentPage: this.state.currentPage+1,
          poswidth: 0,
          posheight: 0,
          dxangle: 0,
          opacity: 1,
          animation: false,
          // 按钮状态
          dislikeshow: true,
          // index显示
          browseCount: this.state.browseCount+1,
      },() =&gt; {
          if (this.state.currentPage === this.state.shopList.length) {
            this.setState({
            // 重置样式
            shopList: [],
            currentPage: 0,
            });
          }
      });
      },400);
    });
}

// 喜欢按钮
likebtn() {
    console.log('喜欢');
    // 喜欢接口
    this.rightLike(this.state.shopList.skuId,this.state.shopList.productSourceType);
    this.setState({
      // 按钮状态
      likeshow: false,
      // 图片位移效果
      poswidth: 500,
      posheight: 100,
      dxangle: 20,
      opacity: 0,
      animation: true,
    }, () =&gt; {
      setTimeout( () =&gt; {
      this.setState({
          // 删除第一张图片和重置样式
          currentPage: this.state.currentPage+1,
          poswidth: 0,
          posheight: 0,
          dxangle: 0,
          opacity: 1,
          animation: false,
          // 按钮状态
          likeshow: true,
          // index显示
          browseCount: this.state.browseCount+1,
      },() =&gt; {
          if (this.state.currentPage === this.state.shopList.length) {
            this.setState({
            // 重置样式
            shopList: [],
            currentPage: 0,
            });
          }
      });
      },400);
    });
}

// 喜欢接口
async rightLike(id,type) {
    const = await userFavorite({
      skuId: id,
      favoriteStatus: 'LIKE',
      productSourceType: type,
    });
}

// 不喜欢接口
async leftNoLike(id,type) {
    const = await userFavorite({
      skuId: id,
      favoriteStatus: 'NOT_LIKE',
      productSourceType: type,
    });
}

// 查看我喜欢的
lookMyLike() {
    Taro.navigateTo({
      url:'/stroll-pages/stroll-likelist/stroll-likelist'
    });
}

// 下一步
stepone() {
    this.setState({
      popupstate: 2,
    });
}
steptwo() {
    this.setState({
      popupstate: 3,
    });
}
stepthree() {
    this.setState({
      popupshow: false,
    });
    // 改变是否第一次进入页面状态
    Taro.setStorageSync('stepState', '1');
}

render() {
    let cardList = this.state.shopList;
    return (
      </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='stroll-tab'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='stroll-text'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
          <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Text </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='text-tip1'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>慧搭脑每天为你精推荐{this.state.recommendCount}件单品<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
          <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='text-tip2'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Text </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='t1'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>左滑无感<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/text_dislike.svg')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='icon-image'</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Text </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='t1'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>,右滑喜欢<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/text_like.svg')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='icon-image'</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
          <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
      {
          this.state.cardshow &amp;&amp; cardList.length !== 0 &amp;&amp;
          </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='stack'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
            {
            cardList &amp;&amp; cardList.map((item, index) =&gt; {
                return(
                  </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">key</span><span style="color: rgba(0, 0, 255, 1)">={item.id} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='stack-item'
                  </span><span style="color: rgba(255, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">={this.transformIndex(index,item.picMainColor)||this.transform(index,item.picMainColor)}
                  </span><span style="color: rgba(255, 0, 0, 1)">onTouchStart</span><span style="color: rgba(0, 0, 255, 1)">={this.touchstart.bind(this)}
                  </span><span style="color: rgba(255, 0, 0, 1)">onTouchMove</span><span style="color: rgba(0, 0, 255, 1)">={this.touchmove.bind(this)}
                  </span><span style="color: rgba(255, 0, 0, 1)">onTouchEnd</span><span style="color: rgba(0, 0, 255, 1)">={this.touchend.bind(this, </span><span style="color: rgba(255, 0, 0, 1)">item.skuId, item.productSourceType)}
                  </span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                  <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='item-data'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                      <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='imgs' </span><span style="color: rgba(255, 0, 0, 1)">mode</span><span style="color: rgba(0, 0, 255, 1)">='aspectFit' </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={item.skuPicture}</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                  <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
                  <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
                );
            })
            }
            </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='card-num'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>{this.state.browseCount+1}/{this.state.recommendCount}<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='card-btn'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
            {
                this.state.dislikeshow ?
                (</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/dislike_default.png')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='dislike-image' </span><span style="color: rgba(255, 0, 0, 1)">onClick</span><span style="color: rgba(0, 0, 255, 1)">={this.dislikebtn.bind(this)}</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">):
                (</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/dislike_light.png')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='dislike-image'</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">)
            }
            {
                this.state.likeshow ?
                (</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/like_default.png')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='like-image'</span><span style="color: rgba(255, 0, 0, 1)">onClick</span><span style="color: rgba(0, 0, 255, 1)">={this.likebtn.bind(this)}</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">):
                (</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">={require('./img/like_light.png')} </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='like-image'</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">)
            }
            </span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
          <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
      }
      {
          this.state.cardshow &amp;&amp; cardList.length === 0&amp;&amp;
          </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='noshop-card'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">='https://edgefix-image.edgecom.top/403EC3F8835C5521A500F04F35E3ADF7.png' </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='noshop-image' </span><span style="color: rgba(255, 0, 0, 1)">mode</span><span style="color: rgba(0, 0, 255, 1)">='widthFix'</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
          <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
      }
      </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='fotter-box'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
          <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Text </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='fot-text' </span><span style="color: rgba(255, 0, 0, 1)">onClick</span><span style="color: rgba(0, 0, 255, 1)">={this.lookMyLike.bind(this)}</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>查看我喜欢的<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Text</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
      <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
      {
          this.state.popupshow&amp;&amp;
          </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">View </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='popup-box'</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
            {
            this.state.popupstate === 1 &amp;&amp;
            </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">='https://edgefix-image.edgecom.top/F8BEDD2B180FE71C05F7B6E461ECB759.png' </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='stepimage1' </span><span style="color: rgba(255, 0, 0, 1)">onClick</span><span style="color: rgba(0, 0, 255, 1)">={this.stepone.bind(this)}</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
            }
            {
            this.state.popupstate === 2 &amp;&amp;
            </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">='https://edgefix-image.edgecom.top/387AF72683F8598EACA618F1B95A0C23.png' </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='stepimage2' </span><span style="color: rgba(255, 0, 0, 1)">onClick</span><span style="color: rgba(0, 0, 255, 1)">={this.steptwo.bind(this)}</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
            }
            {
            this.state.popupstate === 3 &amp;&amp;
            </span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">Image </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">='https://edgefix-image.edgecom.top/90C93EEE270440031187CFDC917DF9AC.png' </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">='stepimage3' </span><span style="color: rgba(255, 0, 0, 1)">onClick</span><span style="color: rgba(0, 0, 255, 1)">={this.stepthree.bind(this)}</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">Image</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
            }
          </span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
      }
      </span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">View</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
    );
}
}

export default Stroll;</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">page </span>{<span style="color: rgba(255, 0, 0, 1)">
height</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
background</span>:<span style="color: rgba(0, 0, 255, 1)"> #F6F6F6</span>;
}<span style="color: rgba(128, 0, 0, 1)">

.stroll-tab </span>{<span style="color: rgba(255, 0, 0, 1)">
width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
height</span>:<span style="color: rgba(0, 0, 255, 1)"> 100vh</span>;<span style="color: rgba(255, 0, 0, 1)">
background</span>:<span style="color: rgba(0, 0, 255, 1)"> #F6F6F6</span>;<span style="color: rgba(255, 0, 0, 1)">
position</span>:<span style="color: rgba(0, 0, 255, 1)"> relative</span>;<span style="color: rgba(255, 0, 0, 1)">
overflow-x</span>:<span style="color: rgba(0, 0, 255, 1)"> hidden</span>;<span style="color: rgba(255, 0, 0, 1)">
overflow-y</span>:<span style="color: rgba(0, 0, 255, 1)"> hidden</span>;<span style="color: rgba(255, 0, 0, 1)">
.stroll-text {
    width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
    padding-top</span>:<span style="color: rgba(0, 0, 255, 1)"> 40px</span>;<span style="color: rgba(255, 0, 0, 1)">
    padding-bottom</span>:<span style="color: rgba(0, 0, 255, 1)"> 20px</span>;<span style="color: rgba(255, 0, 0, 1)">
    display</span>:<span style="color: rgba(0, 0, 255, 1)"> flex</span>;<span style="color: rgba(255, 0, 0, 1)">
    flex-direction</span>:<span style="color: rgba(0, 0, 255, 1)"> column</span>;<span style="color: rgba(255, 0, 0, 1)">
    align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
    .text-tip1 {
      font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 28px</span>;<span style="color: rgba(255, 0, 0, 1)">
      color</span>:<span style="color: rgba(0, 0, 255, 1)"> #333333</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
    .text-tip2 </span>{<span style="color: rgba(255, 0, 0, 1)">
      display</span>:<span style="color: rgba(0, 0, 255, 1)"> flex</span>;<span style="color: rgba(255, 0, 0, 1)">
      flex-direction</span>:<span style="color: rgba(0, 0, 255, 1)"> row</span>;<span style="color: rgba(255, 0, 0, 1)">
      align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
      .t1 {
      font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 28px</span>;<span style="color: rgba(255, 0, 0, 1)">
      color</span>:<span style="color: rgba(0, 0, 255, 1)"> #333333</span>;
      }<span style="color: rgba(128, 0, 0, 1)">
      .icon-image </span>{<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)">20px</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)">20px</span>;<span style="color: rgba(255, 0, 0, 1)">
      margin-left</span>:<span style="color: rgba(0, 0, 255, 1)"> 4px</span>;
      }<span style="color: rgba(128, 0, 0, 1)">
    }
}
.stack </span>{<span style="color: rgba(255, 0, 0, 1)">
    width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
    height</span>:<span style="color: rgba(0, 0, 255, 1)"> 72.072072vh</span>;<span style="color: rgba(255, 0, 0, 1)">
    position</span>:<span style="color: rgba(0, 0, 255, 1)"> relative</span>;<span style="color: rgba(255, 0, 0, 1)">
    perspective</span>:<span style="color: rgba(0, 0, 255, 1)"> 1000px</span>;<span style="color: rgba(255, 0, 0, 1)"> //子元素视距
    perspective-origin</span>:<span style="color: rgba(0, 0, 255, 1)"> 50% 150%</span>;<span style="color: rgba(255, 0, 0, 1)"> //子元素透视位置
    -webkit-perspective</span>:<span style="color: rgba(0, 0, 255, 1)"> 1000px</span>;<span style="color: rgba(255, 0, 0, 1)">
    -webkit-perspective-origin</span>:<span style="color: rgba(0, 0, 255, 1)"> 50% 150%</span>;<span style="color: rgba(255, 0, 0, 1)">
    margin</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
    padding</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
    .stack-item{
      background</span>:<span style="color: rgba(0, 0, 255, 1)"> #fff</span>;<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 686px</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)"> 72.072072vh</span>;<span style="color: rgba(255, 0, 0, 1)">
      border-radius</span>:<span style="color: rgba(0, 0, 255, 1)"> 24px</span>;<span style="color: rgba(255, 0, 0, 1)">
      overflow</span>:<span style="color: rgba(0, 0, 255, 1)"> hidden</span>;<span style="color: rgba(255, 0, 0, 1)">
      position</span>:<span style="color: rgba(0, 0, 255, 1)"> absolute</span>;<span style="color: rgba(255, 0, 0, 1)">
      left</span>:<span style="color: rgba(0, 0, 255, 1)"> 32px</span>;<span style="color: rgba(255, 0, 0, 1)">
      top</span>:<span style="color: rgba(0, 0, 255, 1)"> 0px</span>;<span style="color: rgba(255, 0, 0, 1)">
      .item-data {
      position</span>:<span style="color: rgba(0, 0, 255, 1)"> relative</span>;<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
      .imgs {
          position</span>:<span style="color: rgba(0, 0, 255, 1)"> absolute</span>;<span style="color: rgba(255, 0, 0, 1)">
          left</span>:<span style="color: rgba(0, 0, 255, 1)"> 0px</span>;<span style="color: rgba(255, 0, 0, 1)">
          top</span>:<span style="color: rgba(0, 0, 255, 1)"> 0px</span>;<span style="color: rgba(255, 0, 0, 1)">
          width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
          height</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
          display</span>:<span style="color: rgba(0, 0, 255, 1)"> block</span>;<span style="color: rgba(255, 0, 0, 1)">
          pointer-events</span>:<span style="color: rgba(0, 0, 255, 1)"> none</span>;
      }<span style="color: rgba(128, 0, 0, 1)">
      }
    }
    .card-num </span>{<span style="color: rgba(255, 0, 0, 1)">
      position</span>:<span style="color: rgba(0, 0, 255, 1)"> absolute</span>;<span style="color: rgba(255, 0, 0, 1)">
      right</span>:<span style="color: rgba(0, 0, 255, 1)"> 64px</span>;<span style="color: rgba(255, 0, 0, 1)">
      top</span>:<span style="color: rgba(0, 0, 255, 1)"> 40px</span>;<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 144px</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)"> 64px</span>;<span style="color: rgba(255, 0, 0, 1)">
      background</span>:<span style="color: rgba(0, 0, 255, 1)"> rgba(0,0,0,0.3)</span>;<span style="color: rgba(255, 0, 0, 1)">
      border-radius</span>:<span style="color: rgba(0, 0, 255, 1)"> 32px</span>;<span style="color: rgba(255, 0, 0, 1)">
      z-index</span>:<span style="color: rgba(0, 0, 255, 1)"> 100</span>;<span style="color: rgba(255, 0, 0, 1)">
      font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 32px</span>;<span style="color: rgba(255, 0, 0, 1)">
      color</span>:<span style="color: rgba(0, 0, 255, 1)"> #FFFFFF</span>;<span style="color: rgba(255, 0, 0, 1)">
      text-align</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
      line-height</span>:<span style="color: rgba(0, 0, 255, 1)"> 64px</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
    .card-btn </span>{<span style="color: rgba(255, 0, 0, 1)">
      position</span>:<span style="color: rgba(0, 0, 255, 1)"> absolute</span>;<span style="color: rgba(255, 0, 0, 1)">
      left</span>:<span style="color: rgba(0, 0, 255, 1)"> 0px</span>;<span style="color: rgba(255, 0, 0, 1)">
      bottom</span>:<span style="color: rgba(0, 0, 255, 1)"> 48px</span>;<span style="color: rgba(255, 0, 0, 1)">
      z-index</span>:<span style="color: rgba(0, 0, 255, 1)"> 20</span>;<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
      display</span>:<span style="color: rgba(0, 0, 255, 1)"> flex</span>;<span style="color: rgba(255, 0, 0, 1)">
      flex-direction</span>:<span style="color: rgba(0, 0, 255, 1)"> row</span>;<span style="color: rgba(255, 0, 0, 1)">
      align-items</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
      justify-content</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
      .dislike-image {
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 120px</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)"> 120px</span>;<span style="color: rgba(255, 0, 0, 1)">
      border-radius</span>:<span style="color: rgba(0, 0, 255, 1)"> 50%</span>;<span style="color: rgba(255, 0, 0, 1)">
      box-shadow</span>:<span style="color: rgba(0, 0, 255, 1)"> 0px 0px 20px 0px rgba(0,0,0,0.05)</span>;
      }<span style="color: rgba(128, 0, 0, 1)">
      .like-image </span>{<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 120px</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)"> 120px</span>;<span style="color: rgba(255, 0, 0, 1)">
      margin-left</span>:<span style="color: rgba(0, 0, 255, 1)"> 48px</span>;<span style="color: rgba(255, 0, 0, 1)">
      border-radius</span>:<span style="color: rgba(0, 0, 255, 1)"> 50%</span>;<span style="color: rgba(255, 0, 0, 1)">
      box-shadow</span>:<span style="color: rgba(0, 0, 255, 1)"> 0px 0px 20px 0px rgba(0,0,0,0.05)</span>;
      }<span style="color: rgba(128, 0, 0, 1)">
    }
}
.noshop-card </span>{<span style="color: rgba(255, 0, 0, 1)">
    width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
    padding</span>:<span style="color: rgba(0, 0, 255, 1)"> 0px 16px</span>;<span style="color: rgba(255, 0, 0, 1)">
    .noshop-image {
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
}
.fotter-box </span>{<span style="color: rgba(255, 0, 0, 1)">
    width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
    text-align</span>:<span style="color: rgba(0, 0, 255, 1)"> center</span>;<span style="color: rgba(255, 0, 0, 1)">
    position</span>:<span style="color: rgba(0, 0, 255, 1)"> absolute</span>;<span style="color: rgba(255, 0, 0, 1)">
    bottom</span>:<span style="color: rgba(0, 0, 255, 1)"> 20px</span>;<span style="color: rgba(255, 0, 0, 1)">
    left</span>:<span style="color: rgba(0, 0, 255, 1)"> 0px</span>;<span style="color: rgba(255, 0, 0, 1)">
    .fot-text {
      color</span>:<span style="color: rgba(0, 0, 255, 1)"> #368BE5</span>;<span style="color: rgba(255, 0, 0, 1)">
      font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 28px</span>;<span style="color: rgba(255, 0, 0, 1)">
      padding</span>:<span style="color: rgba(0, 0, 255, 1)"> 10px 20px</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
}
.popup-box </span>{<span style="color: rgba(255, 0, 0, 1)">
    width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
    height</span>:<span style="color: rgba(0, 0, 255, 1)"> 100vh</span>;<span style="color: rgba(255, 0, 0, 1)">
    position</span>:<span style="color: rgba(0, 0, 255, 1)"> absolute</span>;<span style="color: rgba(255, 0, 0, 1)">
    left</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
    top</span>:<span style="color: rgba(0, 0, 255, 1)"> 0</span>;<span style="color: rgba(255, 0, 0, 1)">
    background</span>:<span style="color: rgba(0, 0, 255, 1)">rgba(0,0,0,0.5)</span>;<span style="color: rgba(255, 0, 0, 1)">
    .stepimage1 {
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)"> 344px</span>;<span style="color: rgba(255, 0, 0, 1)">
      margin-top</span>:<span style="color: rgba(0, 0, 255, 1)"> 36.036036vh</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
    .stepimage2 </span>{<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)"> 300px</span>;<span style="color: rgba(255, 0, 0, 1)">
      margin-top</span>:<span style="color: rgba(0, 0, 255, 1)"> 68.468468vh</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
    .stepimage3 </span>{<span style="color: rgba(255, 0, 0, 1)">
      width</span>:<span style="color: rgba(0, 0, 255, 1)"> 100%</span>;<span style="color: rgba(255, 0, 0, 1)">
      height</span>:<span style="color: rgba(0, 0, 255, 1)"> 300px</span>;<span style="color: rgba(255, 0, 0, 1)">
      margin-top</span>:<span style="color: rgba(0, 0, 255, 1)"> 68.468468vh</span>;
    }<span style="color: rgba(128, 0, 0, 1)">
}
}</span></pre>
</div>
<p>不论什么框架,代码都是相通的,看上方源码了解方法和逻辑就可以都适用了。</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/hejun26/p/12895088.html
頁: [1]
查看完整版本: React+Taro开发小程序实现左滑喜欢右滑不喜欢效果