iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >微信小程序怎么实现竖排slider效果
  • 338
分享到

微信小程序怎么实现竖排slider效果

2023-07-02 14:07:30 338人浏览 薄情痞子
摘要

这篇文章主要介绍了微信小程序怎么实现竖排slider效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么实现竖排slider效果文章都会有所收获,下面我们一起来看看吧。js:Component({&

这篇文章主要介绍了微信小程序怎么实现竖排slider效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么实现竖排slider效果文章都会有所收获,下面我们一起来看看吧。

js

Component({  properties: {    blockColor: {      type: String,      value: "#ffffff"    },    blockSize: {      type: Number,      value: 28    },    backgroundColor: {      type: String,      value: "#e9e9e9"    },    activeColor: {      type: String,      value: "#1aad19"    },    step: {      type: Number,      value: 1    },    min: {      type: Number,      value: 0    },    max: {      type: Number,      value: 100    },    value: {      type: Number,      value: 0    },    disabled: {      type: Boolean,      value: false    },    showValue: {      type: Boolean,      value: false    },  },  observers: {    'blockSize': function(blockSize) {      if (blockSize > 28) {        this.setData({          blockSize: 28        })      } else if (blockSize < 12) {        this.setData({          blockSize: 12        })      }    },    'showValue': function(){      this.queryHeight() // 由于显示数字后,滑动区域变化,需要重新查询可滑动高度    }  },  data: {    totalTop: null,    totalHeight: null,    currentValue: 0,  },  methods: {    setCurrent: function(e){      this.setData({        currentValue: e.value      })    },    queryHeight: function(){      wx.createSelectorQuery().in(this).select('.slider-container').boundinGClientRect((res) => {        this.setData({          totalTop: res.top,          totalHeight: res.height        })      }).exec()    },    empty: function(){},  }})

JSON

{  "component": true,  "usingComponents": {}}

wxml:

<wxs module="eventHandle" src="./SliderVertical.wxs"></wxs><view class="slider" catchtouchmove="empty">  <view class="slider-append" data-percent="0" bindtap="{{eventHandle.tapEndPoint}}"></view>  <view class="slider-container" change:prop="{{eventHandle.propsChange}}" prop="{{ {max,min,step,value,totalTop,totalHeight,disabled} }}" >    <view class="slider-lower" id="lower" catchtap="{{eventHandle.tap}}">      <view class="slider-lower-line" ></view>    </view>    <view class="slider-middle">      <view         class="slider-block"                  catchtouchstart="{{eventHandle.start}}"         catchtouchmove="{{eventHandle.move}}"        catchtouchend="{{eventHandle.end}}"        ></view>    </view>    <view class="slider-upper" id="upper" catchtap="{{eventHandle.tap}}">      <view class="slider-upper-line" ></view>    </view>  </view>  <view class="slider-append" data-percent="1" bindtap="{{eventHandle.tapEndPoint}}"></view>  <view class="slider-value" wx:if="{{showValue}}">{{currentValue}}</view></view>

wxs:

var notInt = function(num) {  return num !== parseInt(num)}var calculate = function(instance,state,changeCallback){  var max = state.max  var min = state.min  var offset = state.offset  var step = state.step  // 1、计算 offset 按照 step 算应该是几个。  // Math.round(offset % step / step) 计算的是 offset 对 step 取模后剩下的长度四舍五入,就是多出来的部分是否该算一步  // Math.floor(offset / step) 计算的是 offset 中包含多少个完整的 step  var stepNum = Math.round(offset % step / step) + Math.floor(offset / step)  // 2、纠正后的当前高度  var current = stepNum * step  // 3、当前高度所占比例,由于 offset 的大小已经在进方法前经过了修正,所以这里不需要再判断是否小于0或者大于100了  var percent = current * 100 / (max - min)  instance.selectComponent("#upper").setStyle({    height: (100 - percent) + "%"  })  instance.selectComponent("#lower").setStyle({    height: percent + "%"  })  if(state.current !== current){    state.current = current    changeCallback(current+min)  }}module.exports = {  propsChange: function(newValue, oldValue, ins) {    var state = ins.getState()    var step = newValue.step;    var min = newValue.min;    var max = newValue.max;    var value = newValue.value;    if (notInt(step) || notInt(min) || notInt(max) || notInt(value)) {      console.log("你不把 step min max value 设成正整数,我没法做啊")      return    }    if (min > max) {      min = oldValue.min      max = oldValue.max    }    if (value > max) {      console.log("value的值比max大,将value强制设为max")      value = max    } else if (value < min) {      console.log("value的值比min小,将value强制设为min:"+min)      value = min    }    if (step <= 0 || (max - min) % step != 0) {      console.log("step只能是正整数且必须被(max-min)整除,否则将step强制设为1")      step = 1    }    state.min = min    state.max = max    state.step = step    state.offset = value - min    state.disabled = newValue.disabled    state.totalTop = newValue.totalTop    state.totalHeight = newValue.totalHeight    if (newValue.totalTop !== null && newValue.totalHeight !== null) {      calculate(ins, state, function(currentValue){        ins.callMethod("setCurrent", {value: state.current + state.min})      })    }  },  tapEndPoint: function(e, ins){    var state = ins.getState()    if (state.disabled) return    var percent = e.currentTarget.dataset.percent    state.offset = (state.max - state.min) * percent    calculate(ins, state, function (currentValue) {      ins.triggerEvent("change", {        value: currentValue      })      ins.callMethod("setCurrent", {value: currentValue})    })  },  tap: function(e, ins) {    var state = ins.getState()    if (state.disabled) return    // (总高度+头部高度-点击点高度)/ 总高度 = 点击点在组件的位置    // 点击事件只在线条上,所以percent是不可能小于0,也不可能超过100%,无需另加判断    var percent = ( e.changedTouches[0].pageY - state.totalTop) / state.totalHeight    state.offset = (state.max - state.min) * percent    calculate(ins, state, function(currentValue){      ins.triggerEvent("change", {        value: currentValue      })      ins.callMethod("setCurrent", {value: currentValue})    })  },  start: function(e, ins) {    var state = ins.getState()    if (state.disabled) return    state.startPoint = e.changedTouches[0]    // 本次滑动之前的高度px = 当前高度value / (最大值-最小值) * 最大高度    var currentPx = state.current / (state.max - state.min) * state.totalHeight    state.currentPx = currentPx  },  move: function(e, ins) {    var state = ins.getState()    if (state.disabled) return    var startPoint = state.startPoint    var endPoint = e.changedTouches[0]    // 当前的高度px = 滑动之前的高度px + 起始点高度 - 当前点高度    var currentPx = state.currentPx + endPoint.pageY - startPoint.pageY    var percent = currentPx / state.totalHeight    // 由于可能滑出slider范围,所以要限制比例在 0-1之间    percent = percent>1?1:percent    percent = percent<0?0:percent    state.offset = (state.max - state.min) * percent    calculate(ins, state, function(currentValue){      ins.triggerEvent("changing", {        value: currentValue      })      ins.callMethod("setCurrent", {value: currentValue})    })  },  end: function(e, ins) {    var state = ins.getState()    if (state.disabled) return    ins.triggerEvent("change", {      value: state.current + state.min    })  }}

wxss:

.slider {  height: 100%;  padding: 30rpx 0;  box-sizing: border-box;  display: flex;  flex-direction: column;  align-items: center;  justify-content: space-around;}.slider-container {  flex: 1;  margin: 0 20px;  width: 0;  display: flex;  flex-direction: column;  align-items: center;}.slider-upper {  flex-shrink: 0;  height: 100%;}.slider-lower {  flex-shrink: 0;  height: 0%;}.slider-upper-line {  height: 100%;  margin: 0 12px;  width: 2px;}.slider-lower-line {  height: 100%;  margin: 0 12px;  width: 2px;}.slider-middle {  flex-shrink: 0;  width: 0;  height: 0;  display: flex;  align-items: center;  justify-content: center;}.slider-block {  flex-shrink: 0;  width: 20rpx;  height: 20rpx;  border-radius: 50%;  position: relative;  z-index: 1;}.slider-value {  flex-shrink: 0;  pointer-events: none;}.slider-append {  flex-shrink: 0;  height: 10px;  padding: 0 20px;}

保存到组件

index部分

js`:

Page({  slider1change: function (e) {    console.log("change:",e)  },  slider1changing: function (e) {    console.log("changing:",e)  },})

wxml:

<view >  <slider-vertical     block-color="#ffffff"    block-size="28"    backgroundColor="#e9e9e9"     activeColor="#1aad19"     bindchange="slider1change"    bindchanging="slider1changing"    step="1"    min="0"     max="200"    value="0"    disabled="{{false}}"    show-value="{{true}}"    ></slider-vertical>  <slider-vertical     block-color="#ffffff"    block-size="28"    backgroundColor="#e9e9e9"     activeColor="#1aad19"     bindchange="slider1change"    bindchanging="slider1changing"    step="5"    min="50"     max="200"    value="115"    disabled="{{false}}"    show-value="{{false}}"    ></slider-vertical></view>

关于“微信小程序怎么实现竖排slider效果”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“微信小程序怎么实现竖排slider效果”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 微信小程序怎么实现竖排slider效果

本文链接: https://www.lsjlt.com/news/342410.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 微信小程序怎么实现竖排slider效果
    这篇文章主要介绍了微信小程序怎么实现竖排slider效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么实现竖排slider效果文章都会有所收获,下面我们一起来看看吧。js:Component({&...
    99+
    2023-07-02
  • 微信小程序实现竖排slider效果
    本文实例为大家分享了微信小程序实现竖排slider效果的具体代码,供大家参考,具体内容如下 js: Component({   properties: {     blockColo...
    99+
    2024-04-02
  • 微信小程序如何实现slider
    这篇文章给大家分享的是有关微信小程序如何实现slider的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现效果图:滑动选择器属性名类型默认值说明minNumber0最小值maxN...
    99+
    2024-04-02
  • 微信小程序弧线效果怎么实现
    这篇文章主要讲解了“微信小程序弧线效果怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序弧线效果怎么实现”吧!目标效果:我们所有元素默认的都是长方形的元素,所以如果想要实现这个...
    99+
    2023-06-26
  • 微信小程序怎么实现吸顶盒效果
    本文小编为大家详细介绍“微信小程序怎么实现吸顶盒效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“微信小程序怎么实现吸顶盒效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。html部分 <!--...
    99+
    2023-07-02
  • 微信小程序怎么使用slider实现音频进度条
    这篇文章主要介绍了微信小程序怎么使用slider实现音频进度条的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么使用slider实现音频进度条文章都会有所收获,下面我们一起来看看吧。微信小程序的sli...
    99+
    2023-07-02
  • 微信小程序中怎么实现轮播图效果
    这篇文章主要介绍了微信小程序中怎么实现轮播图效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先来看看效果图:主要用swiper + swi...
    99+
    2024-04-02
  • 微信小程序五星评分效果怎么实现
    这篇文章主要介绍微信小程序五星评分效果怎么实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!微信小程序五星评分效果实现代码很多做过电商项目的朋友会经常用到评分的功能,我这里正好写了一...
    99+
    2024-04-02
  • 微信小程序怎么实现旋转木马效果
    这篇文章主要介绍“微信小程序怎么实现旋转木马效果 ”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么实现旋转木马效果 ”文章能帮助大家解决问题。文章涉及技术点微信小程序原生Swiper控件...
    99+
    2023-06-26
  • 微信小程序怎么实现简单弹框效果
    这篇文章主要介绍“微信小程序怎么实现简单弹框效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么实现简单弹框效果”文章能帮助大家解决问题。页面结构<!-- 遮罩层&nbs...
    99+
    2023-07-02
  • 微信小程序实现摇筛子效果
    本文实例为大家分享了微信小程序实现摇筛子效果的具体代码,供大家参考,具体内容如下 1.效果图: 2.HTML代码: <!--pages/game/game.wxml--&...
    99+
    2024-04-02
  • 微信小程序实现吸顶盒效果
    本文实例为大家分享了微信小程序实现吸顶盒效果的具体代码,供大家参考,具体内容如下 html部分  <!-- 列表 -->     <view class="pa...
    99+
    2024-04-02
  • 微信小程序实现九宫格效果
    本文实例为大家分享了微信小程序实现九宫格效果的具体代码,供大家参考,具体内容如下 1.九宫格实现示例图: Tips: 说明: 使用 display: -webkit-flex;对...
    99+
    2024-04-02
  • 微信小程序怎么实现登录会话效果
    这篇文章主要介绍了微信小程序怎么实现登录会话效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么实现登录会话效果文章都会有所收获,下面我们一起来看看吧。背景微信小程序的使用可以快速的基于场景进行用户...
    99+
    2023-06-26
  • 微信小程序实现简单吸顶效果
    本文实例为大家分享了微信小程序实现吸顶效果的具体代码,供大家参考,具体内容如下 吸顶效果思路: 1.首先获取 Tab 栏与顶部的距离; 2.监听页面滚动事件 onPageScroll...
    99+
    2024-04-02
  • 微信小程序使用slider实现音频进度条
    众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所以就想到了用slider来实现音频的进度条显示及控制 微信小程序的slider组件...
    99+
    2024-04-02
  • 微信小程序实现性别单选效果
    本文实例为大家分享了微信小程序实现性别单选的具体代码,供大家参考,具体内容如下 效果图: 代码: html: <view class="inputbox">      ...
    99+
    2024-04-02
  • 微信小程序实现下拉刷新效果
    微信小程序实现下拉刷新效果微信小程序作为一种轻量级的移动应用开发平台,近年来在移动应用行业得到了广泛的应用和发展。下拉刷新是常见的交互效果,可以在列表页面中,当用户下拉页面时自动刷新内容,提升用户体验和数据的及时更新。本文将介绍如何在微信小...
    99+
    2023-11-21
    微信小程序 实现 下拉刷新
  • 微信小程序实现页面缓存效果
    抱歉,我不能在该平台上提供具体的代码示例。但是我可以给你一些关于微信小程序实现页面缓存的一般指导和步骤,希望能帮到你。微信小程序是一种轻量级的应用程序,它需要快速加载和响应用户操作。页面缓存是一种优化技术,可以加快页面加载速度,提升用户体验...
    99+
    2023-11-21
    页面 缓存 微信小程序
  • 微信小程序实现常见的user效果
    这篇“微信小程序实现常见的user效果”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“微信小程序实现常见的user效果”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作