小程序实现图片移动缩放效果


Posted in Javascript onMay 26, 2020

本文实例为大家分享了小程序实现图片移动缩放效果的具体代码,供大家参考,具体内容如下

git地址 , 如果对您有帮助给个start呗

尝试了movable-view标签是很方便, 但是我想有个拉伸按钮去缩放图片, 于是尝试自己写了.
思想利用catchtouchmove属性计算偏移量, 实时更新坐标

小程序实现图片移动缩放效果

以下是完整代码

js

/**
 * All right by NieYinlong
 */

Page({

 /**
 * 页面的初始数据
 */
 data: {
 bgBoxHeight: 400, // 背景的高度
 bgBoxWidth: 320, // 背景的宽度
 
 moveImgLeft: 40,
 moveImgTop: 80,
 moveImgH: 100,
 moveImgW: 100,

 scaleIconFixWidth: 30,
 scaleLeft: 0,    // 拉伸按钮默认x坐标 (拉伸按钮默认宽高30)
 scaleTop: 0,    // 拉伸按钮默认y坐标
 },

 /**
 * 生命周期函数--监听页面加载
 */
 onLoad: function (options) {
 const halfWidth = this.data.scaleIconFixWidth / 2
 this.setData({
  scaleLeft: this.data.moveImgLeft + this.data.moveImgW - halfWidth,
  scaleTop: this.data.moveImgTop + this.data.moveImgH - halfWidth
 })
 },

 // 图片移动
 moveImgTouchmove: function(e) {
 console.log(e)
 let pageX = e.changedTouches[0].pageX
 let pageY = e.changedTouches[0].pageY
 
 
 // (this.data.moveImgW / 2)是因为触摸放到中间位置
 let toLeft = pageX - this.data.moveImgW / 2; 
 let toTop = pageY - this.data.moveImgH / 2;

 const halfWidth = this.data.scaleIconFixWidth / 2

 // 限制x左边不能出边框
 if (pageX - (this.data.moveImgW / 2) <= 0) {
  return;
 }
 
 // 限制右边不能出超过边框
 if ((pageX + (this.data.moveImgW / 2)) >= (this.data.bgBoxWidth)) {
  return;
 }

 // 限制top
 if (pageY - (this.data.moveImgH / 2) <= 1) {
  return;
 }

 // 限制bottom
 if ((pageY + (this.data.moveImgH / 2)) >= this.data.bgBoxHeight) {
  return;
 }


 this.setData({
  moveImgLeft: toLeft,
  moveImgTop: toTop,
  scaleLeft: toLeft + this.data.moveImgW - halfWidth,
  scaleTop: toTop + this.data.moveImgH - halfWidth
 })
 },
 
 // 拉伸按钮移动
 scaleTouchmove: function (e) {
 console.log(e)
 let pageX = e.changedTouches[0].pageX
 let pageY = e.changedTouches[0].pageY
 const halfWidth = this.data.scaleIconFixWidth / 2
 let toLeft = pageX - halfWidth // 减去halfWidth是拉伸按钮宽度的一半
 let toTop = pageY - halfWidth

 
 let changedW = pageX - this.data.moveImgLeft
 let changedH = pageY - this.data.moveImgTop

 // 限制最moveImg小尺寸
 if (toLeft <= (this.data.moveImgLeft + halfWidth)) {
  return;
 }
 if (toTop <= (this.data.moveImgTop + halfWidth)) {
  return;
 }

 // 限制moveImg最大尺寸
 if(pageX - this.data.moveImgLeft > 250) {
  // 宽度达到最大值
  return;
 }
 if (pageY - this.data.moveImgTop > 250) {
  // 高度达到最大值
  return;
 }

 // 限制拉伸按钮的right
 if(this.data.scaleLeft + this.data.scaleIconFixWidth >= this.data.bgBoxWidth) {
  return;
 }
 // 限制拉伸按钮的bottom
 if (this.data.scaleTop + this.data.scaleIconFixWidth >= this.data.bgBoxHeight) {
  return;
 }

 this.setData({
  scaleLeft: toLeft,
  scaleTop: toTop,
  moveImgW: pageX - this.data.moveImgLeft,
  moveImgH: pageY - this.data.moveImgTop,
 })
 },

})

wxml

<view 
 class='bgBox' 
 style="height:{{bgBoxHeight}}px; width:{{bgBoxWidth}}px"
>
 <image 
 class='movedImg'
 src='../../image/moveImg.png'
 catchtouchmove='moveImgTouchmove'
 style="width:{{moveImgW}}px;height:{{moveImgH}}px; left:{{moveImgLeft}}px;top:{{moveImgTop}}px"
 />
 
 <image 
 src='../../image/spreadIcon.png'
 class='scaleIcon'
 catchtouchmove='scaleTouchmove'
 style="width:{{scaleIconFixWidth}}px;height:{{scaleIconFixWidth}}px; left:{{scaleLeft}}px; top:{{scaleTop}}px"
 />
</view>

wxss

.bgBox {
 border: 2px solid green;
 height: 400px;
 width: 99vw;
}

.movedImg {
 position: absolute;
 border: 3px dotted rgb(255, 166, 0);
}

.scaleIcon {
 position: absolute;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS 文件大小判断的实现代码
Apr 07 Javascript
js运动框架_包括图片的淡入淡出效果
May 11 Javascript
jquery中通过父级查找进行定位示例
Jun 28 Javascript
javascript自定义的addClass()方法
May 28 Javascript
jQuery实现简易的天天爱消除小游戏
Oct 16 Javascript
第二章之Bootstrap 页面排版样式
Apr 25 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
May 16 Javascript
Vue实现双向绑定的方法
Dec 22 Javascript
mint-ui 时间插件使用及获取选择值的方法
Feb 09 Javascript
bootstrap中selectpicker下拉框使用方法实例
Mar 22 Javascript
js中的 || 与 &amp;&amp; 运算符详解
May 24 Javascript
Vuex实现简单购物车
Jan 10 Vue.js
jQuery实现的分页插件完整示例
May 26 #jQuery
js实现时间日期校验
May 26 #Javascript
Node.js API详解之 assert模块用法实例分析
May 26 #Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
May 26 #Javascript
js校验开始时间和结束时间
May 26 #Javascript
vue实现简单跑马灯效果
May 25 #Javascript
Js和VUE实现跑马灯效果
May 25 #Javascript
You might like
PHP 柱状图实现代码
2009/12/04 PHP
php中全局变量global的使用演示代码
2011/05/18 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
php学习笔记之面向对象
2014/11/08 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
JS简单实现文件上传实例代码(无需插件)
2013/11/15 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
jquery实现上传图片功能
2020/06/29 jQuery
Python列表append和+的区别浅析
2015/02/02 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
python opencv设置摄像头分辨率以及各个参数的方法
2018/04/02 Python
解决Django中多条件查询的问题
2019/07/18 Python
使用python切片实现二维数组复制示例
2019/11/26 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
Python爬虫之Selenium实现关闭浏览器
2020/12/04 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
会计辞职信范文
2014/01/15 职场文书
高中军训感言400字
2014/02/24 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
2014年学生会工作总结
2014/11/07 职场文书
储备店长岗位职责
2015/04/14 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
详解JavaScript中Arguments对象用途
2021/08/30 Javascript
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers