首页 > 其他分享 >【快应用】任意拖动图标实现案例

【快应用】任意拖动图标实现案例

时间:2022-12-08 11:25:10浏览次数:63  
标签:clientX clientY console name 拖动 案例 changedTouches TouchEvent 图标

​ 

问题背景:

快应用页面开发阶段,ui布局时总是会遇到要在页面上实现一个可以任意拖动的导航栏,且在拖动时不能超出屏幕和导航栏不能在到边界时被压缩。一些开发者就会被困住了,这里就介绍一个实现导航栏的一个简易方式。

 

方案:

1、通过block实现组件堆叠效果,使得image图标位于list组件上方,并将image的样式设置为“position: fixed”。

2、通过监听image组件的touchmove触摸事件实现动态设置其位置,具体可参见“通用事件”中的“touchmove事件”和“TouchEvent类型说明”。

3、device.getInfoSync获取页面的宽高来设置边界,保证导航栏不会滑到屏幕外。

 

实现代码:

<template>

  <div class="item-container">

    <block>

      <!-- <stack> -->

      <div class="container">

        <list class="list" style="height: 100px" for="{{this.dataList}}">

          <list-item class="list-item" type="content">

            <text>{{ $item.name }}</text>

          </list-item>

        </list>

      </div>

      <image id="img" style="position: fixed;left: {{this.clientX}};top:{{this.clientY}}" class="image" src="/Common/logo.png" ontouchmove="touchmove"></image>

      <!-- </stack> -->

    </block>

  </div>

</template>

<style>

  .item-container {

    margin-bottom: 50px;

    flex-direction: column;

  }

  .container {

    flex-direction: column;

  }

  .list {

    flex-direction: column;

  }

  .image {

    border-radius: 100px;

    height: 150px;

  }

  .list-item {

    border: 1px solid #c21f1f;

  }

</style>

<script>

  import device from '@system.device';

  export default {

    data: {

      clientX: "",

      clientY: "",

      width: 0,

      height: 0,

      dataList: [

        { name: "Language" },

        { name: "Maths" },

        { name: "English" },

        { name: "PE" },

        { name: "History" },

        { name: "Geography" },

        { name: "Science" },

        { name: "Physics" },

        { name: "Chemical" },

        { name: "Biology" },

        { name: "Music" },

        { name: "Art" },

        { name: "Language1" },

        { name: "Maths1" },

      ]

    },

    onInit: function () {

      this.$page.setTitleBar({ text: "Long press to drag the icon" });

      console.info("Application onInit");

    },

    onShow(options) {

      console.info("Application onShow");

      const res = device.getInfoSync();

      this.width = res.windowLogicWidth

      this.height = res.windowLogicHeight

      console.info("hjj", typeof this.width);

    },

    onHide(options) {

      console.info("Application onHide");

    },

    touchmove: function (TouchEvent) {

      console.log(JSON.stringify(TouchEvent.changedTouches));

      this.clientX = (TouchEvent.changedTouches[0].clientX - 75) + "px"

      this.clientY = (TouchEvent.changedTouches[0].clientY - 75) + "px"

      console.log("clientX = " + TouchEvent.changedTouches[0].clientX);

      console.log("clientY = " + TouchEvent.changedTouches[0].clientY);

      if ((TouchEvent.changedTouches[0].clientX - 75) <= 0) {

        this.clientX = 0 + "px"

      }

      if ((TouchEvent.changedTouches[0].clientY - 75) <= 0) {

        this.clientY = 0 + "px"

      }

      if ((TouchEvent.changedTouches[0].clientX) >= this.width - 75) {

        this.clientX = 600 + "px"

      }

      if ((TouchEvent.changedTouches[0].clientY) >= this.height - 75) {

        this.clientY = 1230 + "px"

      }

 

    }

  };

</script>

​欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

标签:clientX,clientY,console,name,拖动,案例,changedTouches,TouchEvent,图标
From: https://www.cnblogs.com/developer-huawei/p/16965575.html

相关文章

  • 【案例分享】跨机房ES同步实战
    作者:谢泽华​背景众所周知单个机房在出现不可抗拒的问题(如断电、断网等因素)时,会导致无法正常提供服务,会对业务造成潜在的损失。所以在协同办公领域,一种可以基于同城或异地......
  • 宕机分析案例
    朴英敏:用crash工具分析Linux内核死锁的一次实战通过这个案例,学习ARM64环境下的参数推导,以及死锁的分析方法,其中值得学习的是在当读写锁被读者持有时,由于owner不会记录......
  • Docker学习6-Docker镜像commit操作案例
    在上一篇中,我们知道了docker是基于联合文件系统的分层镜像。而且也知道了镜像是只读的,容器才是可以写的。那么,如果我们要修改镜像,修改之后,怎么提交呢?本文,凯哥将介绍,docker......
  • SpringMVC —— RESTful案例
    案例:基于RESTful页面数据交互         ......
  • chromium-106-log-修改图标
    关键目录chrome/app/themevector_icons修改chromium的图标后重新编译即可。favicon_ntp.png新标签页的图标16✖16product.icon提示消息设置locationbar里的图标有多......
  • 项目案例丨EtherCAT转PROFINET网关与欧姆龙伺服器应用
    西门子S7-1200/1500系列的PLC,需要连接带EtherCAT的通讯功能的伺服驱动器等设备。西门子的PLC采用PROFINET实时以太网通讯协议,要连接EtherCAT转PROFINET的设备,就必须进行通......
  • 凸函数的判断方法及案例
    目录:凸集、凸函数、单峰函数、拟凸函数凸集:凸集中的任意两点的连线仍然处于凸集中。凸函数:任意两点之间的函数图像都在弦的下方。凸函数的判别方法:https://blog.csdn.ne......
  • Spring5框架概述、入门案例
    最核心的莫过于IOC和Aop。也是面试经常问到的地方、面试中几乎必定会问到spring模块1、Spring5框架概述1、Spring是==轻量级==的开源的JavaEE框架2、Spring可......
  • python实操案例__03--python定向爬虫之淘宝商品比价
    写在前面,本教程仅为技术学习与交流使用,禁止恶意使用。1基本步骤1.1对淘宝网页进行提取模拟浏览器免登录进入defgetHTMLText(url):try:#由于淘宝的防爬虫,所以......
  • BOM操作、DOM操作、查找标签、操作节点、获取值操作、class与css操作、事件、事件实战
    目录BOM操作DOM操作查找标签操作节点获取值操作class与css操作事件事件实战案例jQuery类库标签对象与jQuery对象BOM操作BOM(BrowserObjectModel)是指浏览器对象模型,它使......