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


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 相关文章推荐
jcarousellite.js 基于Jquery的图片无缝滚动插件
Dec 30 Javascript
js抽奖实现随机抽奖代码效果
Dec 02 Javascript
js父页面与子页面不同时显示的方法
Oct 16 Javascript
原生JavaScript实现异步多文件上传
Dec 02 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
Apr 06 Javascript
Javascript实现图片不间断滚动的代码
Jun 22 Javascript
JS打印组合功能
Aug 04 Javascript
jstree的简单实例
Dec 01 Javascript
JS实现网页抢购功能(触发,终止脚本)
Nov 27 Javascript
vue 导航内容设置选中状态样式的例子
Nov 01 Javascript
JavaScript实现缓动动画
Nov 25 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
Jan 06 Javascript
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 文件夹删除、php清除缓存程序
2009/08/25 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
详解PHP归并排序的实现
2016/10/18 PHP
PHP实现截取中文字符串不出现?号的解决方法
2016/12/29 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
php源码的使用方法讲解
2019/09/26 PHP
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
重写javascript中window.confirm的行为
2012/10/21 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
vue实现文字加密功能
2019/09/27 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
python中操作文件的模块的方法总结
2021/02/04 Python
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
军训自我鉴定100字
2014/02/13 职场文书
党员对照检查材料思想汇报
2014/09/16 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
2014乡镇干部对照检查材料思想汇报
2014/09/26 职场文书
2014年超市工作总结
2014/11/19 职场文书
学校2014年度工作总结
2014/12/06 职场文书
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python