实现带刻度滑尺

wxml 布局

<view><view class="value">{{value}}</view><scroll-view scroll-x="true" bindscroll="bindscroll" scroll-left="{{scrollLeft}}"><canvas canvas-id="canvas-ruler" id="canvas-ruler"style="height: {{canvasHeight}}px; width: {{canvasWidth}}px;"></canvas></scroll-view><canvas canvas-id="canvas-cursor" id="canvas-cursor"></canvas>
</view>

wxss 样式

page {display: flex;flex-direction: column;
}/* value */
.value {color: #48c23d;font-size: 100rpx;text-align: center;line-height: 140rpx;
}/* value单位 */
.value:after {font-size: 16px;color: gray;content: 'mmhg';margin-left: 5px;
}/* 画布 */
#canvas-ruler {width: 1000px;/*height: 80px;*//*border: 1px solid #ccc;*/
}/* 游标 */
#canvas-cursor {width: 100%;height: 40px;/*border: 1px solid #cc1;*/
}

js

var that;
var deltaX = 0;
var minValue = 1;
var app = getApp();
Page({data: {value: 0,canvasHeight: 80},onLoad: function (options) {that = this;// 绘制标尺that.drawRuler();// 绘制三角形游标that.drawCursor();},drawRuler: function() {/* 1.定义变量 */// 1.1 定义原点与终点,x轴方向起点与终点各留半屏空白var origion = {x: app.screenWidth / 2, y: that.data.canvasHeight};var end = {x: app.screenWidth / 2, y: that.data.canvasHeight};// 1.2 定义刻度线高度var heightDecimal = 50;var heightDigit = 25;// 1.3 定义文本标签字体大小var fontSize = 20;// 1.4 最小刻度值// 已经定义在全局,便于bindscroll访问// 1.5 总刻度值var maxValue = 200;// 1.6 当前刻度值var currentValue = 20;// 1.7 每个刻度所占位的pxvar ratio = 10;// 1.8 画布宽度var canvasWidth = maxValue * ratio + app.screenWidth - minValue * ratio;// 设定scroll-view初始偏移that.setData({canvasWidth: canvasWidth,scrollLeft: (currentValue - minValue) * ratio});/* 2.绘制 */// 2.1初始化contextconst context = wx.createCanvasContext('canvas-ruler');// 遍历maxValuefor (var i = 0; i <= maxValue; i++) {context.beginPath();// 2.2 画刻度线context.moveTo(origion.x + (i - minValue) * ratio, origion.y);// 画线到刻度高度,10的位数就加高context.lineTo(origion.x + (i - minValue) * ratio, origion.y - (i % ratio == 0 ? heightDecimal : heightDigit));// 设置属性context.setLineWidth(2);// 10的位数就加深context.setStrokeStyle(i % ratio == 0 ? 'gray' : 'darkgray');// 描线context.stroke();// 2.3 描绘文本标签context.setFillStyle('gray');if (i % ratio == 0) {context.setFontSize(fontSize);// 为零补一个空格,让它看起来2位数,页面更整齐context.fillText(i == 0 ? ' ' + i : i, origion.x + (i - minValue) * ratio - fontSize / 2, fontSize);}context.closePath();}// 2.4 绘制到contextcontext.draw();},drawCursor: function () {/* 定义变量 */// 定义三角形顶点 TODO xvar center = {x: app.screenWidth / 2, y: 5};// 定义三角形边长var length = 20;// 左端点var left = {x: center.x - length / 2, y: center.y + length / 2 * Math.sqrt(3)};// 右端点var right = {x: center.x + length / 2, y: center.y + length / 2 * Math.sqrt(3)};// 初始化contextconst context = wx.createCanvasContext('canvas-cursor');context.moveTo(center.x, center.y);context.lineTo(left.x, left.y);context.lineTo(right.x, right.y);// fill()填充而不是stroke()描边,于是省去手动回归原点,context.lineTo(center.x, center.y);context.setFillStyle('#48c23d');context.fill();context.draw();},bindscroll: function (e) {// deltaX 水平位置偏移位,每次滑动一次触发一次,所以需要记录从第一次触发滑动起,一共滑动了多少距离deltaX += e.detail.deltaX;var value = (- deltaX / 10 + minValue).toFixed(1)if (value < 0.01) {value = 0;} else if (value >= 200.0) {value = 200.0;}// 数据绑定that.setData({value: value});// console.log(deltaX)},
});

转载至 https://my.oschina.net/huangxiujie/blog/865634

微信小程序 实现带刻尺度滑块相关推荐

  1. 小程序提交表单mysql_GitHub - kun19911227/minipro: 微信小程序提交带图片的表单

    minipro 微信小程序提交带图片的表单 目录说明 upload_images ├── pages │ ├── upload_info 提交表单 │ └── display_info 信息展示 ├─ ...

  2. 微信小程序轮播图中间变大_微信小程序实现带放大效果的轮播图

    本文实例为大家分享了微信小程序实现带放大效果的轮播图,供大家参考,具体内容如下 效果如图 WXML WXSS .Carousel{ margin-top: 49px; background-color ...

  3. 微信小程序中带参数返回上一页的方法总结(三种)

    本篇文章给大家带来的内容是关于微信小程序中带参数返回上一页的方法总结(三种),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 方法一 把当前页面数据放入本地缓存( wx.setStor ...

  4. 微信小程序获取带表情的微信名乱码问题

    微信小程序获取带表情的微信名乱码问题 在后台获取完微信用户数据后,对微信名进行UTF-8编码 URLEncoder.encode(nickName, "utf-8") ,将编码后的 ...

  5. 微信小程序组件 —— 带搜索功能的选择器

    微信小程序组件 -- 带搜索功能的选择器 效果 组件 search-picker 文件 wxml 文件: <view class="search-picker">< ...

  6. 微信流媒体直播java_微信小程序直播带货教程

    微信小程序直播带货教程 微信小程序正式推出直播带货组件,很多正在使用 "api工厂" 的用户,这几天一直在问,现有小程序如何使用直播带货的功能,需要不需要做很复杂的改动?是否需要重 ...

  7. 微信小程序路径带参数跳转

    微信小程序路径带参数跳转 release_con: function () {console.log(this.data.cateid)wx.navigateTo({url: '/pages/rele ...

  8. 【微信小程序】带你做一个公众号留言系统(附源码)

    公众号留言小程序正式开源,文章底部有源码获取方式. 我当时就用微信小程序做了一个留言助手,用了大约一个月左右的时间,留言系统的基本功能包括留言.点赞.筛选.置顶.删除.关联多个公众号等,只需要把小程序 ...

  9. 微信小程序自带地图_小程序丨教你:如何打开小程序如何打开微信自带的地图(附源码)...

    教你小程序系列教程:教你小程序系列教程: 1.教你:微信小程序如何实现scroll-view隐藏滚动条 2.教你:如何使用scroll-view组件实现视图垂直滚动(附源码) 3.教你:小程序如何使用 ...

  10. android 微信小程序 gps 飘,微信小程序 自带 GPS 定位的坑

    微信小程序打卡定位调试了一天始终差五百多米.百度坐标转换各种问题都找了都没问题,最终发现是小程序自带定位有问题,文档里也没有写,大坑. const getLocation = function(cal ...

最新文章

  1. 【UOJ 92】有向图的强连通分量
  2. ECMAscript6(ES6)新特性语法总结(一)
  3. ios项目中使用gcd的场景_Redis在PHP项目中的实际应用场景
  4. Spring 框架 DAO 与 事务 的总结
  5. 动态规划实战篇--斐波那契数列
  6. win10设置保护色
  7. 计算机word加边框,Word2010怎样为段落加上边框
  8. 2020春节假期延长至正月初九(2月2日)
  9. 推荐10 款 C++ 在线编译器
  10. 今日头条信息流投放:今日头条怎么开户?多少钱?投放需要注意什么
  11. 技巧 | 把光驱拆了,装个固态硬盘,让渣渣电脑复活
  12. ActiveMQ学习 (一) JSM基本概念
  13. 新房子没网络,怎么用光猫和路由器上网
  14. 中国软件与IT外包产业以印度为镜
  15. C++学生信息管理系统(纯代码)
  16. oracle运维积累
  17. python -------re模块
  18. 博图V16和人机界面仿真为啥不成功啊,哪位大哥麻烦看下
  19. R语言使用levels参数重新排序因子水平级别
  20. 利用OSG实现模拟飞机尾迹-粒子系统

热门文章

  1. 林达华推荐有关机器学习的数学书籍
  2. 大学c语言机试是老师阅卷么,最近,我们找了一些老师聊了聊
  3. 职高的计算机平面设计一般学什么,职高形象设计学什么
  4. 杀戮空间2服务器修改地图,《杀戮空间2》新地图全任务完成方法图文详解
  5. 大数据周周看:金融科技公司融360赴美IPO,小蓝单车人去楼空,用户押金退还困难
  6. 微信中的用户ID(openid和unionid)
  7. linux 翻录cd,Linux下一个CD翻录 创CUE 压缩flac攻略
  8. HTML无法显示下一页,为何我的浏览器不能直接打开下一页
  9. 倾斜摄影文件和BIM文件加入iServer
  10. 用c语言屏蔽鼠标键盘,用VBS屏蔽键盘和鼠标