zoukankan      html  css  js  c++  java
  • 动态可拖动天气浮框+拖拽el-dialog

    参考别人的,网址忘记了

    <template>
      <div
        v-show="showWeather"
        class="call-center"
        @mousedown="move"
        @mouseup="moveEnd"
        ref="callCenter"
      >
        <span style="color: black">
          {{ weaCity }}天气<br />
          {{ weaDay }}<br />
          {{ weaDayWeather }}<br />
          <br />
          {{ weaNextDay }}<br />
          {{ weaNextDayWeather }}
        </span>
      </div>
    </template>
    
    <script>
    import New from "../new";
    export default {
      data() {
        return {
          // 按下时的坐标
          startX: "",
          startY: "",
          // 抬起时的坐标
          endX: "",
          endY: "",
          // Weather Tool
          weaCity: "杭州",
          weaDay: "",
          weaNextDay: "",
          weaDayWeather: "",
          weaNextDayWeather: "",
        };
      },
      computed: {
        showWeather: {
          get() {
            let show = true;
            New.$on("expressClickShow", (data) => {
              show = data;
              console.log("Weather Tool---this.showWeather: ", show);
            });
            return show;
          },
          set(test) {
            return test;
          },
        },
      },
      mounted() {
        this.getWeather();
      },
      methods: {
        // get Weather
        getWeather() {
          this.post("/weather/weatherByCityName", {
            cityName: this.weaCity,
          }).then((data) => {
            console.log("data: ", data);
            let str = data.string;
            this.weaDay = str[6];
            this.weaNextDay = str[13];
            this.weaDayWeather = str[5];
            this.weaNextDayWeather = str[12];
          });
        },
        // 拖动窗口,鼠标按下
        move(event) {
          // 给对应div添加拖拽属性
          let callCenter = this.$refs.callCenter;
          callCenter.style.cursor = "move";
          var distanceX = event.clientX - callCenter.offsetLeft;
          var distanceY = event.clientY - callCenter.offsetTop;
          // 获取按下时对应的坐标
          this.startX = event.pageX;
          this.startY = event.pageY;
          document.onmousemove = function (ev) {
            var oevent = ev || event;
            // 加入判断,让浮窗在限定的页面内可拖动
            if (ev.clientX < 40 || ev.clientX > document.body.clientWidth - 30) {
              return;
            }
            if (ev.clientY < 40 || ev.clientY > document.body.clientHeight - 30) {
              return;
            }
            callCenter.style.left = oevent.clientX - distanceX + "px";
            callCenter.style.top = oevent.clientY - distanceY + "px";
          };
          document.onmouseup = function () {
            document.onmousemove = null;
            document.onmouseup = null;
            callCenter.style.cursor = "default";
          };
        },
        // 鼠标抬起触发
        moveEnd(event) {
          // 获取鼠标抬起时的坐标
          this.endX = event.pageX;
          this.endY = event.pageY;
          // 计算按下与抬起位置差值
          var d = Math.sqrt(
            (this.startX - this.endX) * (this.startX - this.endX) +
              (this.startY - this.endY) * (this.startY - this.endY)
          );
          if (d === 0 || d < 7) {
            console.log("执行了点击事件");
            this.showWeather = false;
            New.$emit("expressClickX", true);
          } else {
            console.log("执行了拖拽事件");
          }
        },
      },
    };
    </script>
    
    <style lang="scss" scoped>
    .call-center {
      opacity: 0.7;
      color: #000;
       160px;
      //   height: 160px;
      top: 8%;
      right: 2%;
      //   border-radius: 50%;
      position: fixed;
      z-index: 99999;
      text-align: center;
      background: #eeeeee;
      border: 3px solid rgb(216, 194, 194);
      i {
        display: block;
        font-size: 32px;
        margin-top: 16px;
        color: #606266;
        transition: color 0.15s linear;
      }
    }
    </style>

     应功能需求更新,增加了一个拖拽表单界面的功能。el-dialog的位置由margin-left,margin-top决定(相当于之前的left与top)

    则修改这里

    参考网页

    妙!vue自定义指令实现一个可拖拽对话框(el-dialog专用) (qq.com) 

    人生到处知何似,应似飞鸿踏雪泥。
  • 相关阅读:
    eclipse ve 问题
    NHibernate配置
    JDOM/XPATH编程指南
    win2003的IIS配置的陷阱
    关于setInterval的用法
    用Visio来做工作流定义工具
    分类算法要解决的问题
    win2003 运行 aspx程序出现Temporary ASP.NET Files 访问被拒绝 的解决方法
    ado recordset的一个陷阱
    为ServerXMLHTTP对象的HTTP请求设置超时时间
  • 原文地址:https://www.cnblogs.com/lepanyou/p/15325428.html
Copyright © 2011-2022 走看看