前端网页文本选中出现一个反馈按钮,鼠标点击之后可以进行文档反馈

最近有一个需求,就是增强文档的反馈能力,类似于腾讯云文档一样,如图:


当我们选中一些文本之后,会有一个 文档反馈的 tooltip 提示框,点击之后会有表单提交,不过这个文档技术比较牛的点就是,点击反馈提示框之后,还会自动截屏,存放图片,方便管理者查看。

参考文章

先放出参考文章吧,还是 css 世界作者大佬的,虽然时间是 2011 年,但是那会实现的到现在依旧还是可以的,如果大家能看懂的话,可以直接看参考文章即可。

js页面文字选中后分享到新浪微博实现

我的解决代码

以下仅个人使用代码,大部分情况能够通用,最终效果得根据具体业务来落地,仅供参考。

var selectContent = '';
let selectedText = '';
let isFirstClick = true;

// 以下部分是获取选中文本,为什么再加一个函数获取?

// 1.大佬代码是函数内的
// 2.大佬代码当我点击出现弹框的时候,txt 会变为 '',获取不到选中文本了
document.onselectionchange = () => {
    const selection = document.getSelection();
    try {
        if (selection && selection.rangeCount > 0) {
            selectedText = selection.toString();
        } else {
            selectedText = '';
        }
    } catch (error) {
        console.log(error);
    }
};
document.addEventListener("mouseup", (e) => {
    if (selectedText.length > 0 && selectedText !== '' && isFirstClick) {
        selectContent = selectedText;
        isFirstClick = false;
    } else {
        selectedText = '';
        isFirstClick = true;
    }
});

// ----------- 分割线 ----------

var docsFeedBackFn = function (eleShare, eleContainer) {
    eleContainer = eleContainer || document;
    var funGetSelectTxt = function () {
        var txt = "";
        if (document.selection) {
            txt = document.selection.createRange().text; // IE
        } else {
            txt = document.getSelection();
        }
        return txt.toString();
    };
    eleContainer.onmouseup = function (e) {
        e = e || window.event;
        var txt = funGetSelectTxt(),
            sh = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
        var left = (e.clientX - 40 < 0) ? e.clientX + 20 : e.clientX - 40,
            top = (e.clientY - 40 < 0) ? e.clientY + sh + 20 : e.clientY + sh - 40;
        // 这个是我个人需求所需,根据需要改变
        const asideMenuLeftDom = document.getElementById('asideMenuLeft');
        if (txt) {
            eleShare.style.display = "block";
            eleShare.style.position = 'absolute';
            // 这个增减宽度是我个人需求所需,根据需要改变
            eleShare.style.left = left - asideMenuLeftDom.clientWidth - 130 + "px";
            // 这个增减宽度是我个人需求所需,根据需要改变
            eleShare.style.top = top - 130 + "px";
        } else {
            eleShare.style.display = "none";
        }
    };
    eleShare.onclick = function () {
        // 个人需求所需,根据需要改变
        const $this = $(this);
        // xxx 点击之后弹窗
    };
};
// 执行函数
docsFeedBackFn(document.getElementById('一般是选中之后出现的反馈按钮 ID'), document.getElementsByClassName('需要就填某个 className 或者 id 啥的,不需要就不传')[0]);

学如逆水行舟,不进则退

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一百个Chocolate

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值