实现点击空白处或其他任意地方隐藏元素功能

 此处只展示了大佬的其中一种方法,还有另外两种方法,详情请看:https://www.cnblogs.com/zheroXH/p/11724588.html

第一种方式:最普通的手动监听判断
<span ref="projectButton">
	<el-popover v-model="visible" trigger="manual" placement="bottom" @show="show" @hide="hide">
	  <p>啦啦啦</p>
	  <el-button slot="reference" type="primary" @click="visible = !visible">show</el-button>
	</el-popover>
</span>


data () {
 return {
    visible: false
  }
},
methods: {
  show () {
    document.addEventListener('click', this.hidePanel, false)
  },
  hide () {
    document.removeEventListener('click', this.hidePanel, false)
  },
  hidePanel (e) {
    if (!this.$refs.projectButton.contains(e.target)) {
      this.visible = false
      this.hide()
    }
  }
}

上面就是在 Popover show 的时候监听 document 的 click 事件,触发进入 hidePanel 方法,判断当前点击的 el 是否在 Popover 内部,如果不在,则手动 hide Popover ,并且移除监听事件。

❗❗❗ 注意,ref用在el组件上是没有contains方法的(亲测,用在el-card上就没有),所以如果想用在el组件上就得在外层套一个div,在div上设置ref。

要在HTML5中实现点击图片后,让图片放大并且悬浮在主页面上的效果,可以按照下面的方式来进行设计和编码。 ### 具体步骤: #### 1. **HTML 结构** 首先建立一个用于展示图片的基础框架,并且准备一个容器专门放置放大的图象。这里我们先隐藏这个大图的显示区域。 ```html <div> <img id="smallImage" src="example.jpg" alt="小尺寸示例"> </div> <!-- 预留的大图层 --> <div id="overlay" style="display:none;position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,0.7);"> <img id="largeImage" src="" alt="大尺寸示例" style="max-width:90%;max-height:80%;margin:auto;display:block;"> </div> ``` #### 2. **CSS 样式** 设定覆盖层(`#overlay`)的相关样式让它能够完全遮盖住整个屏幕同时居中显示其中的内容 - 即被点击之后放大的那张照片。 ```css /* 设置背景半透明度 */ #overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.7); } /* 让大图水平垂直均布于中央 */ #largeImage{ max-width: 90%; max-height: 80%; margin: auto; display: block; } ``` #### 3. **JavaScript 功能** 编写脚本来响应用户的互动行为,当他们点击较小版本的照片时加载更大的版本并展现出来;此外还需要考虑关闭机制,允许用户再次单击空白处退出查看模式。 ```javascript // 获取相关DOM节点引用 var smallImg = document.getElementById('smallImage'); var overlay = document.getElementById('overlay'); var largeImg = document.getElementById('largeImage'); function showLargeImage(event){ // 更新大图源地址与当前所选一致 var imgSrc = event.target.src; if(imgSrc && imgSrc.length > 0) { largeImg.src=imgSrc; // 显示覆盖层及其内部大图 overlay.style.display='flex'; // 监听文档任意位置的点击事件来判定是否应取消视图 window.addEventListener('click', hideOnBackgroundClick ); } }; // 定义隐藏函数 function hideOnBackgroundClick(e){ const targetElement=e.target; // 只有在非目标元素本身其后代范围内才执行消失逻辑 if(!targetElement.closest('#overlay')){ overlay.style.display='none'; // 移除先前绑定的全局侦测器避免资源浪费 window.removeEventListener('click',hideOnBackgroundClick ); } } // 给原始小图注册点击回调处理程序 smallImg.onclick=showLargeImage ; ``` 上述代码演示了怎样构建这样一个系统:用户点按小型预览图像会弹出相应完整版高分辨率图像供浏览,并可通过再度点触任意外围空域迅速返回常规界面布局之中去。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值