vue3 锚点定位双向滚动 加v-show

这篇具有很好参考价值的文章主要介绍了vue3 锚点定位双向滚动 加v-show。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

onMounted(() => {
getversion()//版本数据
gettreeData()//左侧树的数据
})

// 更新日志
const conview = ref(true)
const updatedata = ref()
const updatelog = () => {
let aparams = {
versionId: versionValue.value
}
queryDocumentUpdateLog(aparams).then(({ data, status, message }) => {
if (status == 200) {
updatedata.value = data.body
conview.value = false
} else {
ElMessage({
type: ‘error’,
message,
})
}
})
}

// 左侧选择版本选择
const versionValue = ref()
// 版本数据
const versionOptions = ref()
const getversion = () => {
queryVersion({}).then(({ data, status, message }) => {
versionOptions.value = data.body
versionValue.value = data.body[data.body.length - 1].id
}).then(() => {
getdoc()//右侧文档数据
})
}

// 左侧树的数据
const treeData = ref()
const gettreeData = () => {
queryDocumentDirectory({}).then(({ data, status, message }) => {
if (status == 200) {
treeData.value = data.body
} else {
ElMessage({
type: ‘error’,
message,
})
}
})
}
// 左侧树结构
const oneshow = ref(‘1-1’)//第一层
const openonelevel = (num) => {
if (num == oneshow.value) {
oneshow.value = ‘1’
twoshow.value = ‘2’
threeshow.value = ‘3’
} else {
oneshow.value = num
twoshow.value = ‘2’
threeshow.value = ‘3’
}
}
const twoshow = ref(‘2-1’)//第二层
const opentwolevel = (num) => {
if (num == twoshow.value) {
twoshow.value = ‘2’
threeshow.value = ‘3’
} else {
twoshow.value = num
threeshow.value = ‘3’
}
}
const threeshow = ref(‘3-1’)//第三层
const openthreelevel = (num, id) => {
if (!conview.value) {
conview.value = true
}

if (num == threeshow.value) {
    threeshow.value = '3'
} else {
    threeshow.value = num
    let aa = `#anchor_${id}`

    setTimeout(() => {
        document.querySelector(aa).scrollIntoView({
            behavior: "smooth",
            block: 'start'
        });
    }, 100);
}

}
// 文档回显
const anchorRef = ref()
const handleScroll = () => {
const navContents = document.querySelectorAll(‘.anchor_item’)
const offsetTopArr = []
const offsetTopids = []
navContents.forEach((item) => {
offsetTopArr.push(item.offsetTop)
offsetTopids.push(item.id)
})
const scrollTop = anchorRef.value.scrollTop
let aindex = null
offsetTopArr.forEach((item, index) => {
if (scrollTop >= item - 170) {
aindex = index
}
})
for (let x = 0; x < treeData.value.length; x++) {
for (let y = 0; y < treeData.value[x].children.length; y++) {
for (let z = 0; z < treeData.value[x].children[y].children.length; z++) {
let aname = ‘anchor_’ + treeData.value[x].children[y].children[z].id
let bname = offsetTopids[aindex]
if (aname == bname) {
oneshow.value = treeData.value[x].level
twoshow.value = treeData.value[x].children[y].level
threeshow.value = treeData.value[x].children[y].children[z].level
}
}
}
}
}
// 返回
const backmata = () => {
conview.value = true
}

// 右侧文档数据
const matadoc = ref()
const getdoc = () => {
let aparams = {
versionId: versionValue.value
}
queryDocumentDetail(aparams).then(({ data, status, message }) => {
if (status == 200) {
matadoc.value = data.body
} else {
ElMessage({
type: ‘error’,
message,
})
}
})
}
// 表格头部的颜色
const tabstyle = () => {
let aa = {
background: ‘#F3F5FF’, color: ‘#000’, fontSize: ‘14px’, fontFamily: ‘PingFang SC-Medium, PingFang SC’, fontWeight: 600, color: ‘#292A2E’,
}
return aa
}

// 下载文档
const downpdf = () => {
//超出canvas限度打印
var pages = document.querySelector(‘#pdfContent’).children;
exportHTMLToPDF(pages, ‘模板’)

//正常打印
// htmlToPdf('#pdfContent', '模板')

// window打印
// window.print();

}
const exportHTMLToPDF = (pages, name) => {
//超出canvas限度打印函数
const opt = {
margin: [0, 0],
filename: name + ‘.pdf’,
image: {
type: ‘jpeg’,
quality: 0.98
},
html2canvas: {
dpi: 192,
scale: 2,
letterRendering: true
},
jsPDF: {
unit: ‘mm’,
format: ‘a3’,
orientation: ‘landscape’
}
};
var worker = html2pdf()
for (let i = 0; i < pages.length; i++) {
console.log(pages[i]);
worker = worker.set(opt).from(pages[i]).toContainer().toCanvas().toPdf().get(‘pdf’).then((pdf) => {
if (i < pages.length - 1) { // Bump cursor ahead to new page until on last page
pdf.addPage();
}
});
}
worker.save();
}
// const htmlToPdf = (el, name) => {
// //正常打印
// let ele = document.querySelector(el);

// let opt = {
// margin: 1,
// filename: name + ‘.pdf’,
// image: {
// type: ‘jpeg’,
// quality: 0.98
// },
// html2canvas: {
// scale: 2,
// dpi: 92,
// },
// jsPDF: {
// unit: ‘in’,
// format: ‘letter’,
// orientation: ‘portrait’
// }
// };
// html2pdf().set(opt).from(ele).save();

// }
文章来源地址https://www.toymoban.com/news/detail-494323.html

到了这里,关于vue3 锚点定位双向滚动 加v-show的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue 中 v-if 和 v-show 的区别

    v-if  和  v-show  是 Vue.js 中常用的条件渲染指令,它们的作用是根据条件来控制元素的显示与隐藏。 格式也差不多: 当 isShow 为 true 时显示当前元素,为 false 时隐藏 虽然它们的效果类似,但是它们在实现原理和使用场景上有一些区别。 1. 实现原理: v-if :根据条件动态添加

    2024年02月16日
    浏览(33)
  • Vue.js 中的 v-if 和 v-show 有什么区别?

    在 Vue.js 中,v-if 和 v-show 都是用来控制元素的显示和隐藏的指令。但是,它们之间有一些区别。本文将深入探讨 v-if 和 v-show 的区别,并给出一些相关的代码示例。 v-if 是一种条件渲染指令,它根据表达式的值来决定是否渲染元素。如果表达式的值为 true,那么元素将被渲染;

    2024年02月08日
    浏览(47)
  • vue中v-if和v-show的区别和使用场景

            问题:v-if和v-show我们都经常用来控制某一部分内容的显示与隐藏,那么其具体区别是什么呢? 1.v-if v-if是通过增添和删除DOM来控制元素的显示与隐藏的 当判断值为true时在DOM树中加入该DOM元素 当判断值为false时在DOM树中删除该DOM元素  2.v-show v-show是通过改变该元素

    2024年02月03日
    浏览(32)
  • vue: v-show 和 v-if 指令控制盒子的显示隐藏

    1. v-show     语法:  v-show=\\\"布尔值\\\"    (true显示, false隐藏)     原理:  实质是在控制元素的 css 样式,  `display: none;` 2. v-if       语法: v-if=\\\"布尔值\\\"   (true显示, false隐藏)     原理:  实质是在动态的 创建 或者 删除 元素节点 应用场景:          1. 如果是频繁的切换显

    2024年02月09日
    浏览(59)
  • uni-app+ts----微信小程序锚点定位 、自动吸顶、滚动自动选择对应的锚点(点击tab跳转对应的元素位置)

    html代码部分 重点是给元素加入【 :id=“‘item’ + item.id”】 2.JS代码部分

    2024年02月21日
    浏览(66)
  • vue基础知识六:v-show和v-if有什么区别?使用场景分别是什么?

    一、v-show与v-if的共同点 我们都知道在 vue 中 v-show 与 v-if 的作用效果是相同的(不含v-else),都能控制元素在页面是否显示 在用法上也是相同的 当表达式为true的时候,都会占据页面的位置 当表达式都为false时,都不会占据页面位置 二、v-show与v-if的区别 控制手段不同 编译过程

    2024年02月09日
    浏览(39)
  • 实现锚点定位功能(React/Vue)

    最近接到一个需求,修改某某页面,增加XXX功能,并实现个锚点功能。做产品就是不断优化,增加功能的过程。实现锚点的方式很多, 很多UI库也提供了组件,可以根据自己的需求调整一下组件库也可以实现,也可以用 a href=\\\"XX\\\" / 标签实现,还可以基于 scrollIntoView api实现。

    2024年01月22日
    浏览(38)
  • FE_Vue学习笔记 条件渲染[v-show v-if] & 列表渲染[v-for] 列表过滤 列表排序

    使用template可以使其里面的内容在html的结构中不变。条件渲染: v-if 1)v-if=“表达式” 2)v-else-if=“表达式” 3)v-else {} 适用于:切换频率较低的场景。特点:不展示的DOM元素直接被移除。注意:v-if可以和v-else-if、v-else一起使用,但要求结构不能被“打断”。 v-show 写法:

    2024年02月05日
    浏览(39)
  • 小程序中display:flex和v-show,v-show不生效,uni-app

    小程序中display:flex和v-show,v-show不生效、、 解决方案: display:flex样式的优先级高于了v-show ,v-show其实就是display:none,display:flex优先级高于display:none。 使用 :style=“判断对象?‘’:‘display:none;’”

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包