首页 > 其他分享 >Boostrap5通过JS控制Offcanvas的显示隐藏

Boostrap5通过JS控制Offcanvas的显示隐藏

时间:2024-03-14 14:23:33浏览次数:26  
标签:Offcanvas myOffcanvas bootstrap offcanvas JS let Boostrap5 backdrop

涉及的技术栈

  • vue3
  • vite
  • bootstrap5

背景

  • 在用bootstrap5的时候遇到一个问题,就是offcanvas在nav上的时候居然会有两个背景BackDrop,关闭之后页面上还有一个backdrop留在那
  • bootstrap5文档里面提供了几个Method可以控制Offcanvas实例的显示隐藏,但是不会用

复现问题

image

  1. 点击offcanvas中的导航控件,页面正常跳转,但是无法关闭offcanvas
  2. 点击offcanvas外部区域,会多一次backdrop,无法直接关闭

解决方式

参考链接:https://stackoverflow.com/questions/73428036/how-to-hide-bootstrap-offcanvas-in-vue3-when-router-link-is-clicked#:~:text=you have to create an offcanvas instance with,let myOffcanvas %3D document.getElementById('offcanvasDarkNavbar') let bsOffcanvas %3D bootstrap.Offcanvas.getInstance(myOffcanvas)%3B

  1. 跳转无法关闭offcanvas

通过StackOverflow中提供的解决方式

部分offcanvas代码

 <div id="offcanvasNavbar" ref="offcanvasRef" class="offcanvas-start offcanvas">
	<div class="offcanvas-header"></div>
	<div class="offcanvas-body"></div>
</div>

点击跳转链接,触发点击事件的时候,加上这个来隐藏offcanvas
引入bootstrap


import * as bootstrap from 'bootstrap';

hideThisCanvas(){ 
    let myOffcanvas = document.getElementById('offcanvasDarkNavbar');
    let bsOffcanvas = bootstrap.Offcanvas.getInstance(myOffcanvas); 
    bsOffcanvas.hide();
}

通过ref的方式试了一下对我这里好像没什么用,所以就直接通过查询DOM来获取offcanvas的实例了

  1. 自动关闭offcanvas无法关闭多出来的backdrop
    image

为什么一个offcanvas会有俩backdrop,我也还没明白为啥,文档里面的示例都只有一个backdrop来的

所以目前就通过在关闭offcanvas的时候,再调用一下删除所有backdrop的方法了

在@click的事件里面同时传入点击事件实例

<ul class="dropdown-menu">
    <li><a class="dropdown-item bi bi-file-image" @click="jump($event, '/path1')">套图</a></li>
    <li><a class="dropdown-item bi bi-file-richtext" @click="jump($event, '/path2')">图文</a>
    </li>
</ul>
    removeDocumentBackdrops(e) {
        let list = document.getElementsByClassName('offcanvas-backdrop');
        for (let i = 0; i < list.length; i++) {
            list[i].remove();
        }
    },

一通百通

上述过程也可以应用到Bootstrap其他的组件上,调用对应的method控制组件状态

  1. 引入import * as bootstrap from 'bootstrap';
  2. 初始化组件 bootstrap.Offcanvas.getInstance(myOffcanvas);

注意 bootstrap有些组件可能没有

标签:Offcanvas,myOffcanvas,bootstrap,offcanvas,JS,let,Boostrap5,backdrop
From: https://www.cnblogs.com/LinKinSJ/p/18072740

相关文章

  • fastjson改造
    背景fastjson太过于侧重性能,对于部分高级特性支持不够,而且部分自定义特性完全偏离了json和js规范导致和其他框架不兼容;fastjson文档缺失较多,部分Feature甚至没有文档,而且代码缺少注释较为晦涩;fastjson的CVEbug监测较弱,很多CVE数据库网站上有关fastjson的CVE寥寥无几,例如近......
  • 2024HVV行动-进军蓝中研判(log4j2、fastjson、Struts2、Shiro)
    1、log4j2特征:恶意请求中包含JNDI协议地址,如"ldap://"、"rmi://"等,被log4j2解析为JNDI查找。原理:在日志输出中,未对字符进行严格的过滤,执行了JNDI协议加载的远程恶意脚本,从而造成远程代码执行。影响:严重的RCE,2.0≤ApacheLog4j2<2.15.0-rc2攻击字段:${jndi......
  • vue中 lang="ts"与js的区别
    `lang="ts"`与`js`的区别在于指定了脚本语言的类型,其中:-`lang="ts"`指定了TypeScript,一种由微软开发的JavaScript的超集,提供了静态类型检查等功能,使得代码更加健壮和可维护。-`js`则指定了JavaScript,是一种脚本语言,用于在网页上实现动态交互效果,是前端开发中最常用......
  • Node.js毕业设计办公用品管理系统(Express)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着信息技术的飞速发展,企业对于办公效率和资源管理的要求越来越高。传统的办公用品管理方式主要依赖人工记录和统计,这种方式不仅效率低下,而且容易出现错误......
  • Node.js毕业设计办公用品管理系统(Express)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在现代办公环境中,办公用品的管理是一个不可忽视的环节。传统的管理方式通常依赖于人工记录和统计,不仅效率低下,而且容易出错。随着信息技术的发展,越来越多的......
  • 【JS】Promise.all实现所有接口加载完成loading关闭
    将每个请求封装成promise对象,当请求到数据后都resolve出去,再调用Promsie.all方法将每个promise对象作为参数传入进去。这样每个api的promise对象状态都resolve“解决后”,就能在Promise.all([p1,p2…p]).then中拿到所有api请求完成的状态,从而实现效果。created(){t......
  • 2024-03-07-Nodejs(1-Node基础)
    1.初识Nodejs1.1思考为什么js可以在浏览器中被执行?浏览器中具备js解析引擎,其中chrome浏览器的v8引擎最优。为什么js可以操作DOM和BOM?每个浏览器都内置了DOM和BOM这样的api函数,因此浏览器中的js才可以调用它们。js运行环境运行环境是指代码正常运行所必须的环境。......
  • 2024-03-11-Nodejs(3-数据库与身份验证)
    3.数据库与身份验证3.1数据库基本概念数据库是用来组织、存储和管理数据的仓库;传统数据库中,数据结构分为数据库(database)、数据表(table)、数据行(tow)、字段(field)四大部分。3.2配置mysql模块安装mysql模块npminstallmysql建立连接constmysql=require('mysql')......
  • 2024-03-08-Nodejs(2-Express)
    2.Express​ 基于Node.js平台,快速、开放、极简的Web开发框架,Express是用于快速创建服务器的第三方模块。2.1基本使用#安装expressnpminstallexpressconstexpress=require("express");//创建web服务器constapp=express();//监听客户端的GET和POST......
  • 2024-03-11-Nodejs(4-大事件项目)
    4.大事件项目4.1项目初始化项目整体架构图大事件项目 |--- db | |---index.js |---router | |---user.js |---router_handler | |---user.js |---schema | |---user.js |---app.js |---config.js4.1.1创建项目新建api_server文件夹作为项目......