192 lines
6.8 KiB
JavaScript
192 lines
6.8 KiB
JavaScript
import { driver } from "driver.js";
|
|
import { setCookie, getCookie, WriteCookie } from "@/tool/cookie";
|
|
import "driver.js/dist/driver.css";
|
|
import { useStore } from "vuex";
|
|
//版本一
|
|
let driverIndex__ = 0
|
|
let store
|
|
let element
|
|
let data = {
|
|
index:driverIndex__,
|
|
driver:true,
|
|
}
|
|
const driverObj__ = driver({
|
|
steps: [
|
|
{ element: '.Guide_1_1', popover: { title: 'Title', description: 'Description' } },
|
|
// { element: '.Guide_1_2', popover: { title: 'Title', description: 'Description' } },
|
|
// { element: '.Guide_1_2', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_4', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_5', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_6', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_7', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_8', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_2', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_8', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_10', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_11', popover: { title: 'Title', description: 'Description' } },
|
|
|
|
{ element: '.Guide_1_11_1', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_11', popover: { title: 'Title', description: 'Description' } },
|
|
|
|
{ element: '.Guide_1_8', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_2', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_14', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_15', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_16', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_17', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_18', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_19', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_20', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_21', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_22', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_23', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_24', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_25', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_26', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_27', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_28', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_29', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_30', popover: { title: 'Title', description: 'Description' } },
|
|
{ element: '.Guide_1_16', popover: { title: 'Title', description: 'Description' } },
|
|
],
|
|
// showProgress: true,//控制总页数和当前页数是否显示
|
|
allowClose:false,
|
|
showButtons:false,
|
|
stagePadding:10,//切口到元素的距离
|
|
stageRadius:5,//切口圆弧度
|
|
allowKeyboardControl:true,//控制是否可以键盘控制下一步
|
|
disableActiveInteraction:false,//是否禁用显示元素的交互
|
|
overlayOpacity:.4,
|
|
overlay: true,
|
|
// nextBtnText: '—›',
|
|
// prevBtnText: '‹—',
|
|
doneBtnText: '✕',
|
|
onPopoverRender: (popover, options) => {//每个步骤的元素和所有信息
|
|
// console.log(popover,options);
|
|
if(element){
|
|
element.classList.remove('Guide_')
|
|
}
|
|
popover.previousButton.style.display = 'none'
|
|
let driver = document.querySelector('body')
|
|
if(options.state.activeIndex >= 2 && options.state.activeIndex < 3){
|
|
options.config.stagePadding = 0
|
|
}else{
|
|
options.config.stagePadding = 10
|
|
}
|
|
if(
|
|
// options.state.activeIndex >= 1 && options.state.activeIndex <= 2 ||
|
|
options.state.activeIndex >= 18 && options.state.activeIndex < 19 ||
|
|
options.state.activeIndex >= 24 && options.state.activeIndex < 25 ||
|
|
driverObj__.isLastStep()
|
|
){
|
|
popover.footer.style.display = 'block'
|
|
driver.classList.add('showEvents')
|
|
addDiv(options.state.activeElement)
|
|
}else{
|
|
popover.footer.style.display = 'none'
|
|
removeDiv(options.state.activeElement)
|
|
driver.classList.remove('showEvents')
|
|
}
|
|
// console.log(options.state.activeIndex);
|
|
driverIndex__ = driverObj__.getState().activeIndex
|
|
data = {
|
|
index : driverIndex__,
|
|
driver : true,
|
|
}
|
|
store?.commit("setGuide", data);
|
|
element = options.state.activeElement
|
|
element.classList.add('Guide_')
|
|
|
|
},
|
|
//销毁前
|
|
onDestroyStarted:()=>{
|
|
data = {
|
|
index : driverIndex__,
|
|
driver : false,
|
|
}
|
|
store?.commit("setGuide", data);
|
|
setCookie("isBeginner", false);
|
|
driverObj__.destroy();//销毁方法
|
|
},
|
|
//销毁前
|
|
onDestroyed:()=>{
|
|
},
|
|
|
|
|
|
|
|
// onNextClick:(element, step, options) =>{
|
|
// console.log(element,step,options);
|
|
// driverObj__.moveNext()
|
|
// // element.style.posiiton = 'relative'
|
|
// // const mask = document.createElement('div');
|
|
// // mask.style.position = 'absolute';
|
|
// // mask.style.top = '0';
|
|
// // mask.style.left = '0';
|
|
// // mask.style.width = '100%';
|
|
// // mask.style.height = '100%';
|
|
// // mask.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
|
|
// // mask.style.zIndex = '9999';
|
|
// // element.appendChild(mask);
|
|
// }
|
|
});
|
|
function addDiv(element){
|
|
element.style.posiiton = 'relative'
|
|
const mask = document.getElementsByClassName('driver-mask__')?.[0]
|
|
if(mask){
|
|
}else{
|
|
const mask = document.createElement('div');
|
|
mask.style.position = 'absolute';
|
|
mask.style.top = '0';
|
|
mask.style.left = '0';
|
|
mask.style.width = '100%';
|
|
mask.style.height = '100%';
|
|
mask.style.backgroundColor = 'rgba(0, 0, 0, 0)';
|
|
mask.style.zIndex = '9999';
|
|
mask.classList.add('driver-mask__')
|
|
element.appendChild(mask);
|
|
}
|
|
}
|
|
function removeDiv(element){
|
|
const mask = document.getElementsByClassName('driver-mask__')?.[0]
|
|
if(mask){
|
|
// element.removeChild(mask);
|
|
mask.remove()
|
|
}
|
|
}
|
|
|
|
const openGuide = () =>{
|
|
let isBeginner = JSON.parse(getCookie('isBeginner'))
|
|
let data
|
|
// console.log(isBeginner);
|
|
if(isBeginner){
|
|
driverObj__.drive();
|
|
data = {
|
|
index:driverIndex__,
|
|
driver:true,
|
|
}
|
|
}else{
|
|
driverObj__.destroy();
|
|
data = {
|
|
index:driverIndex__,
|
|
driver:false,
|
|
}
|
|
}
|
|
// driverObj__.destroy();
|
|
driverObj__.drive();
|
|
|
|
data = {
|
|
index:driverIndex__,
|
|
driver:true,
|
|
}
|
|
store = useStore()
|
|
// driverObj__.moveTo(18);
|
|
store?.commit("setGuide", data);
|
|
// driverObj__.moveNext();
|
|
// driverObj__.movePrevious();
|
|
}
|
|
|
|
export{
|
|
openGuide,
|
|
driverObj__,
|
|
driverIndex__,
|
|
} |