封装组件:

<template><div class="base-popup" v-if="isVisible" v-draggable :style="styleConfig"><div class="popup-header"><i></i><span class="popup-title">{{ popupTitle }}</span><span @click="closePopup" class="close-btn"></span></div><div class="popup-content"><slot name="popup_body"></slot></div></div>
</template><script>
export default {props: {//标题popupTitle: "",//样式设置styleConfig: {default: function () {return {width: "717px",top: "12vh",};},},isVisible: {default: false,},closePopup: {type: Function,},},data() {return {curData: {},};},methods: {},
};
</script><style lang="less" scoped>
.base-popup {position: absolute;z-index: 1;left: 30%;//文字不可被选中-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;.popup-header {width: 100%;height: 33px;display: flex;box-sizing: border-box;margin-bottom: 3px;background: url("../../assets/img/home/popup-header.png") no-repeatcenter/100% 100%;cursor: move;i {display: inline-block;width: 32px;height: 33px;margin-right: 10px;background: url("../../assets/img/home/popup-header-icon.png")no-repeat center/100%;margin-top: 1px;}.popup-title {font-size: 18px;line-height: 33px;color: #fff;font-family: 时尚中黑简体;}.close-btn {position: absolute;right: 15px;top: 7px;cursor: pointer;width: 20px;height: 20px;background: url("../../assets/img/home/popup-close.png") no-repeatcenter/100%;}}.popup-content {padding: 12px;height: calc(100% - 36px);min-height: 300px;background-image: linear-gradient(to right, #004554, #001d2d);border: 1px solid #176573;}
}
</style>

定义v-draggable指令:

import Vue from "vue";Vue.directive("draggable", {inserted: function(el) {// el.style.cursor = "move";el.onmousedown = function(e) {if(e.path[0].className ==='popup-header' || e.path[0].className ==='popup-title'){let disx = e.pageX - el.offsetLeft;let disy = e.pageY - el.offsetTop;document.onmousemove = function(e) {let x = e.pageX - disx;let y = e.pageY - disy;let maxX =document.body.clientWidth -parseInt(window.getComputedStyle(el).width);let maxY =document.body.clientHeight -parseInt(window.getComputedStyle(el).height);if (x < 0) {x = 0;} else if (maxX > 0 && x > maxX) {x = maxX;}if (y < 0) {y = 0;} else if (maxY > 0 && y > maxY) {y = maxY;}el.style.left = x + "px";el.style.top = y + "px";};document.onmouseup = function() {document.onmousemove = document.onmouseup = null;};}};}
});

封装头部可拖拽的弹出框相关推荐

  1. 可拖拽的弹出窗口Js插件

    下载地址 jsWindow是一个功能丰富的弹出窗口js插件,创建可拖放,可调整大小的弹出窗口.提醒.确认对话框和消息框在屏幕上. dd:

  2. 2022-05-10 实现一个可拖拽的弹出登录框

    文章目录 要求 思路 完整代码 坐标说明(复习) 效果: 重点代码 要求 点击文字弹出一个带有样式的登录框 按下登录框的标题区域,可以实现拖动 思路 先计算鼠标的移动距离=移动的坐标-按下的坐标再计算 ...

  3. 使用Fancybox实现iframe弹出框

    ​ 前景 公司要求封装一个js来实现一个弹出框的广告,以便外部的平台来调用.正好js~fancybox为我们提供了iframe功能.我们可以直接使用,不用自己去实现. fancybox介绍 官网地址: ...

  4. 弹出框的鼠标拖拽事件

    几个与定位有关的概念: js: clientX/clientY属性:获得事件发生时鼠标指针在视口中的水平和垂直坐标. screenX/screenY属性:获取鼠标事件发生时鼠标光标相对于整个电脑屏幕的 ...

  5. Vue 实现弹框自由拖拽(不出可视范围、解决快速拖动问题)

    Vue 实现弹框自由拖拽(不出可视范围.解决快速拖动问题) 由于页面中弹框很多,往往会挡住想要查看的内容.从而,有了自由移动拖拽弹框的需求:但在使用的过程中发现,一开始编写的drag.js文件会移出可 ...

  6. 原生Js封装的弹出框-弹出窗口-页面居中-多状态可选

    实现了一下功能: 1.title可自定义 可拖拽 2.width height可以自定义 3.背景遮罩和透明度可以自定义 4.可以自己编辑弹出框里的html 5.确定 取消按钮可选 调用方法: 1 P ...

  7. React封装一个组件弹出框

    目录 前言 代码 简要 引用 效果 前言 我是歌谣 放弃很容易 但是坚持一定很酷 为了保证react代码的一个简洁性 最近开始封装组件, 直接上代码 因为都很简单的模式 这边直接进行讲解 代码 //取 ...

  8. 纯js封装一个多功能弹出框

    不借助其它的css代码和图片资源,可直接调用. 原创内容,请勿转载. 注意,不要直接复制文章里的封装代码,因为编辑器的原因,无论怎么编辑,它还是给修改了代码.文末提供了封装代码的下载地址(无需积分) ...

  9. html alter自动弹出,javascript封装alert()弹出框

    由于各个浏览器之间的差异,弹出框不一样,这有影响页面的布局,所以自己就用原声js封装了一个alert弹出框,希望对有需求的有所帮助... ` alert function ok() { alert(' ...

最新文章

  1. C++ 预编译的时候使用defined 的含义
  2. Visual Studio Code Go 插件文档翻译
  3. JAVA用JNI方法调用C代码实现HelloWorld
  4. 《2018-2019全球IPv6支持度白皮书》发布,江北新区IPv6示范区建设正式启动
  5. python 笛卡尔积,排列,组合
  6. mysql(mariadb)常用命令(持续更新ing)
  7. 浅谈微软Windows Server 2012的性能指标
  8. 阿里巴巴发布首个知识引擎研究计划,联合清华浙大等五大高校攻坚AI推理
  9. python面试技巧和注意事项_Python 程序员面试须知须会的5个问题
  10. centos yum方式安装nginx 并支持https
  11. 树莓派之OLED12864视频播放—BadApple
  12. TD-LTE Technology And Its Measurements(TD-LTE 技术及其应用)
  13. google海底光缆图_谷歌地图资讯-2013版“海底光缆地图”发布
  14. 中文字体的FontMetrics解析
  15. 三角网导线平差实例_附合导线平差步骤
  16. Ubuntu搭建Android NDK开发环境并编译Demo
  17. 记录mysql in和not in 效率低下的问题
  18. 要有遥不可及的梦想,也要有脚踏实地的本事
  19. 汇率实时行情查询接口
  20. murmur3 php,murmur: 更快更好的哈希函数

热门文章

  1. Visio删除图形的方法
  2. 计算机视觉基础与模式识别,计算机视觉与模式识别(3)—— FaceMorphing
  3. Ubuntu18.04安装和配置划词翻译软件Goldendict
  4. 如何设置对企业批量的图文档加密?2021企业首选公司文档加密方案,宁波风奥金甲数据防泄漏...
  5. 讨论一下观点.....
  6. 看后很有感触的一篇情感文章mop转的
  7. 腾讯优测亮相2020第二届中国金融CIO年会
  8. 人脸识别 在线音乐,自己开发的一款不太成熟的安卓APP
  9. 3Sum 3Sum Closest 4Sum
  10. Linux使用sed命令删除文件中指定内容