├── README.md ├── app.js ├── app.json ├── app.wxss ├── component ├── wxzx-progress │ ├── wxzx-progress.js │ ├── wxzx-progress.json │ ├── wxzx-progress.wxml │ └── wxzx-progress.wxss └── wxzx-slider │ ├── wxzx-slider.js │ ├── wxzx-slider.json │ ├── wxzx-slider.wxml │ └── wxzx-slider.wxss ├── img └── slider.png ├── pages ├── audio │ ├── audio.js │ ├── audio.json │ ├── audio.wxml │ └── audio.wxss ├── index │ ├── index.js │ ├── index.json │ ├── index.wxml │ └── index.wxss ├── logs │ ├── logs.js │ ├── logs.json │ ├── logs.wxml │ └── logs.wxss ├── newslider │ ├── newslider.js │ ├── newslider.json │ ├── newslider.wxml │ └── newslider.wxss ├── progress │ ├── progress.js │ ├── progress.json │ ├── progress.wxml │ └── progress.wxss └── slider │ ├── slider.js │ ├── slider.json │ ├── slider.wxml │ └── slider.wxss ├── project.config.json └── utils └── util.js /README.md: -------------------------------------------------------------------------------- 1 | # Slider 2 | 小程序 自定义slider组件 3 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | //app.js 2 | App({ 3 | onLaunch: function () { 4 | // 展示本地存储能力 5 | var logs = wx.getStorageSync('logs') || [] 6 | logs.unshift(Date.now()) 7 | wx.setStorageSync('logs', logs) 8 | 9 | // 登录 10 | wx.login({ 11 | success: res => { 12 | // 发送 res.code 到后台换取 openId, sessionKey, unionId 13 | } 14 | }) 15 | // 获取用户信息 16 | wx.getSetting({ 17 | success: res => { 18 | if (res.authSetting['scope.userInfo']) { 19 | // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框 20 | wx.getUserInfo({ 21 | success: res => { 22 | // 可以将 res 发送给后台解码出 unionId 23 | this.globalData.userInfo = res.userInfo 24 | 25 | // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 26 | // 所以此处加入 callback 以防止这种情况 27 | if (this.userInfoReadyCallback) { 28 | this.userInfoReadyCallback(res) 29 | } 30 | } 31 | }) 32 | } 33 | } 34 | }) 35 | }, 36 | globalData: { 37 | userInfo: null 38 | } 39 | }) -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "pages":[ 3 | "pages/index/index", 4 | "pages/progress/progress", 5 | "pages/slider/slider", 6 | "pages/audio/audio", 7 | "pages/newslider/newslider" 8 | ], 9 | "window":{ 10 | "backgroundTextStyle":"light", 11 | "navigationBarBackgroundColor": "#fff", 12 | "navigationBarTitleText": "WeChat", 13 | "navigationBarTextStyle":"black" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app.wxss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jiemingdev/Slider/0f148c2b7ca6fed4ad03af01466a41b79a8d72b3/app.wxss -------------------------------------------------------------------------------- /component/wxzx-progress/wxzx-progress.js: -------------------------------------------------------------------------------- 1 | Component({ 2 | properties: { 3 | percent: { 4 | type: [Number, String], 5 | value: 50 6 | }, 7 | width: { 8 | type: [Number, String], 9 | value: 700 10 | }, 11 | strokeWidth: { 12 | type: [Number, String], 13 | value: 10 14 | }, 15 | activeColor: { 16 | type: [String, Array], 17 | value: '#949494' 18 | }, 19 | backgroundColor: { 20 | type: String, 21 | value: '#e5e5e5' 22 | }, 23 | radius: { 24 | type: [Number, String], 25 | value: 5 26 | }, 27 | orientation: { 28 | type: [Number, String], 29 | value: 'landscape' 30 | // slider方向 landscape横向 portrait纵向 31 | }, 32 | portraitOrientation: { 33 | type: [Number, String], 34 | value: 'bottom' 35 | // 纵向方向 top 从上到下 bottom 从下到上 36 | } 37 | }, 38 | attached: function () { 39 | let activeColor = this.data.activeColor; 40 | if (!!~activeColor.indexOf(',')) { 41 | this.setData({ 42 | activeLineColor: activeColor.split(',') 43 | }) 44 | } 45 | } 46 | }) 47 | -------------------------------------------------------------------------------- /component/wxzx-progress/wxzx-progress.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true 3 | } -------------------------------------------------------------------------------- /component/wxzx-progress/wxzx-progress.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /component/wxzx-progress/wxzx-progress.wxss: -------------------------------------------------------------------------------- 1 | .progress__bg { 2 | position: relative; 3 | } 4 | 5 | .progress__line { 6 | position: absolute; 7 | } -------------------------------------------------------------------------------- /component/wxzx-slider/wxzx-slider.js: -------------------------------------------------------------------------------- 1 | function getSystemScreenRatio() { 2 | var res = wx.getSystemInfoSync(); 3 | return 750 / res.screenWidth 4 | } 5 | Component({ 6 | properties: { 7 | percent: { 8 | type: [Number, String], 9 | value: 100 10 | }, 11 | width: { 12 | type: [Number, String], 13 | value: 700 14 | }, 15 | strokeWidth: { 16 | type: [Number, String], 17 | value: 6 18 | }, 19 | activeColor: { 20 | type: [String, Array], 21 | value: '#FFFAF0, #ff6600' 22 | }, 23 | bufferColor: { 24 | type: String, 25 | value: '#00' 26 | // 默认为无色 27 | }, 28 | backgroundColor: { 29 | type: String, 30 | value: '#e5e5e5' 31 | }, 32 | radius: { 33 | type: [Number, String], 34 | value: 5 35 | }, 36 | blockSrc: { 37 | type: String, 38 | value: null 39 | }, 40 | blockSize: { 41 | type: [Number, String], 42 | value: 40 43 | }, 44 | blockColor: { 45 | type: String, 46 | value: '#FFFFFF' 47 | }, 48 | value: { 49 | type: [Number, String], 50 | value: 0 51 | }, 52 | max: { 53 | type: [Number, String], 54 | value: 100 55 | }, 56 | disabled: { 57 | type: Boolean, 58 | value: false 59 | }, 60 | isCustom: { 61 | type: Boolean, 62 | value: false 63 | }, 64 | blockImageWidth: { 65 | type: [Number, String], 66 | value: 0 67 | }, 68 | blockImageHeight: { 69 | type: [Number, String], 70 | value: 0 71 | }, 72 | orientation: { 73 | type: [Number, String], 74 | value: 'landscape' 75 | // slider方向 landscape横向 portrait纵向 76 | }, 77 | isMonitoring: { 78 | type: Boolean, 79 | value: true 80 | } 81 | }, 82 | data: { 83 | screenRatio: 0, 84 | sliderStartX: 0, 85 | sliderStartY: 0, 86 | startValue: 0, 87 | portraitOrientation: 'bottom', 88 | clickEnlargeSize: 60 89 | }, 90 | attached: function () { 91 | let activeColor = this.data.activeColor; 92 | var that = this 93 | if (!!~activeColor.indexOf(',')) { 94 | this.setData({ 95 | activeLineColor: activeColor.split(',') 96 | }) 97 | } 98 | let blockSize = this.data.blockSize; 99 | if (blockSize > 40) { 100 | this.setData({ 101 | blockSize: 40 102 | }) 103 | } else if (blockSize < 20) { 104 | this.setData({ 105 | blockSize: 20 106 | }) 107 | } 108 | this.setData({ screenRatio: getSystemScreenRatio(), strokeWidth: Number(this.data.strokeWidth) }) 109 | }, 110 | methods: { 111 | sliderTap: function (e) { 112 | if (!this.data.disabled) { 113 | var that = this 114 | var changedTouches = e.changedTouches[0]; 115 | var value = 0 116 | if (this.data.orientation == 'landscape') { 117 | value = this.data.max * ((changedTouches.pageX - e.currentTarget.offsetLeft) * this.data.screenRatio / this.data.width) 118 | } else { 119 | value = this.data.max * ((this.data.width - (changedTouches.pageY - e.currentTarget.offsetTop) * this.data.screenRatio) / this.data.width) 120 | } 121 | 122 | // 超出边界时 123 | if (value < 0 || value > this.data.max) { 124 | return 125 | } 126 | if (this.data.percent <= value / this.data.max * 100) { 127 | this.setData({ value: that.data.percent * that.data.max / 100 }) 128 | } else { 129 | this.setData({ value: value }) 130 | } 131 | 132 | let detail = e.changedTouches; 133 | let option = {}; 134 | this.triggerEvent('sliderTap', detail, option); 135 | } 136 | }, 137 | sliderStart: function (e) { 138 | if (!this.data.disabled) { 139 | var that = this 140 | let detail = e.changedTouches; 141 | let option = {}; 142 | var changedTouches = e.changedTouches[0]; 143 | this.setData({ isMonitoring: false }) 144 | if (this.data.sliderStartX == 0) { 145 | this.setData({ sliderStartX: changedTouches.pageX }) 146 | } 147 | if (this.data.sliderStartY == 0) { 148 | this.setData({ sliderStartY: changedTouches.pageY }) 149 | } 150 | if (this.data.startValue == 0) { 151 | var startValue = this.data.value 152 | this.setData({ startValue: startValue }) 153 | } 154 | this.triggerEvent('sliderStart', detail, option); 155 | } 156 | }, 157 | sliderChange: function (e) { 158 | if (!this.data.disabled) { 159 | var changedTouches = e.changedTouches[0]; 160 | // 当前相对值 161 | 162 | var value = 0 163 | if (this.data.orientation == 'landscape') { 164 | value = (changedTouches.pageX - this.data.sliderStartX) * this.data.screenRatio / this.data.width * this.data.max + Number(this.data.startValue) 165 | } else { 166 | value = (this.data.sliderStartY - changedTouches.pageY) * this.data.screenRatio / this.data.width * this.data.max + Number(this.data.startValue) 167 | } 168 | // 超出边界时 169 | if (value < 0) { 170 | value = 0 171 | } 172 | if(value > this.data.max) { 173 | value = this.data.max 174 | } 175 | this.setData ({ value: value }) 176 | let detail = e.changedTouches; 177 | let option = {}; 178 | this.triggerEvent('sliderChange', detail, option); 179 | } 180 | }, 181 | sliderEnd: function (e) { 182 | if (!this.data.disabled) { 183 | this.setData({ isMonitoring: true }) 184 | var that = this 185 | // 如果拉动的幅度比缓冲的值大,则调到缓冲值处播放 186 | if (this.data.percent <= this.data.value / this.data.max * 100) { 187 | this.setData({ value: that.data.percent * that.data.max / 100}) 188 | } 189 | let detail = e.changedTouches; 190 | let option = {}; 191 | this.triggerEvent('sliderEnd', detail, option); 192 | } 193 | }, 194 | sliderCancel: function (e) { 195 | if (!this.data.disabled) { 196 | var that = this 197 | this.setData({ isMonitoring: true }) 198 | if (this.data.percent <= this.data.value / this.data.max * 100) { 199 | this.setData({ value: that.data.percent * that.data.max / 100 }) 200 | } 201 | let detail = e.changedTouches; 202 | let option = {}; 203 | this.triggerEvent('sliderCancel', detail, option); 204 | } 205 | }, 206 | } 207 | }) 208 | -------------------------------------------------------------------------------- /component/wxzx-slider/wxzx-slider.json: -------------------------------------------------------------------------------- 1 | { 2 | "component": true, 3 | "usingComponents": { 4 | "wxzx-progress": "../wxzx-progress/wxzx-progress" 5 | } 6 | } -------------------------------------------------------------------------------- /component/wxzx-slider/wxzx-slider.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /component/wxzx-slider/wxzx-slider.wxss: -------------------------------------------------------------------------------- 1 | .slider { 2 | position: relative; 3 | } 4 | 5 | .slider__progress { 6 | position: absolute; 7 | } 8 | 9 | .slider__line { 10 | position: absolute; 11 | } 12 | 13 | .block { 14 | box-shadow: 0 0 10rpx rgba(0, 0, 0, 0.3); 15 | max-width: 40rpx; 16 | max-height: 40rpx; 17 | min-width: 20rpx; 18 | min-height: 20rpx; 19 | } 20 | 21 | .block__bg { 22 | display: flex; 23 | flex-direction: row; 24 | align-items: center; 25 | justify-content: center; 26 | position: absolute; 27 | } -------------------------------------------------------------------------------- /img/slider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jiemingdev/Slider/0f148c2b7ca6fed4ad03af01466a41b79a8d72b3/img/slider.png -------------------------------------------------------------------------------- /pages/audio/audio.js: -------------------------------------------------------------------------------- 1 | // pages/audio/audio.js 2 | const audioManager = wx.getBackgroundAudioManager() 3 | 4 | Page({ 5 | 6 | /** 7 | * 页面的初始数据 8 | */ 9 | data: { 10 | value: 0, 11 | percent: 0, 12 | max: 401, 13 | pass_time: '00:00', 14 | total_time: '06:41', 15 | pause: '暂停', 16 | pause_disable: true 17 | }, 18 | 19 | secondTransferTime: function (time) { 20 | if (time > 3600) { 21 | return [ 22 | parseInt(time / 60 / 60), 23 | parseInt(time / 60 % 60), 24 | parseInt(time % 60) 25 | ] 26 | .join(":") 27 | .replace(/\b(\d)\b/g, "0$1"); 28 | } else { 29 | return [ 30 | parseInt(time / 60 % 60), 31 | parseInt(time % 60) 32 | ] 33 | .join(":") 34 | .replace(/\b(\d)\b/g, "0$1"); 35 | } 36 | }, 37 | 38 | /** 39 | * 生命周期函数--监听页面加载 40 | */ 41 | onLoad: function (options) { 42 | var that = this 43 | this.wxzxSlider = this.selectComponent("#wxzxSlider"); 44 | audioManager.onTimeUpdate (function () { 45 | if (!that.wxzxSlider.properties.isMonitoring) { 46 | return 47 | } 48 | var currentTime = audioManager.currentTime.toFixed(0); 49 | if (currentTime > that.data.max) { 50 | currentTime = that.data.max; 51 | } 52 | var pass_time = that.secondTransferTime(currentTime); 53 | 54 | that.setData({ 55 | value: currentTime, 56 | pass_time: pass_time, 57 | percent: audioManager.buffered / audioManager.duration * 100, 58 | disabled: false 59 | }) 60 | }) 61 | 62 | audioManager.onWaiting (function () { 63 | that.setData ({ disabled: true }) 64 | }) 65 | 66 | audioManager.onEnded (function () { 67 | that.setData({ 68 | pause: '暂停', 69 | pause_disable: true, 70 | value: 0, 71 | pass_time: '00:00', 72 | percent: 0, 73 | disabled: true 74 | }) 75 | }) 76 | }, 77 | 78 | // 点击slider时调用 79 | sliderTap: function (e) { 80 | console.log("sliderTap") 81 | this.seek() 82 | }, 83 | 84 | // 开始滑动时 85 | sliderStart: function (e) { 86 | console.log("sliderStart") 87 | }, 88 | 89 | // 正在滑动 90 | sliderChange: function (e) { 91 | console.log("sliderChange") 92 | }, 93 | 94 | // 滑动结束 95 | sliderEnd: function (e) { 96 | console.log("sliderEnd") 97 | this.seek() 98 | }, 99 | 100 | // 滑动取消 (左滑时滑到上一页面或电话等情况) 101 | sliderCancel: function (e) { 102 | console.log("sliderCancel") 103 | this.seek() 104 | }, 105 | 106 | seek: function () { 107 | var value = this.wxzxSlider.properties.value 108 | console.log(value) 109 | var seek_time = value.toFixed(0); 110 | var pass_time = this.secondTransferTime(seek_time); 111 | this.setData({ 112 | pass_time: pass_time, 113 | }) 114 | audioManager.seek(Number(seek_time)); 115 | }, 116 | 117 | start: function () { 118 | audioManager.title = '此时此刻' 119 | audioManager.epname = '此时此刻' 120 | audioManager.singer = '许巍' 121 | audioManager.coverImgUrl = 'http://y.gtimg.cn/music/photo_new/T002R300x300M000003rsKF44GyaSk.jpg?max_age=2592000' 122 | audioManager.src = 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46' 123 | this.setData({ pause: '暂停', pause_disable: false }) 124 | }, 125 | 126 | pause: function (e) { 127 | if (audioManager.paused) { 128 | audioManager.play() 129 | this.setData({ pause: '暂停'}) 130 | } else { 131 | audioManager.pause() 132 | this.setData({ pause: '播放' }) 133 | } 134 | }, 135 | 136 | stop: function () { 137 | audioManager.stop() 138 | this.setData({ 139 | pause: '暂停', 140 | pause_disable: true, 141 | value: 0, 142 | pass_time: '00:00', 143 | percent: 0, 144 | disabled: true 145 | }) 146 | }, 147 | 148 | /** 149 | * 生命周期函数--监听页面初次渲染完成 150 | */ 151 | onReady: function () { 152 | 153 | }, 154 | 155 | /** 156 | * 生命周期函数--监听页面显示 157 | */ 158 | onShow: function () { 159 | 160 | }, 161 | 162 | 163 | }) -------------------------------------------------------------------------------- /pages/audio/audio.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "audio", 3 | "usingComponents": { 4 | "wxzx-slider": "../../component/wxzx-slider/wxzx-slider" 5 | } 6 | } -------------------------------------------------------------------------------- /pages/audio/audio.wxml: -------------------------------------------------------------------------------- 1 | 音频播放应用 2 | 3 | 4 | {{pass_time}} 5 | {{total_time}} 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /pages/audio/audio.wxss: -------------------------------------------------------------------------------- 1 | .slider_bg { 2 | width: 100%; 3 | height: 100rpx; 4 | display: flex; 5 | flex-direction: row; 6 | align-items: center; 7 | justify-content: center; 8 | } 9 | 10 | .time_view { 11 | width: 600rpx; 12 | height: 40rpx; 13 | display: flex; 14 | flex-direction: row; 15 | align-items: center; 16 | justify-content: space-between; 17 | margin-left: 75rpx; 18 | font-size: 36rpx; 19 | margin-top: 30rpx; 20 | color: #999; 21 | } -------------------------------------------------------------------------------- /pages/index/index.js: -------------------------------------------------------------------------------- 1 | Page({ 2 | data: { 3 | 4 | }, 5 | 6 | gotoProgress: function (e) { 7 | wx.navigateTo({ 8 | url: '../progress/progress', 9 | }) 10 | }, 11 | 12 | 13 | gotoSlider: function (e) { 14 | wx.navigateTo({ 15 | url: '../slider/slider', 16 | }) 17 | }, 18 | 19 | gotoAudio: function (e) { 20 | wx.navigateTo({ 21 | url: '../audio/audio', 22 | }) 23 | }, 24 | 25 | gotoNewAudio: function () { 26 | wx.navigateTo({ 27 | url: '../newslider/newslider' 28 | }) 29 | } 30 | }) 31 | -------------------------------------------------------------------------------- /pages/index/index.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /pages/index/index.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /pages/index/index.wxss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jiemingdev/Slider/0f148c2b7ca6fed4ad03af01466a41b79a8d72b3/pages/index/index.wxss -------------------------------------------------------------------------------- /pages/logs/logs.js: -------------------------------------------------------------------------------- 1 | //logs.js 2 | const util = require('../../utils/util.js') 3 | 4 | Page({ 5 | data: { 6 | logs: [] 7 | }, 8 | onLoad: function () { 9 | this.setData({ 10 | logs: (wx.getStorageSync('logs') || []).map(log => { 11 | return util.formatTime(new Date(log)) 12 | }) 13 | }) 14 | } 15 | }) 16 | -------------------------------------------------------------------------------- /pages/logs/logs.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "查看启动日志" 3 | } -------------------------------------------------------------------------------- /pages/logs/logs.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{index + 1}}. {{log}} 5 | 6 | 7 | -------------------------------------------------------------------------------- /pages/logs/logs.wxss: -------------------------------------------------------------------------------- 1 | .log-list { 2 | display: flex; 3 | flex-direction: column; 4 | padding: 40rpx; 5 | } 6 | .log-item { 7 | margin: 10rpx; 8 | } 9 | -------------------------------------------------------------------------------- /pages/newslider/newslider.js: -------------------------------------------------------------------------------- 1 | // pages/newslider/newslider.js 2 | Page({ 3 | 4 | /** 5 | * 页面的初始数据 6 | */ 7 | data: { 8 | 9 | }, 10 | 11 | /** 12 | * 生命周期函数--监听页面加载 13 | */ 14 | onLoad: function (options) { 15 | this.wxzxSlider1 = this.selectComponent("#wxzxSlider1"); 16 | this.wxzxSlider2 = this.selectComponent("#wxzxSlider2"); 17 | this.wxzxSlider3 = this.selectComponent("#wxzxSlider3"); 18 | this.wxzxSlider4 = this.selectComponent("#wxzxSlider4"); 19 | this.wxzxSlider5 = this.selectComponent("#wxzxSlider5"); 20 | this.wxzxSlider6 = this.selectComponent("#wxzxSlider6"); 21 | }, 22 | 23 | // 点击slider时调用 24 | sliderTap: function (e) { 25 | console.log(e) 26 | this.consoleValue(e) 27 | }, 28 | 29 | // 开始滑动时 30 | sliderStart: function (e) { 31 | // console.log(e) 32 | }, 33 | 34 | // 正在滑动 35 | sliderChange: function (e) { 36 | // console.log(e) 37 | }, 38 | 39 | // 滑动结束 40 | sliderEnd: function (e) { 41 | console.log(e) 42 | this.consoleValue(e) 43 | }, 44 | 45 | // 滑动取消 (左滑时滑到上一页面或电话等情况) 46 | sliderCancel: function (e) { 47 | console.log(e) 48 | this.consoleValue(e) 49 | }, 50 | 51 | consoleValue: function (e) { 52 | if (e.currentTarget.id == 'wxzxSlider1') { 53 | console.log("slider1 value = " + this.wxzxSlider1.properties.value) 54 | } else if (e.currentTarget.id == 'wxzxSlider2') { 55 | console.log("slider2 value = " + this.wxzxSlider2.properties.value) 56 | } else if (e.currentTarget.id == 'wxzxSlider3') { 57 | console.log("slider3 value = " + this.wxzxSlider3.properties.value) 58 | } else if (e.currentTarget.id == 'wxzxSlider4') { 59 | console.log("slider4 value = " + this.wxzxSlider4.properties.value) 60 | } else if (e.currentTarget.id == 'wxzxSlider5') { 61 | console.log("slider5 value = " + this.wxzxSlider5.properties.value) 62 | } else if (e.currentTarget.id == 'wxzxSlider6') { 63 | console.log("slider6 value = " + this.wxzxSlider6.properties.value) 64 | } 65 | }, 66 | 67 | /** 68 | * 生命周期函数--监听页面初次渲染完成 69 | */ 70 | onReady: function () { 71 | 72 | }, 73 | 74 | /** 75 | * 生命周期函数--监听页面显示 76 | */ 77 | onShow: function () { 78 | 79 | }, 80 | 81 | /** 82 | * 生命周期函数--监听页面隐藏 83 | */ 84 | onHide: function () { 85 | 86 | }, 87 | 88 | /** 89 | * 生命周期函数--监听页面卸载 90 | */ 91 | onUnload: function () { 92 | 93 | }, 94 | 95 | /** 96 | * 页面相关事件处理函数--监听用户下拉动作 97 | */ 98 | onPullDownRefresh: function () { 99 | 100 | }, 101 | 102 | /** 103 | * 页面上拉触底事件的处理函数 104 | */ 105 | onReachBottom: function () { 106 | 107 | }, 108 | 109 | /** 110 | * 用户点击右上角分享 111 | */ 112 | onShareAppMessage: function () { 113 | 114 | } 115 | }) -------------------------------------------------------------------------------- /pages/newslider/newslider.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "newslider", 3 | "usingComponents": { 4 | "wxzx-slider": "../../component/wxzx-slider/wxzx-slider" 5 | } 6 | } -------------------------------------------------------------------------------- /pages/newslider/newslider.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 音效增强器 5 | 6 | 7 | 8 | 9 | +10 dB 10 | 0 dB 11 | -10 dB 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 60Hz 23 | 230Hz 24 | 910Hz 25 | 4kHz 26 | 14kHz 27 | 28 | 29 | 30 | 31 | 环绕声 32 | 33 | 34 | -------------------------------------------------------------------------------- /pages/newslider/newslider.wxss: -------------------------------------------------------------------------------- 1 | .sound_effect_view { 2 | width: 100%; 3 | display: flex; 4 | flex-direction: column; 5 | align-items: center; 6 | } 7 | 8 | .portrait_slider { 9 | margin-top: 30rpx; 10 | width: 600rpx; 11 | height: 100%; 12 | display: flex; 13 | flex-direction: row; 14 | align-items: center; 15 | justify-content: space-between; 16 | font-size: 30rpx; 17 | color: gray; 18 | } 19 | 20 | .title_view1 { 21 | width: 700rpx; 22 | margin-left: 25rpx; 23 | display: flex; 24 | flex-direction: row; 25 | align-items: center; 26 | color: #000; 27 | font-size: 40rpx; 28 | } 29 | 30 | .db_view { 31 | height: 420rpx; 32 | display: flex; 33 | flex-direction: column; 34 | align-items: center; 35 | justify-content: space-between; 36 | } 37 | 38 | .triangle { 39 | width:0; 40 | height:0; 41 | border-width:16rpx 16rpx 0; 42 | border-style:solid; 43 | border-color:gray transparent transparent;/*灰 透明 透明 */ 44 | margin-left: 50rpx; 45 | position:relative; 46 | } 47 | 48 | .hz_view { 49 | margin-top: 20rpx; 50 | width: 500rpx; 51 | margin-left: 120rpx; 52 | display: flex; 53 | flex-direction: row; 54 | align-items: center; 55 | justify-content: space-between; 56 | font-size: 30rpx; 57 | color: gray; 58 | } 59 | 60 | .landspace_slider { 61 | margin-top: 100rpx; 62 | width: 650rpx; 63 | height: 100%; 64 | margin-left: 50rpx; 65 | display: flex; 66 | flex-direction: row; 67 | align-items: center; 68 | justify-content: space-between; 69 | } 70 | 71 | .title_view2 { 72 | color: gray; 73 | font-size: 40rpx; 74 | } 75 | -------------------------------------------------------------------------------- /pages/progress/progress.js: -------------------------------------------------------------------------------- 1 | // pages/progress/progress.js 2 | Page({ 3 | 4 | /** 5 | * 页面的初始数据 6 | */ 7 | data: { 8 | 9 | }, 10 | 11 | /** 12 | * 生命周期函数--监听页面加载 13 | */ 14 | onLoad: function (options) { 15 | 16 | }, 17 | 18 | /** 19 | * 生命周期函数--监听页面初次渲染完成 20 | */ 21 | onReady: function () { 22 | 23 | }, 24 | 25 | /** 26 | * 生命周期函数--监听页面显示 27 | */ 28 | onShow: function () { 29 | 30 | }, 31 | 32 | /** 33 | * 生命周期函数--监听页面隐藏 34 | */ 35 | onHide: function () { 36 | 37 | }, 38 | 39 | /** 40 | * 生命周期函数--监听页面卸载 41 | */ 42 | onUnload: function () { 43 | 44 | }, 45 | 46 | /** 47 | * 页面相关事件处理函数--监听用户下拉动作 48 | */ 49 | onPullDownRefresh: function () { 50 | 51 | }, 52 | 53 | /** 54 | * 页面上拉触底事件的处理函数 55 | */ 56 | onReachBottom: function () { 57 | 58 | }, 59 | 60 | /** 61 | * 用户点击右上角分享 62 | */ 63 | onShareAppMessage: function () { 64 | 65 | } 66 | }) -------------------------------------------------------------------------------- /pages/progress/progress.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "progress", 3 | "usingComponents": { 4 | "wxzx-progress": "../../component/wxzx-progress/wxzx-progress" 5 | } 6 | 7 | } -------------------------------------------------------------------------------- /pages/progress/progress.wxml: -------------------------------------------------------------------------------- 1 | 2 | 默认 3 | 4 | 5 | 百分比 percent='90' 6 | 7 | 8 | 单色 active-color='#ff6600' 9 | 10 | 11 | 渐变色 active-color='#ff6600, #000000' 12 | 13 | 14 | 设置宽度 stroke-width='20',圆角radius='10' 15 | 16 | 17 | 设置背景色 background-color='#3232de' 18 | 19 | 20 | 设置宽度 width='600' 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /pages/progress/progress.wxss: -------------------------------------------------------------------------------- 1 | .bg { 2 | width: 100%; 3 | height: 900rpx; 4 | display: flex; 5 | flex-direction: row; 6 | align-items: center; 7 | justify-content: space-around; 8 | } -------------------------------------------------------------------------------- /pages/slider/slider.js: -------------------------------------------------------------------------------- 1 | // pages/slider/slider.js 2 | Page({ 3 | 4 | /** 5 | * 页面的初始数据 6 | */ 7 | data: { 8 | disabled: false 9 | }, 10 | 11 | /** 12 | * 生命周期函数--监听页面加载 13 | */ 14 | onLoad: function (options) { 15 | 16 | }, 17 | 18 | // 点击slider时调用 19 | sliderTap: function (e) { 20 | console.log("sliderTap") 21 | }, 22 | 23 | // 开始滑动时 24 | sliderStart: function (e) { 25 | console.log("sliderStart") 26 | }, 27 | 28 | // 正在滑动 29 | sliderChange: function (e) { 30 | console.log("sliderChange") 31 | }, 32 | 33 | // 滑动结束 34 | sliderEnd: function (e) { 35 | console.log("sliderEnd") 36 | }, 37 | 38 | // 滑动取消 (左滑时滑到上一页面或电话等情况) 39 | sliderCancel: function (e) { 40 | console.log("sliderCancel") 41 | }, 42 | 43 | /** 44 | * 生命周期函数--监听页面初次渲染完成 45 | */ 46 | onReady: function () { 47 | 48 | }, 49 | 50 | /** 51 | * 生命周期函数--监听页面显示 52 | */ 53 | onShow: function () { 54 | 55 | }, 56 | 57 | /** 58 | * 生命周期函数--监听页面隐藏 59 | */ 60 | onHide: function () { 61 | 62 | }, 63 | 64 | /** 65 | * 生命周期函数--监听页面卸载 66 | */ 67 | onUnload: function () { 68 | 69 | }, 70 | 71 | /** 72 | * 页面相关事件处理函数--监听用户下拉动作 73 | */ 74 | onPullDownRefresh: function () { 75 | 76 | }, 77 | 78 | /** 79 | * 页面上拉触底事件的处理函数 80 | */ 81 | onReachBottom: function () { 82 | 83 | }, 84 | 85 | /** 86 | * 用户点击右上角分享 87 | */ 88 | onShareAppMessage: function () { 89 | 90 | } 91 | }) -------------------------------------------------------------------------------- /pages/slider/slider.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "slider", 3 | "usingComponents": { 4 | "wxzx-slider": "../../component/wxzx-slider/wxzx-slider" 5 | } 6 | } -------------------------------------------------------------------------------- /pages/slider/slider.wxml: -------------------------------------------------------------------------------- 1 | 2 | 静态slider 3 | 4 | 设置宽度stroke-width='20'和圆角radius='10' 5 | 6 | 7 | 8 | 9 | 默认 10 | 11 | 12 | 13 | 14 | 设置缓冲条 percent='60' 15 | 16 | 17 | 18 | 19 | 20 | 21 | 设置宽度 width='600' 并设置slider局屏幕左侧距离slider-left='75' 22 | 23 | 24 | 25 | 26 | 设置当前取值value='40'和最大值max='100' 27 | 28 | 29 | 30 | 31 | 设置前景色 active-color='#ff6600' 32 | 33 | 34 | 35 | 36 | 设置缓冲条颜色 buffer-color='#51C332' 37 | 38 | 39 | 40 | 41 | 设置背景色 background-color='#51C332' 42 | 43 | 44 | 45 | 46 | 47 | 48 | 设置滑块大小 [20, 40] 默认为40 49 | 50 | 51 | 52 | 53 | 设置滑块颜色 54 | 55 | 56 | 57 | 58 | 设置图片滑块blockSrc='../../img/slider.png' 宽度blockImageWidth='54' 高度blockImageHeight='54' 59 | 60 | 61 | 62 | 63 | 动态slider 64 | 设置slider距离屏幕左边距离,默认为0 65 | 66 | 67 | 68 | 69 | disabled='true' 禁用滑动 默认为false 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /pages/slider/slider.wxss: -------------------------------------------------------------------------------- 1 | .slider_bg { 2 | width: 100%; 3 | height: 100rpx; 4 | display: flex; 5 | flex-direction: row; 6 | align-items: center; 7 | justify-content: center; 8 | } -------------------------------------------------------------------------------- /project.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "项目配置文件。", 3 | "setting": { 4 | "urlCheck": true, 5 | "es6": true, 6 | "postcss": true, 7 | "minified": true, 8 | "newFeature": true 9 | }, 10 | "compileType": "miniprogram", 11 | "libVersion": "1.9.93", 12 | "appid": "wx421bde31246f6c15", 13 | "projectname": "Slider", 14 | "condition": { 15 | "search": { 16 | "current": -1, 17 | "list": [] 18 | }, 19 | "conversation": { 20 | "current": -1, 21 | "list": [] 22 | }, 23 | "game": { 24 | "currentL": -1, 25 | "list": [] 26 | }, 27 | "miniprogram": { 28 | "current": -1, 29 | "list": [] 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /utils/util.js: -------------------------------------------------------------------------------- 1 | const formatTime = date => { 2 | const year = date.getFullYear() 3 | const month = date.getMonth() + 1 4 | const day = date.getDate() 5 | const hour = date.getHours() 6 | const minute = date.getMinutes() 7 | const second = date.getSeconds() 8 | 9 | return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':') 10 | } 11 | 12 | const formatNumber = n => { 13 | n = n.toString() 14 | return n[1] ? n : '0' + n 15 | } 16 | 17 | module.exports = { 18 | formatTime: formatTime 19 | } 20 | --------------------------------------------------------------------------------