RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-569286

Stepanov's questions

Martin Hope
Stepanov
Asked: 2023-10-10 05:30:13 +0000 UTC

如何修改几乎可以工作的脚本,通过拖放在页面上实现替代滚动条?javascript

  • 5

简而言之:我想实现一种替代系统滚动条的滚动条。

如果您在 FF 中运行代码,您可以清楚地看到一切似乎都正常工作,但是通过拖动滑块(DragElement函数)进行滚动非常慢;如果您没有为该事件分配实现滚动的尝试,则拖动滑块的-n-drop几乎可以完美地工作。

在 Chromium 上,使用滑块滚动就像我将其放入嵌套函数 ( closeDragElement ) 中一样,即 拖放按预期工作,但滚动仅在onmouseup完成后才起作用,而不是实时的。

为了图片的清晰和完整,我将保留其余的代码。

功能说明:

1.altScroll(e) ——通过鼠标滚轮实现滚动(FF专用,对隐藏滚动条不友好)

2.CorrectPos() - 类似“橡胶”滚动条的实现

3.DragElement(elmnt) - 主题本身(他们仍然这么说吗?)

4.const btnUp - 用于将页面滚动到开头的按钮(我监视了该函数,所以我不知道他们为什么将其写入常量,如果有人解释,我将不胜感激)

5.Ymonitor() - 监视器坐标清晰

6.SlideByScroll() - 好吧,如果我无法实现通过滑块滚动,那么通过滚动条滑动就可以了:))

从我的想法来看:似乎拖放和滚动无法几乎同时划分触发器和触发,因此滑块的行为很奇怪,但我不知道如何在它们之间设置延迟,我知道使用setTimeout是正在完成,但我不明白在哪里以及如何推动它。

UPD:总的来说,我还没有找到解决方案,但我想到最好将滑块位置与滚动位置在所有情况下和在一个方向上链接起来,即 仅滚动slider,要更改滑块的位置,请使用拖放操作和鼠标滚轮。现在,用鼠标滚轮滚动取决于滑块位置对沿 Y 轴滚动量的依赖,但以友好的方式,我希望滚动量仅取决于滑块的位置。当我朝这个方向努力时,我要求您给出与问题中的代码具体相关的答案。谢谢你!

帮助我弄清楚:我的工作方向正确吗?看来我离实现还差一行代码。我不是要求你为我写信,我知道这在这里不受欢迎,我要求你提供临别赠言或引导性问题。

预先感谢您的回答!

PS 在网站上的代码片段中,代码的工作方式与在浏览器中的工作方式不同((

window.addEventListener("wheel", altScroll);
         
    function altScroll(e) {
      
     let delta = e.deltaY
     if (delta > 0) {
      window.scrollTo({
            top: window.scrollY+75,
            left: 0,
            behavior: 'auto'
          }); 
     } else { window.scrollTo({
            top: window.scrollY-75,
            left: 0,
            behavior: 'auto'
          });

     }     
    } 
window.addEventListener("load", CorrectPos());

    function CorrectPos() {

        let windowHeight = window.innerHeight;

        let SliderendsHeight = window.getComputedStyle(scrollbarTop, null).getPropertyValue("height");
        SliderendsHeight = parseFloat(SliderendsHeight);
        let minYvalue = ((windowHeight-(windowHeight*0.95))+SliderendsHeight*2)/2;
        minYvalue = minYvalue.toFixed(3);

        document.getElementById("scrollbarSlider").style.top = minYvalue+"px";

        let endsHeight = window.getComputedStyle(altScrollbarTop, null).getPropertyValue("height");
        endsHeight = parseFloat(endsHeight);
        endsHeight = endsHeight*2
        let allScrollHeight = windowHeight*0.95;
        let allScrollCenterHeight = allScrollHeight-endsHeight;
        let allScrollTop = (windowHeight - allScrollHeight)/2;

        document.getElementById("altScrollbarCenter").style.height = allScrollCenterHeight + "px";

        document.getElementById("altScrollbar").style.height = allScrollHeight + "px";

        document.getElementById("altScrollbar").style.top = allScrollTop + "px"; 


       addEventListener("scroll",() =>{

        let windowHeight = window.innerHeight;
        let endsHeight = window.getComputedStyle(altScrollbarTop, null).getPropertyValue("height");
        endsHeight = parseFloat(endsHeight);
        endsHeight = endsHeight*2
        let allScrollHeight = windowHeight*0.95;
        let allScrollCenterHeight = allScrollHeight-endsHeight;
        let allScrollTop = (windowHeight - allScrollHeight)/2;

        document.getElementById("altScrollbarCenter").style.height = allScrollCenterHeight + "px";

        document.getElementById("altScrollbar").style.height = allScrollHeight + "px";

        document.getElementById("altScrollbar").style.top = allScrollTop + "px";
          
        });        
        
      }
DragElement(document.getElementById("scrollbarSlider"));

      function DragElement(elmnt) {


      var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;

      elmnt.onmousedown = dragMouseDown;

      function dragMouseDown(e) {
    e = e || window.event;
    // get the mouse cursor position at startup:
    pos3 = e.clientX;
    pos4 = e.clientY;
    document.onmouseup = closeDragElement;
    // call a function whenever the cursor moves:
    document.onmousemove = elementDrag;
  }

  function elementDrag(e) {
    e = e || window.event;
    // calculate the new cursor position:
    pos1 = pos3 - e.clientX;
    pos2 = pos4 - e.clientY;
    pos3 = e.clientX;
    pos4 = e.clientY;

    let SliderRight = window.getComputedStyle(scrollbarSlider, null).getPropertyValue("right"); 
    SliderRight = parseFloat(SliderRight);

    let SliderHeight = window.getComputedStyle(scrollbarSlider, null).getPropertyValue("height"); 
    SliderHeight = parseFloat(SliderHeight);

    let fullField = Math.max( document.body.scrollHeight, document.body.offsetHeight, document.body.clientHeight, document.body.scrollHeight);

    let windowHeight = window.innerHeight;

    let pageScrollRange = fullField - windowHeight;

    let SliderendsHeight = window.getComputedStyle(scrollbarTop, null).getPropertyValue("height");
    SliderendsHeight = parseFloat(SliderendsHeight);
    SliderendsHeight - SliderendsHeight*2;
    let minYvalue = ((windowHeight-(windowHeight*0.95))+SliderendsHeight)/2;

    let scrollbarRange = windowHeight-minYvalue-SliderHeight;
    
    scrollbarRange = parseInt(scrollbarRange);
    minYvalue = minYvalue.toFixed(3);

    let getSliderPos = parseFloat(elmnt.style.top);

    if (getSliderPos<minYvalue) { 
     elmnt.style.top = minYvalue + "px"; 
     elmnt.style.right = SliderRight + "px";
      } else {
        if (getSliderPos>scrollbarRange) {
        elmnt.style.top = scrollbarRange + "px"; 
        elmnt.style.right = SliderRight + "px";
    }     else{
            elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; 
            elmnt.style.right = SliderRight + "px";
    }
   } 

  let getCurrentRange = getSliderPos*pageScrollRange/scrollbarRange;
  
  window.scrollTo({
            top: getCurrentRange,
            left: 0,
            behavior: 'auto'
          });                   
  }

  function closeDragElement() {


    /* stop moving when mouse button is released:*/
    document.onmouseup = null;
    document.onmousemove = null;
  }
  elmnt.ondragstart = function() {
  return false;
};
}

const btnUp = {
      el: document.querySelector('.arrowbg'),
      show() {
        
        this.el.classList.remove('hidebtn');
      },
      hide() {
        
        this.el.classList.add('hidebtn');
      },
      addEventListener() {
        
        window.addEventListener('scroll', () => {
          
          let scrollY = window.scrollY || document.documentElement.scrollTop;
          
          scrollY > 400 ? this.show() : this.hide();
        });
        document.querySelector('.arrowbg').onclick = () => {
          
          window.scrollTo({
            top: 0,
            left: 0,
            behavior: 'smooth'
          });
        }
      }
    }
    btnUp.addEventListener();
function Ymonitor(){

  let fF = Math.max( document.body.scrollHeight, document.body.offsetHeight, document.body.clientHeight, document.body.scrollHeight);


    document.getElementById('Ymntr').value = window.pageYOffset+";"+"\n"+fF+";"+"\n"+document.body.scrollWidth+";"+"\n"+"\n"+window.innerWidth+";"+"\n"+window.innerHeight+";";


    addEventListener('scroll', () =>{
    document.getElementById('Ymntr').value = window.pageYOffset+";"+"\n"+fF+";"+"\n"+document.body.scrollWidth+";"+"\n"+"\n"+window.innerWidth+";"+"\n"+window.innerHeight+";";
  });
 }

 window.addEventListener("load", Ymonitor());
window.addEventListener("load", SlideByScroll());


  function SlideByScroll() {
  
   addEventListener('scroll', () =>{

   let currentRange = window.pageYOffset;

   let fullField = Math.max( document.body.scrollHeight, document.body.offsetHeight, document.body.clientHeight, document.body.scrollHeight);

   let windowHeight = window.innerHeight;

   let pageScrollRange = fullField - windowHeight;

   let SliderendsHeight = window.getComputedStyle(scrollbarTop, null).getPropertyValue("height");
   SliderendsHeight = parseFloat(SliderendsHeight);
   let minYvalue = ((windowHeight-(windowHeight*0.95))+SliderendsHeight*2)/2;
   minYvalue = minYvalue.toFixed(3);

   let SliderHeight = window.getComputedStyle(scrollbarSlider, null).getPropertyValue("height");
   SliderHeight = parseFloat(SliderHeight);

   let scrollbarRange = windowHeight-minYvalue-SliderHeight;
   
   scrollbarRange = parseInt(scrollbarRange);

   let SliderPos = currentRange*scrollbarRange/pageScrollRange;

     if (SliderPos<minYvalue) {    
       SliderPos = minYvalue;
       } else {
           if (SliderPos>scrollbarRange) {
             SliderPos = scrollbarRange;
             } 
            } 

  document.getElementById("scrollbarSlider").style.top = SliderPos+"px";       

  
 });
}
body {
 border-top: 1px solid transparent;
 border-bottom: 1px solid transparent;
 overflow: hidden;
 min-width: ;
 min-height: 3000px;
 margin: 0px;
 background-color: rgba(30, 30, 30, 0.5);
 }
      

#altScrollbar {
  border: ;
  z-index: 1;
  position: fixed ;
  width: 15px; height:;
  right: 10px; top:;
  background-color: rgba(255, 255, 255, 0.0);
  }

  #altScrollbarTop {
  z-index: 1;
  width: 15px; height: 15px;
  right: 10px; top:;
  background-color: rgba(255, 255, 255, 0.2);
  border-top-left-radius: 50%;
  border-top-right-radius: 50%;
}

  #altScrollbarCenter {
  border: ;  
  z-index: 1;
  width: 15px; height: ;
  right: 10px; top:;
  background-color: rgba(255, 255, 255, 0.2);
}

#altScrollbarBottom {
  z-index: 1;
  width: 15px; height: 15px;
  right: 10px; top:;
  background-color: rgba(255, 255, 255, 0.2);
  border-bottom-left-radius: 50%;
  border-bottom-right-radius: 50%;
}

#scrollbarSlider {
  z-index: 3;
  -moz-user-select:none;
  user-select: none;
  position: fixed;
  width: 7px; height: 59px;
  right: 14px;  
  background-color: rgba(0, 0, 0, 0.0);
  cursor: pointer; 
}


 #scrollbarTop {
 width: 7px; height: 7px;
 background-color: rgba(0, 0, 0, 0.4);
 border-top-left-radius: 50%;
 border-top-right-radius: 50%;
}

#scrollbarCenter {
  
  -moz-user-select:none;
  user-select: none;
  width: 7px; height: 45px;  
  background-color: rgba(0, 0, 0, 0.4);
  cursor: pointer;
}

 #scrollbarBottom {
  width: 7px; height: 7px;
  background-color: rgba(0, 0, 0, 0.4);
  border-bottom-left-radius: 50%;
  border-bottom-right-radius: 50%;
}
.arrowbg {

 fill-opacity: 0.4;
 transition: all 0.3s; 
 width: 80px; height: 80px;
 position: fixed;
 right: 35px;
 bottom: 35px; 
 cursor: pointer;

}

.arrowbg::before {
      content: "";
      width: 40px;
      height: 40px;
      background: transparent no-repeat center center;
      background-size: 100% 100%;
  }


.hidebtn{
  opacity: 0;
} 

.arrowbg:hover {
 fill-opacity: 0.55;
 width: 80px; height: 80px;
 position: fixed;
 right: 35px;
 bottom: 50px;
 

}


.Ymonitor {
    width: 100px; height: 100px;
    position: fixed;
    left: 30px;
    bottom: 35px;
}

.Ymonitor::before {
  content: "";
      width: 40px;
      height: 40px;
      background: transparent no-repeat center center;
      background-size: 100% 100%;
}

.Ymonitorindicator {
  outline: 1px solid #000;
  pointer-events: none;
  resize: none;
  width: 99px; height: 99px;
}
.Ymonitorindicator:focus {

    outline: none; 
   }
<!doctype html>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<html>

  <head>

    <title>Учебное пространство</title>

  </head>

  <body>

    
<center><p><h1>Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку!Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку!Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку!Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку!Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку!Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку!Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку!Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку!Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку!Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку! Текст, чтобы видеть прокрутку!</h1></p></center> 

<div id="altScrollbar">
  <div id="altScrollbarTop"></div>
    <div  id="altScrollbarCenter">
    
       <div id="scrollbarSlider">
        <div id="scrollbarTop"></div>
          <div id="scrollbarCenter"></div>
        <div id="scrollbarBottom"></div>
      </div>

    </div>
  <div id="altScrollbarBottom"></div>
</div>
<div class="arrowbg hidebtn" > 

      <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="80px" height="80px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd"
viewBox="0 0 300 300"
 xmlns:xlink="http://www.w3.org/1999/xlink">
 <defs>
  <style type="text/css">
   <![CDATA[
    .str0 {stroke:#2B2A29;stroke-width:0.9;stroke-miterlimit:22.9256}
    .fil1 {fill:none}
    .fil0 {fill:#FEFEFE}
   ]]>
  </style>
 </defs>
 <g id="arrowUp">
   <circle cx="50%" cy="50%" r="150"  />
  
  <path class="fil0" d="M150 289.59c-77.1,0 -139.59,-62.49 -139.59,-139.59 0,-77.1 62.49,-139.59 139.59,-139.59 77.1,0 139.59,62.49 139.59,139.59 0,77.1 -62.49,139.59 -139.59,139.59zm148.68 -139.59c0,-82.11 -66.57,-148.68 -148.68,-148.68 -82.11,0 -148.68,66.57 -148.68,148.68 0,82.11 66.57,148.68 148.68,148.68 82.11,0 148.68,-66.57 148.68,-148.68z"/>
  <path class="fil0" d="M178.48 136.12c-3,25 -1,64 45,98 -87,1 -110,-38 -114,-98l-30 0c-6,0 -8,-2 0,-10l54 -55c7,-7 14,-7 20,0l55 55c8,8 6,10 0,10l-30 0z"/>
  <path class="fil1 str0" d="M-503.9 -364.45c0,-82.11 -66.57,-148.68 -148.68,-148.68 -82.11,0 -148.68,66.57 -148.68,148.68 0,82.12 66.57,148.68 148.68,148.68 82.11,0 148.68,-66.56 148.68,-148.68z"/>
  <path class="fil1 str0" d="M-554.48 -17.31c0,-77.09 -62.49,-139.59 -139.59,-139.59 -77.09,0 -139.59,62.5 -139.59,139.59 0,77.1 62.5,139.6 139.59,139.6 77.1,0 139.59,-62.5 139.59,-139.6z"/>
 </g>
</svg> 

  </div>
<div class="Ymonitor">
   
  <textarea class="Ymonitorindicator" id="Ymntr"></textarea>

 </div>
</body>

</html>

javascript
  • 1 个回答
  • 107 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5