微信小程序左右滑动切换图片酷炫效果(附效果) - 高丰鸣

gaofengming 2021-11-12 原文


微信小程序左右滑动切换图片酷炫效果(附效果)


  开门见山,先上效果吧!感觉可以的用的上的再往下看。

  心动吗?那就继续往下看!

  先上页面结构吧,也就是wxml文件,其实可以理解成微信自己封装过的html,这个不多说了,不懂也没必要往下看了。

 1  <scroll-view class="scroll-view_H" scroll-x scroll-with-animation style="width: 100%;height:{{windowHeight}}px" bindscroll="getSelectItem">
 2     <block wx:for="{{proList}}"  wx:key="unique" wx:for-index="id" wx:for-item="item">
 3       <view class="scroll_item {{item.selected ? \'selected\' : \'\'}}" data-index=\'{{item.index}}\' bindtap=\'selectProItem\'>
 4       <view class=\'proImg\'><image src="{{item.proUrl}}" class="slide-image"  mode="widthFix"/></view>
 5         <view class=\'detailBox\'>
 6             <view class=\'proTitle\'>{{item.proTitle}}</view>
 7             <view class=\'proDec\'>{{item.proDec}}</view>
 8             <view class=\'proPrice\'>¥{{item.proPrice}}</view>
 9             <navigator class=\'detailLink\'  url="../detail/detail?id={{item.id}}">查看详情 ></navigator>
10         </view>
11       </view>
12     </block>
13   </scroll-view>

  做该效果样式就不多说了,一个默认状态样式,一个当前选中样式。(开发小程序的时候,注意class的命名,尽量不要使用层级嵌套,所以class取名的时候要注意唯一性)

.scroll-view_H{
    width: 100%;
    text-align: center;
    white-space: nowrap;
}
.scroll_item {
  position: relative;
  width: 84%;
  margin: 0 1%;
  left: -2%;
  display: inline-block;
  border-radius: 20rpx !important ;
  overflow: hidden;
  transform: scale(0.9);
  box-shadow: 0 0 10px #ccc;
  vertical-align: top;
  top: 5%;
  height: 72%;
  background-color: #fff;
 }
.scroll_item:first-child{
    margin-left: 8%;
    left: 0;
}
.scroll_item:last-child{
    margin-right: 8%;
     left: 0;
}
.scroll_item.selected{
     transform: scale(1);
     border: solid 1px #ffcd54;
}
.scroll_item .proImg{
    border-top-left-radius: 20rpx;
    border-top-right-radius: 20rpx;
    width: 100%;
    max-height: 200rpx;
    position: absolute;
    top: 0;
    left: 0;
    z-index: 0;
}
.scroll_item image {
    width: 100%;
    float: left;
    border-top-left-radius: 20rpx;
    border-top-right-radius: 20rpx;
}
.detailBox {
    padding: 30rpx 5% 30rpx 5%;
    float: left;
    width: 90%;
    border-bottom-left-radius: 20rpx;
    border-bottom-right-radius: 20rpx;
    position: absolute;
    bottom: 0;
    left: 0;
    z-index: 1;
    background: #fff;
}
.proTitle {
    font-size: 36rpx;
    color: #666;
    line-height: 50rpx;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.proDec {
    font-size: 30rpx;
    color: #999;
    line-height: 50rpx;
}
.proPrice {
    font-size: 48rpx;
    color: #CA414C;
    line-height: 90rpx;
}
.detailLink{
    color: #666;
    font-size: 30rpx;
}

  

  js部分:该效果基于小程序的组件 scroll-view 开发的,利用bindscroll事件加载回调函数。

  回调事件原理:

  通过滚动宽度和每个item的宽度从而获取当前滚动的item是第几位,然后给对应的item加上选中class,其他的则去除选中class。

//滑动获取选中商品
  getSelectItem:function(e){
      var that = this;
      var itemWidth = e.detail.scrollWidth / that.data.proList.length;//每个商品的宽度
      var scrollLeft = e.detail.scrollLeft;//滚动宽度
      var curIndex = Math.round(scrollLeft / itemWidth);//通过Math.round方法对滚动大于一半的位置进行进位
      for (var i = 0, len = that.data.proList.length; i < len; ++i) {
          that.data.proList[i].selected = false;
      }
      that.data.proList[curIndex].selected = true;
      that.setData({
          proList: that.data.proList,
          giftNo: this.data.proList[curIndex].id
      });
  },

  

  ps:有时候一些酷炫的效果其实实现起来非常简单,建议开发前先理清实现思路,虽然整个文章言简意赅,能看懂就自然懂,乐在分享。

发表于
2018-01-31 13:33 
高丰鸣 
阅读(14706
评论(0
编辑 
收藏 
举报

 

版权声明:本文为gaofengming原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/gaofengming/p/8391783.html

微信小程序左右滑动切换图片酷炫效果(附效果) - 高丰鸣的更多相关文章

  1. 威尔逊置信区间 – iUpoint

    威尔逊置信区间 由于正态区间对于小样本并不可靠,因而,1927年,美国数学家 Edwin Bidwell Wi […]...

  2. 阿里云修改centos7主机名 – XYJK1002

    阿里云修改centos7主机名   为了玩Docker,买个阿里云主机也是够拼的了。 [root@iZ284o […]...

  3. 自动化构建工具–gulp的初识和使用 – Anderson_An

    自动化构建工具–gulp的初识和使用 gulp  首先:什么是gulp? gulp是前端开发过程中 […]...

  4. MySQL优化(一):MySQL分库分表 – 杜先生的博客

    MySQL优化(一):MySQL分库分表 一、分库分表种类 1、垂直拆分       在考虑数据拆分的时候,一 […]...

  5. Django – 日期、时间字段

    创建django的model时,有DateTimeField、DateField和TimeField三种类型可 […]...

  6. jquery 挡板游戏 – Newbies

    jquery 挡板游戏 今天想写个挡板小游戏,经过一个上午的奋斗,终于完成了,测试地址: 挡板小游戏 以下为所 […]...

  7. 给你的Java程序拍个片子吧:jstack命令解析 – Jay_huaxiao

    给你的Java程序拍个片子吧:jstack命令解析 前言 如果有一天,你的Java程序长时间停顿,也许是它病了 […]...

  8. FreeMarker中文API手册(完整) – wwicked

    FreeMarker中文API手册(完整) 转自http://blog.csdn.net/junjun1681 […]...

随机推荐

  1. vue学习笔记-遗留问题记录

    Node.js是什么?对node.js的理解 官网解释:Node.js 是一个基于 Chrome V8 引擎的 […]...

  2. 2018APP Inventor获奖作品

    作品id 奖项 作品名 队长姓名 队员姓名 队长所在学校   73 特等奖 盲人智能辅助手杖 樊佳怡   新疆 […]...

  3. CSS3的自定义字体@font-face:如何将icon变成字体?

    为什么要将icon做成字体? 在很多网站项目中,我们常常会用到各种透明小图标,然后网站要兼容各个浏览器,也可能 […]...

  4. LeetCode30 Hard 查找所有子串

    本文始发于个人公众号:TechFlow,原创不易,求个关注 链接 Substring with Concate […]...

  5. MacOS下解决宿主机和docker容器之间网络互通

    docker在Mac下使用非常方便,官网提供了desktop版本的可视化软件,甚至还十分贴心地集成好了k8s套 […]...

  6. win10家庭版转专业版并激活

    之前重装win10的时候没注意,不小心装成家庭版。 本以为家庭版也没什么,后来发现这对程序员来说造成致命打击。 […]...

  7. HTTP和HTTPS区别 – yanximin

    HTTP和HTTPS区别 title: HTTP和HTTPS区别 date: 2017-09-13 10:34 […]...

  8. 彻底删除MySQL

    1、控制面板->>程序与功能里卸载所有和MySQL有关的组件。 2、MySQL安装路径里删除和My […]...

展开目录

目录导航