• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > uniapp怎么实现小程序页面的自由拖拽功能

uniapp怎么实现小程序页面的自由拖拽功能

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了uniapp拖拽功能,小程序页面拖拽,自由拖拽等相关知识,希望对您有所帮助

uniapp怎么实现小程序页面的自由拖拽功能?下面本篇文章给大家介绍一下uniapp实现小程序页面自由拖拽组件的方法,希望对大家有所帮助!


先看实现效果:


uniapp怎么实现小程序页面的自由拖拽功能


实现过程

根据查阅文档,要实现拖拽功能,大概有三种方式:

1.给需要实现拖拽的元素监听catchtouchmove事件,动态修改样式坐标

这种方式最容易想到,通过js监听触摸位置动态修改元素坐标。但是拖拽是一个实时性要求非常高的操作,你不能说在这个操作里面去设置节流函数减少setData操作,并且本身每次setData操作也是比较耗性能的,很容易造成拖拽卡顿,这个方案可以首先排除。

2.movable-area + movable-view

movable-area组件的作用是定义一个区域,在这个区域内的movable-view的组件可以被用户自由的移动,同时movable-view可以轻松设置放大缩小效果。根据组件定义,可以想到它的使用场景大概是在页面局部区域内对一些元素拖拽缩放,这个与我们想要的在整个页面进行自由拖拽的需求不符。

3.wxs响应事件

wxs是专门用来解决有频繁交互的场景,它直接在视图层运行,免去了视图层跟逻辑层通信带来的性能损耗,实现流畅的动画效果。详见:wxs响应事件 。根据wxs的使用场景,基本能确定我们要的功能实现应该使用wxs方案。


代码实现

我们使用的是uniapp框架,查阅uniapp文档,官方直接提供了一个自由拖拽的代码案例,链接点击这里。

直接拿官方的代码示例改造一番,如下:

<template>    <view catchtouchmove="return">        <view @click="play" @touchstart="hudun.touchstart" @touchmove="hudun.touchmove" @touchend="hudun.touchend">            <canvas id="lottie-canvas" type="2d" style="width: 88px; height: 102px;"></canvas>        </view>    </view></template> <script module="hudun">    var startX = 0    var startY = 0    var lastLeft = 20    var lastTop = 20     function touchstart(event, ins) {        ins.addClass('expand')        var touch = event.touches[0] || event.changedTouches[0]        startX = touch.pageX        startY = touch.pageY    }         function touchmove(event, ins) {        var touch = event.touches[0] || event.changedTouches[0]        var pageX = touch.pageX        var pageY = touch.pageY        var left = pageX - startX + lastLeft        var top = pageY - startY + lastTop        startX = pageX        startY = pageY        lastLeft = left        lastTop = top        ins.selectComponent('.movable').setStyle({            right: -left + 'px',            bottom: -top + 'px'        })    }         function touchend(event, ins) {        ins.removeClass('expand')    }         module.exports = {        touchstart: touchstart,        touchmove: touchmove,        touchend: touchend    }</script> <script>    import lottie from 'lottie-miniprogram'    let insList = {} // 存放动画实例集合    export default {        props: {            tag: String        },        data() {            return {                isPlay: true,            }        },        methods: {            init() {                const query = uni.createSelectorQuery().in(this)                query.select('#lottie-canvas').fields({ node: true, size: true }).exec((res) => {                    const canvas = res[0].node                    const context = canvas.getContext('2d')                    const dpr = uni.getSystemInfoSync().pixelRatio                    canvas.width = res[0].width * dpr                    canvas.height = res[0].height * dpr                    context.scale(dpr, dpr)                    lottie.setup(canvas)                    const ins = lottie.loadAnimation({                        loop: true,                        autopla
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • uniapp怎么实现小程序页面的自由拖拽功能

相关文章

  • PhotoShop制作简单的炫光残破文字效果教程
  • JavaScript怎么检测当前浏览器是无头浏览器
  • YII如何将对象转化为数组或直接输出为json格式
  • WordPress通过加密隐藏wp-login/admin后台默认登录地址
  • Javascript怎么检查对象是否为空
  • 如何解决微信支付php7.0错误问题
  • 如何解决Nginx部署thinkphp时报错500问题
  • ThinkPHP5框架实现多数据库连接
  • 四种Laravel ORM开启created_at的方法
  • AI打造牛仔布料纹理

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 为kindsoft编辑器替换SyntaxHighlighter代码高亮,整合
    • php htmlentities 乱码怎么办
    • HTML用JS导出Excel的五种方法
    • 如何区分PHP中intval()与(int)
    • DedeCMS关键词替换问题较完美解决方案
    • Photoshop创建梦幻迷离的彩虹背景
    • 在SQL查询中GROUP BY的含义是什么?
    • LayUI如何实现数据分页功能
    • Photoshop设计3D效果的月牙状LOGO
    • Photoshop绘制超强质感立体按钮

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有