【
<!-- 悬浮朗读结束 下次丢了单独复制这段即可 -->
==============<!-- 悬浮朗读结束 下次丢了单独复制这段即可 -->111111111111111111====================================================
【<!-- 悬浮朗读机器人 全局生效 放footer最底部 / 刷新自动显示 -->
<style>
#duBox{position:fixed;bottom:25px;right:25px;z-index:999999;}
#duBtn{width:55px;height:55px;border-radius:50%;background:#0066cc;color:#fff;border:none;font-size:22px;cursor:pointer;box-shadow:0 2px 10px #999;}
#duPanel{position:absolute;bottom:65px;right:0;background:#fff;border:1px solid #eee;padding:15px;border-radius:8px;display:none;width:160px;}
.duItem{display:block;width:100%;margin:5px 0;padding:7px;border:none;border-radius:4px;cursor:pointer;}
.duRead{background:#0066cc;color:#fff;}
.duStop{background:#666;color:#fff;}
.duHide{background:#ccc;color:#333;}
</style>
<div id="duBox">
<button id="duBtn"></button>
<div id="duPanel">
<button class="duItem duRead" id="startDu">朗读文章</button>
<button class="duItem duStop" id="stopDu">停止朗读</button>
<button class="duItem duHide" id="hideDu">临时隐藏</button>
</div>
</div>
<script>
var synth = window.speechSynthesis;
document.getElementById('duBtn').onclick=function(){
let p = document.getElementById('duPanel');
p.style.display = p.style.display=='block'?'none':'block';
}
// 朗读
document.getElementById('startDu').onclick=function(){
synth.cancel();
// 只读文章内容,不乱读菜单标题
let txt = document.querySelector('.content,.article-content,#content')?.innerText || document.body.innerText;
txt = txt.trim();
if(!txt){alert("无内容可朗读");return;}
let r = new SpeechSynthesisUtterance(txt);
r.lang="zh-CN";
r.rate=1;
synth.speak(r);
document.getElementById('duPanel').style.display='none';
}
// 停止
document.getElementById('stopDu').onclick=function(){
synth.cancel();
}
// 临时隐藏 刷新复原
document.getElementById('hideDu').onclick=function(){
document.getElementById('duBox').style.display='none';
}
// 点击别处关闭面板
document.addEventListener("click",function(e){
if(!document.getElementById('duBox').contains(e.target)){
document.getElementById('duPanel').style.display='none';
}
})
</script>
<!-- 悬浮朗读结束 下次丢了单独复制这段即可 -->
】
============<!-- 悬浮朗读结束 下次丢了单独复制这段即可 -->222222222222222222======================================================
【<!-- 悬浮朗读机器人 全局生效 放footer最底部 / 刷新自动显示 -->
<style>
#duBox{position:fixed;bottom:25px;right:25px;z-index:999999;}
#duBtn{width:55px;height:55px;border-radius:50%;background:#0066cc;color:#fff;border:none;font-size:22px;cursor:pointer;box-shadow:0 2px 10px #999;}
#duPanel{position:absolute;bottom:65px;right:0;background:#fff;border:1px solid #eee;padding:15px;border-radius:8px;display:none;width:160px;}
.duItem{display:block;width:100%;margin:5px 0;padding:7px;border:none;border-radius:4px;cursor:pointer;}
.duRead{background:#0066cc;color:#fff;}
.duStop{background:#666;color:#fff;}
.duHide{background:#ccc;color:#333;}
</style>
<div id="duBox">
<button id="duBtn"></button>
<div id="duPanel">
<button class="duItem duRead" id="startDu">朗读文章</button>
<button class="duItem duStop" id="stopDu">停止朗读</button>
<button class="duItem duHide" id="hideDu">临时隐藏</button>
</div>
</div>
<script>
var synth = window.speechSynthesis;
document.getElementById('duBtn').onclick=function(){
let p = document.getElementById('duPanel');
p.style.display = p.style.display=='block'?'none':'block';
}
// 朗读
document.getElementById('startDu').onclick=function(){
synth.cancel();
// 只读文章内容,不乱读菜单标题
let txt = document.querySelector('.content,.article-content,#content')?.innerText || document.body.innerText;
txt = txt.trim();
if(!txt){alert("无内容可朗读");return;}
let r = new SpeechSynthesisUtterance(txt);
r.lang="zh-CN";
r.rate=1;
synth.speak(r);
document.getElementById('duPanel').style.display='none';
}
// 停止
document.getElementById('stopDu').onclick=function(){
synth.cancel();
}
// 临时隐藏 刷新复原
document.getElementById('hideDu').onclick=function(){
document.getElementById('duBox').style.display='none';
}
// 点击别处关闭面板
document.addEventListener("click",function(e){
if(!document.getElementById('duBox').contains(e.target)){
document.getElementById('duPanel').style.display='none';
}
})
</script>
<!-- 悬浮朗读结束 下次丢了单独复制这段即可 -->
】
刀神