RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

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

DiD's questions

Martin Hope
DiD
Asked: 2022-06-03 22:53:26 +0000 UTC

使用 CSS 和 JS 对已转换元素的旋转进行动画处理

  • 2

在一个简单的 html 页面上,我使用按钮来旋转图像。"повернуть по часовой"如果仅使用和按钮"повернуть против часовой"旋转图像,则图像正常旋转。但是如果你先按下,例如,"отразить по вертикали"然后在按钮上"повернуть по часовой","повернуть против часовой"图像旋转正确,但旋转动画有点失真。是否可以在不为每个转换编写逐帧动画的情况下快速解决此问题?

function disableButtons() {
  document.body.classList.add('disabled');
  setTimeout(() => document.body.classList.remove('disabled'), 1000);
}

rotate90.onclick = () => {
  disableButtons();
  let current = getComputedStyle(img).transform;
  if (current == 'none') current = '';
  img.style.transform = current + ' rotate(90deg)';
}

rotate270.onclick = () => {
  disableButtons();
  let current = getComputedStyle(img).transform;
  if (current == 'none') current = '';
  img.style.transform = current + ' rotate(-90deg)';
}

flipX.onclick = () => {
  disableButtons();
  let current = getComputedStyle(img).transform;
  if (current == 'none') current = '';
  img.style.transform = current + ' scaleY(-1)';
}

flipY.onclick = () => {
  disableButtons();
  let current = getComputedStyle(img).transform;
  if (current == 'none') current = '';
  img.style.transform = current + ' scaleX(-1)';
}
* {
  box-sizing: border-box;
}

body {
  margin: 0;
  height: 100vh;
  text-align: center;
}

div {
  float: left;
  clear: right;
  width: max-content;
}

div button {
  display: block;
  width: 100%;
  user-select: none;
  margin: .3rem;
  border: 2px solid #f0f;
  cursor: pointer;
}

body {
  background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 2" fill="gray" stroke="none"><rect x="0" y="0" width="1" height="1"/><rect x="1" y="1" width="1" height="1"/></svg>') 16px/16px repeat;
  perspective: 100vh;
}

img,
.disabled * {
  pointer-events: none;
}

.disabled button {
  color: #666;
  background: #ddd;
  border: 2px solid #444;
}

.disabled button:hover {
  color: #666;
  background: #ddd;
  border: 2px solid #444;
}

img {
  transition: all 1000ms linear;
  position: relative;
  user-select: none;
  will-change: transform;
}
<div>
  <button id="rotate90">повернуть<br>по часовой</button>
  <button id="rotate270">повернуть<br>против часовой</button>
  <button id="flipX">отразить<br>по вертикали</button>
  <button id="flipY">отразить<br>по горизонтали</button>
</div>
<img id='img' src="https://images.unsplash.com/photo-1602251573001-a27aafb64d64?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHx0b3BpYy1mZWVkfDE4OXxxUFlzRHp2Sk9ZY3x8ZW58MHx8fHw%3D&auto=format&fit=crop&h=200&q=60" />

javascript
  • 2 个回答
  • 10 Views
Martin Hope
DiD
Asked: 2022-04-22 14:49:07 +0000 UTC

为什么 stroke-dashoffset 在 SVG 中不起作用?

  • 3

有一个很好的脚本,不幸的是它只适用于 codepen.io 网站。

我正在尝试将其移植到 SVG。起初我使用<animate>and <animateTransform>。但是有些事情没有解决,所以我决定将其更改为 SVG+CSS。但是,它也被证明是错误的。在 codepen 网站上的脚本上,时钟以一种活泼的方式工作。我得到了一些不真实的物理学。

html,
      body {
        min-height: 100vh;
        margin: 0;
        padding: 0;
      }
      body {
        background: #4873a9;
      }
      * {
        box-sizing: border-box;
      }
      svg {
        position: absolute;
        width: 600px;
        height: 600px;
        left: calc(50vw - 300px);
        top: calc(50vh - 300px);
      }
      :root {
        --animation-duration: 10s;
      }
      .topSand {
        animation: topSand var(--animation-duration) linear infinite;
      }
      .botSand {
        animation: botSand var(--animation-duration) linear infinite;
      }
      .topShadow {
        animation: topShadow var(--animation-duration) linear infinite;
      }
      .botShadow {
        animation: botShadow var(--animation-duration) linear infinite;
      }
      .rightShine {
        animation: rightShine var(--animation-duration) linear infinite;
      }
      .leftShine {
        animation: leftShine var(--animation-duration) linear infinite;
      }
      .allGrouped {
        animation: rotate var(--animation-duration) linear infinite;
        transform-origin: 306px 275px;
      }
      .drip {
        animation: drip var(--animation-duration) linear infinite;
        stroke-miterlimit: 10;
      }
      @keyframes topSand {
        0% {
          y: 90px;
        }
        90% {
          y: 280px;
        }
        100% {
          y: 280px;
        }
      }
      @keyframes botSand {
        0% {
          cy: 580px;
          rx: 47.5;
        }
        5% {
          cy: 580px;
          rx: 47.5;
        }
        90% {
          cy: 415px;
          rx: 247.5;
        }
        93% {
          cy: 415px;
          rx: 247.5;
        }
        100% {
          cy: 415px;
          rx: 247.5;
          cy: 375px;
        }
      }
      @keyframes rotate {
        0% {
          transform: rotate(0deg);
        }
        90% {
          transform: rotate(0deg);
        }
        100% {
          transform: rotate(180deg);
        }
      }
      @keyframes topShadow {
        0% {
          opacity: 0.12;
        }
        90% {
          opacity: 0.12;
        }
        100% {
          opacity: 0;
        }
      }
      @keyframes botShadow {
        0% {
          opacity: 0;
        }
        90% {
          opacity: 0;
        }
        100% {
          opacity: 0.12;
        }
      }
      @keyframes rightShine {
        0% {
          opacity: 0.1;
        }
        90% {
          opacity: 0.1;
        }
        100% {
          opacity: 0.28;
        }
      }
      @keyframes leftShine {
        0% {
          opacity: 0.28;
        }
        90% {
          opacity: 0.28;
        }
        100% {
          opacity: 0.1;
        }
      }
      @keyframes drip {
        0% {
          stroke-dashoffset: 180px;
          stroke-dasharray: 1px 86px;
        }
        5% {
          stroke-dashoffset: -186px;
          stroke-dasharray: 1px, 2px;
        }
        8% {
          stroke-dashoffset: 0;
          stroke-dasharray: 1px, 1px;
        }
        11% {
          stroke-dashoffset: -186px;
          stroke-dasharray: 1px, 0px;
        }
        84.9% {
          stroke-dashoffset: 0px;
          stroke-dasharray: 1px, 0px;
        }
        88% {
          stroke-dashoffset: 0px;
          stroke-dasharray: 1px, 1px;
        }
        89.9% {
          stroke-dashoffset: 0px;
          stroke-dasharray: 1px, 48px;
        }
        90% {
          stroke-dashoffset: -186px;
          stroke-dasharray: 0px, 196px;
        }
        100% {
          stroke-dashoffset: -186px;
          stroke-dasharray: 0px, 196px;
        }
      }
<svg viewBox="0 0 600 600" width="600" height="600" xml:space="preserve">
      <defs>
        <circle id="grain" cx="0" cy="0" r="1" fill="#F7E0B7"></circle>
        <clipPath id="topMask">
          <path
            class="topMask"
            fill="#6D00BF"
            d="M316.7,266.3c-0.2,0.1-3.7,1.5-4.8,2.5c0,0,0,0,0,0.1c-1.8,1.5-3.2,4.5-3.2,7.1l-1.6,0l-1.4,0c0-2.6-1.4-5.6-3.2-7.1c0,0,0-0.1,0-0.1c-1.1-1-4.6-2.5-4.8-2.5C237.1,249.5,195,174,188,91h119h119.3C419.3,174,377.2,249.5,316.7,266.3z"
          ></path>
        </clipPath>
        <clipPath id="botMask">
          <path
            class="botMask"
            fill="#6D00BF"
            d="M316.7,283.7c-0.2-0.1-3.7-1.5-4.8-2.5c0,0,0,0,0-0.1c-1.8-1.5-3.2-4.5-3.2-7.1l-1.6,0l-1.4,0c0,2.6-1.4,5.6-3.2,7.1c0,0,0,0.1,0,0.1c-1.1,1-4.6,2.5-4.8,2.5C237.1,300.5,195,376,188,459h119h119.3C419.3,376,377.2,300.5,316.7,283.7z"
          ></path>
        </clipPath>
      </defs>
      <g class="allGrouped">
        <g clip-path="url(#topMask)">
          <rect
            class="topSand"
            x="0"
            y="90"
            fill="#F7E0B7"
            width="600"
            height="185"
          ></rect>
        </g>
        <g clip-path="url(#botMask)">
          <ellipse
            class="botSand"
            fill="#F7E0B7"
            cx="307.5"
            cy="580"
            rx="47.5"
            ry="120"
          ></ellipse>
        </g>
        <rect
          class="top"
          x="175"
          y="70"
          fill="#F1AF31"
          width="263"
          height="21"
        ></rect>
        <line
          class="drip"
          fill="none"
          stroke="#F7E0B7"
          stroke-dashoffset="-186"
          stroke-dasharray="1, 1"
          stroke-width="2"
          stroke-miterlimit="10"
          x1="307"
          y1="275"
          x2="307"
          y2="460"
        ></line>
        <path
          class="body"
          opacity="0.23"
          fill="#FFFFFF"
          d="M432.2,459H180.8c4.3-90,49.8-165,108.7-175.2c6.1-1,10.3-5.2,10.3-8.8c0-3-4.2-7.8-10.3-8.8C230.6,256,185.2,180.5,180.8,91h251.3c-4.3,89.6-49.7,166.3-108.8,175.2c-6,0.9-10.2,6.1-10.2,8.8c0,2.7,4.3,7.9,10.2,8.8C382.5,292.7,427.8,369,432.2,459z"
        ></path>
        <path
          class="topShadow"
          fill="#121212"
          opacity="0.12"
          d="M432.5,91h-252c0.3,4.1,0.8,8.8,1.4,14h249.3C432,98.3,432.2,95,432.5,91z"
          style="opacity: 0.12"
        ></path>
        <path
          class="botShadow"
          fill="#121212"
          opacity="0"
          d="M432.5,459h-252c0.3-4.1,0.8-8.8,1.4-14h249.3C432,451.7,432.2,455,432.5,459z"
          style="opacity: 0"
        ></path>
        <path
          class="rightShine"
          opacity="0.10"
          fill="#FFFFFF"
          d="M316.6,283.8c-5.2-1.2-8-6.1-8-8.8c0-2.7,2.8-7.5,8-8.8c58.6-14,105.6-87,106.5-175.2h-22.8c-3.6,85.6-38.3,168.8-102.8,177.2c0,0,8,0.7,8,6.8c0,6.2-8,6.8-8,6.8c64.5,8.3,99.2,91.6,102.8,177.2h22.8C422.3,370.8,375.3,297.8,316.6,283.8z"
          style="opacity: 0.1"
        ></path>
        <path
          class="leftShine"
          opacity="0.28"
          fill="#FFFFFF"
          d="M297,283.8c5.2-1.2,8-6.1,8-8.8c0-2.7-2.8-7.5-8-8.8c-58.6-14-105.6-87-106.5-175.2h22.8c3.6,85.6,38.3,168.8,102.8,177.2c0,0-8,0.7-8,6.8c0,6.2,8,6.8,8,6.8c-64.5,8.3-99.2,91.6-102.8,177.2h-22.8C191.4,370.8,238.4,297.8,297,283.8z"
          style="opacity: 0.28"
        ></path>
        <rect
          class="bottom"
          x="175"
          y="459"
          fill="#F1AF31"
          width="263"
          height="21"
        ></rect>
      </g>
    </svg>

一般来说,我会更具体地说明这个问题。

沙子飞溅,像codepen脚本的作者,我什至不尝试做。但是一粒沙粒,应该掉下来的,对我来说,有时悬在空中,有时又飞起来……

我想做一个低速下落的点射流。为此,我扭曲了 CSS 中的两个属性:stroke-dasharray和stroke-dashoffset. 该物业stroke-dasharray按其应有的方式工作。而on stroke-dashoffset,应该负责点的向下移动,图片完全没有反应。

为什么?

html
  • 1 个回答
  • 10 Views
Martin Hope
DiD
Asked: 2022-01-15 15:38:13 +0000 UTC

使用 CSS 旋转对象。目前尚不清楚旋转方向如何工作

  • 3

如果我们查看图片,我们会看到立方体在其初始位置(带有一个点)跟随光标。当光标向左或向右移动时,立方体沿轴旋转Y。实际上,这就是我试图从多维数据集实现的目标。

旋转方向

但是当正方体以五个点翻转到一边时,左右移动时,正方体沿轴旋转Z。然后,将立方体旋转三个点,首先它向正确的方向旋转,在 gif 结束时它向相反的方向旋转。

如何使旋转方向可预测?例如,使立方体始终像在其原始位置一样旋转。

      let [action,angleX,angleY,map,touchX,touchY] = ["idle",0,0,new WeakMap,0,0];
      const dice = [first, second, third, fourth, fifth, sixth];
      
      dice.forEach(el => 
         map.set(el, [...document.styleSheets[0].rules]
          .find(rule=>`#${el.id}`==rule.selectorText).style.transform
         ));
const ontouchstart=e => {
  if(e.touches.length==1){
 [touchX,touchY]=[e.touches[0].pageX,e.touches[0].pageY];}
  else {
  [touchX,touchY]=[0,0];
}
};
const ontouchend =()=>[touchX,touchY]=[0,0];
const ontouchmove=e=>{
if(touchX&&touchY){
  [angleX,angleY]=[
  angleX-e.touches[0].pageY+touchY,
  angleY+e.touches[0].pageX-touchX]
  .map((a) => (a > 360 ? a - 360 : a < 0 ? a + 360 : a));
          dice.map(el => el.style.transform = 
            `rotateX(${angleX}deg) rotateY(${angleY}deg) ` + map.get(el));
        
  [touchX,touchY]=[e.touches[0].pageX,e.touches[0].pageY];
}
}
      const onmousedown = () => action = "rotate"; 
      const onmouseup = () => action = "idle";
    
      const onmousemove = e => {
        if (action == "rotate") {
          [angleX, angleY] = [ angleX - e.movementY, angleY + e.movementX ]
            .map((a) => (a > 360 ? a - 360 : a < 0 ? a + 360 : a));
          dice.map(el => el.style.transform = 
            `rotateX(${angleX}deg) rotateY(${angleY}deg) ` + map.get(el));
        }
      };
      
      Object.assign(document.body, {onmousedown, onmousemove,ontouchstart,ontouchmove});
      Object.assign(window, {onmouseup,ontouchend});
      * {
        box-sizing: border-box;
      }

      body,
      div {
        margin: 0;
        padding: 0;
      }

      body {
        width: 100vw;
        height: 100vh;
        perspective: 100vh;
        transform-style: preserve-3d;
        background-color: #333;
        display: flex;
        flex-direction: row;
        justify-content: space-between;
      }

      .face {
        background-color: #cccc;
        border-radius: 0;
        border: 3px solid #000;
        padding: 3vh;
        margin: 3px;
        display: flex;
        width: 25vh;
        height: 25vh;
        position: fixed;
        left: calc(50vw - 12.5vh);
        top: calc(50vh - 12.5vh);
        pointer-events: none;
        /* backdrop-filter: blur(2px); */
      }

      .column {
        display: flex;
        flex-direction: column;
        justify-content: space-between;
      }

      .pip {
        background-color: #000;
        width: 4vh;
        height: 4vh;
        display: inline-block;
        border-radius: 4rem;
      }

      #first {
        justify-content: center;
        align-items: center;
        transform: translateZ(12.5vh);
      }

      #second {
        justify-content: space-between;
        transform: rotateX(90deg) translateZ(-12.5vh);
      }

      #second .pip:nth-of-type(2) {
        align-self: flex-end;
      }

      #third {
        justify-content: space-between;
        align-items: center;
        transform: rotateY(90deg) translateZ(-12.5vh);
      }

      #third .pip:nth-of-type(1) {
        align-self: flex-start;
      }

      #third .pip:nth-of-type(3) {
        align-self: flex-end;
      }

      #fourth {
        justify-content: space-between;
        transform: rotateY(180deg) translateZ(12.5vh);
      }

      #fifth {
        justify-content: space-between;
        justify-content: space-between;
        transform: rotateX(90deg) translateZ(12.5vh);
      }

      #fifth .column:nth-of-type(2) {
        align-self: center;
      }

      #sixth {
        justify-content: space-between;
        transform: rotateY(90deg) translateZ(12.5vh);
      }
    <div id="first" class="face"><span class="pip"></span></div>
    <div id="second" class="face">
      <span class="pip"></span>
      <span class="pip"></span>
    </div>
    <div id="third" class="face">
      <span class="pip"></span>
      <span class="pip"></span>
      <span class="pip"></span>
    </div>
    <div id="fourth" class="face">
      <div class="column">
        <span class="pip"></span> <span class="pip"></span>
      </div>
      <div class="column">
        <span class="pip"></span> <span class="pip"></span>
      </div>
    </div>
    <div id="fifth" class="face">
      <div class="column">
        <span class="pip"></span> <span class="pip"></span>
      </div>
      <div class="column"><span class="pip"></span></div>
      <div class="column">
        <span class="pip"></span> <span class="pip"></span>
      </div>
    </div>

    <div id="sixth" class="face">
      <div class="column">
        <span class="pip"></span> <span class="pip"></span>
        <span class="pip"></span>
      </div>
      <div class="column">
        <span class="pip"></span> <span class="pip"></span>
        <span class="pip"></span>
      </div>
    </div>

css3
  • 1 个回答
  • 10 Views
Martin Hope
DiD
Asked: 2021-12-15 19:35:19 +0000 UTC

为什么 TreeWalker 和 innerText 给出不同的结果?

  • 1

我试图以不同的方式从元素中获取所有文本节点。出于某种原因,我得到了不同的结果。某处我错过了一些东西,但在哪里- 我无法理解。

console.time('inner-text');
console.log('innerText length: ' + 
  document.querySelector('.content').innerText.length);
console.timeEnd('inner-text');

console.time('tree-walker');
console.log('TreeWalker length: ' + 
  textNodesTreeWalker(document.querySelector('.content')).text.length);
console.timeEnd('tree-walker');

console.time('recursion');
console.log('recursion length: ' + 
  textNodesRecursion(document.querySelector('.content')).text.length);
console.timeEnd('recursion');

function textNodesTreeWalker(el){
  let node, all = [], text = '', beg, end, 
      walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false);
  while(node = walk.nextNode()){
    beg = text.length;  
    text += node.textContent;
    end = text.length;
    all.push({node,beg,end});
  }
  return {all,text};
}

function textNodesRecursion(node){
  let all = [], text='', beg, end;
  for (node=node.firstChild;node;node=node.nextSibling){
    if (node.nodeType==3){
      beg = text.length;  
      text += node.textContent;
      end = text.length;
      all.push({node,beg,end});
    }
    else {
       let child = textNodesRecursion(node);
       text+=child.text;
       all = all.concat(child.all);
    }
  }
  return {all,text};
}
<div class="content"><p><span>Lorem ipsum dolor sit amet</span>, <span>consectetur adipiscing elit</span>. <span>Suspendisse orci velit</span>, <span>sagittis non elit id</span>, <span>placerat blandit leo</span>. <span>Etiam eu erat at nunc aliquam</span> <span>eleifend non vel libero</span>. <span>In ac mauris sit amet velit</span> <span>luctus faucibus</span>. <span>In at vulputate libero</span>. <span>Vestibulum non orci velit</span>. <span>Sed aliquam ante eget odio commodo</span> <span>condimentum</span>. <span>Suspendisse blandit at ante at condimentum</span>. <span>Duis id iaculis nunc</span>, <span>et pretium tortor</span>. <span>Ut posuere tellus at est accumsan</span> <span>semper</span>. <span>Morbi vulputate dapibus nisl varius vestibulum</span>. <span>Suspendisse ipsum mi</span>, <span>venenatis at elit eu</span>, <span>porta faucibus lorem</span>. <span>Integer commodo maximus neque tristique tempor</span>. <span>In hac habitasse platea dictumst</span>. <span>Fusce tincidunt ut felis non pharetra</span>.</p><p><span>Donec dictum faucibus massa at accumsan</span>. <span>Aliquam erat volutpat</span>. <span>Donec et nibh fringilla nisl tempor</span> <span>pretium</span>. <span>Pellentesque justo ante</span>, <span>tincidunt non felis id</span>, <span>gravida interdum augue</span>. <span>Phasellus dictum tempus dolor et imperdiet</span>. <span>Maecenas at ornare erat</span>. <span>Integer pretium diam nisl</span>, <span>eget vestibulum orci pretium sit amet</span>. <span>Nunc consectetur interdum turpis eget tincidunt</span>. <span>Donec at facilisis arcu</span>. <span>Suspendisse tempus purus vel purus sollicitudin</span> <span>pellentesque nec in arcu</span>. <span>Morbi purus lectus</span>, <span>tempus non sem vitae</span>, <span>feugiat elementum est</span>. <span>Vivamus laoreet nulla ut urna dignissim</span>, <span>elementum dapibus sem gravida</span>. <span>Fusce pretium porttitor libero</span>, <span>sed convallis mi laoreet eget</span>. <span>Ut aliquet neque velit</span>, <span>ac ultricies ligula volutpat vitae</span>. <span>In hac habitasse platea dictumst</span>.</p><p><span>Donec dictum condimentum fermentum</span>. <span>Ut aliquet sed urna vel rhoncus</span>. <span>Proin pharetra consectetur vestibulum</span>. <span>Sed sed arcu velit</span>. <span>Praesent blandit nulla ac risus faucibus</span> <span>ultricies</span>. <span>Nunc nec lacus enim</span>. <span>Duis porta venenatis faucibus</span>. <span>Nunc a lacus enim</span>.</p><p><span>Fusce efficitur molestie arcu dignissim consectetur</span>. <span>Proin molestie metus at risus porttitor</span>, <span>ac varius ante gravida</span>. <span>Nulla facilisi</span>. <span>Aenean mollis dolor ac massa porta</span> <span>efficitur</span>. <span>Etiam tellus massa</span>, <span>maximus bibendum ipsum sed</span>, <span>consequat rhoncus est</span>. <span>Nullam accumsan massa eget sagittis molestie</span>. <span>Quisque sed felis vitae nisl ultrices</span> <span>luctus</span>. <span>Aenean sed ex lacus</span>. <span>Donec id mi massa</span>. <span>Phasellus ut scelerisque nisl</span>. <span>Morbi quis fringilla quam</span>. <span>Aenean sit amet dui vitae justo</span> <span>pulvinar rhoncus ut eu magna</span>. <span>Mauris id leo nibh</span>. <span>Donec eget commodo elit</span>, <span>ut pharetra elit</span>. <span>Mauris dapibus</span>, <span>ipsum quis feugiat tristique</span>, <span>ipsum lectus consectetur velit</span>, <span>eu ullamcorper turpis orci in enim</span>. <span>Donec nec tortor risus</span>.</p><p><span>Nullam nec quam aliquet</span>, <span>dapibus odio sed</span>, <span>blandit mauris</span>. <span>Vivamus vel mollis lorem</span>. <span>Mauris posuere sem tortor</span>, <span>et elementum nisi ultricies id</span>. <span>Proin molestie accumsan odio sed pretium</span>. <span>Suspendisse potenti</span>. <span>Vivamus elementum nisi felis</span>, <span>sit amet ultricies leo pretium et</span>. <span>Mauris neque risus</span>, <span>commodo at nibh suscipit</span>, <span>egestas egestas magna</span>. <span>Quisque finibus mi at leo mattis</span> <span>porttitor</span>. <span>Pellentesque volutpat diam ac tortor molestie</span> <span>semper</span>. <span>Nulla venenatis et eros sed consectetur</span>.</p><p><span>Fusce quis ornare nisi</span>, <span>sit amet gravida elit</span>. <span>Vivamus mollis sem ac nisi congue</span>, <span>ut lacinia nunc dignissim</span>. <span>Cras at leo nec quam placerat</span> <span>aliquet</span>. <span>Sed ac cursus sapien</span>, <span>ut consequat nunc</span>. <span>In hac habitasse platea dictumst</span>. <span>Nulla non nunc id purus tincidunt</span> <span>vulputate id id risus</span>. <span>Praesent ac tristique urna</span>. <span>In tristique orci dictum felis sollicitudin</span>, <span>ut porta dolor sagittis</span>. <span>Donec fringilla ullamcorper maximus</span>. <span>Ut at tortor nec diam congue</span> <span>finibus</span>. <span>Fusce consequat finibus efficitur</span>. <span>Nulla ac magna vel ex posuere</span> <span>sodales quis id lorem</span>. <span>Pellentesque a justo fringilla purus mollis</span> <span>scelerisque</span>.</p><p><span>Aliquam at turpis sagittis est faucibus</span> <span>sodales</span>. <span>Praesent semper tellus vel dolor volutpat</span> <span>ullamcorper</span>. <span>Vestibulum interdum sagittis varius</span>. <span>Duis vitae dolor nec metus porttitor</span> <span>volutpat</span>. <span>Praesent ante arcu</span>, <span>scelerisque nec mollis quis</span>, <span>volutpat iaculis odio</span>. <span>Vestibulum condimentum justo dui</span>, <span>sed pulvinar felis dignissim et</span>. <span>Praesent sit amet sodales nulla</span>. <span>Nam iaculis vel magna sed dignissim</span>. <span>Quisque sed velit nisi</span>. <span>Fusce sed metus tortor</span>. <span>Ut vitae lacus luctus</span>, <span>placerat mi at</span>, <span>feugiat sem</span>.</p><p><span>In a aliquam arcu</span>. <span>In ut nisl efficitur</span>, <span>porta urna ac</span>, <span>posuere mi</span>. <span>Sed eu orci sem</span>. <span>Vestibulum hendrerit lacinia accumsan</span>. <span>Curabitur ac lectus varius</span>, <span>lacinia dolor sed</span>, <span>lacinia magna</span>. <span>Duis nec nisl purus</span>. <span>Ut ut elit quis nisi consequat</span> <span>pellentesque</span>. <span>Praesent id rhoncus felis</span>. <span>In tincidunt aliquam odio id aliquam</span>. <span>Nunc aliquet nulla in neque facilisis</span>, <span>vel dignissim diam sollicitudin</span>. <span>Phasellus dignissim fermentum purus</span>, <span>a consectetur libero pretium id</span>. <span>Aliquam vulputate nec velit nec posuere</span>. <span>Vivamus varius eu nulla vel efficitur</span>. <span>Ut sed sem venenatis</span>, <span>dictum ante at</span>, <span>blandit ex</span>. <span>Pellentesque dapibus hendrerit dui eget eleifend</span>.</p><p><span>Nulla molestie nulla posuere</span>, <span>facilisis nibh sed</span>, <span>accumsan nulla</span>. <span>Maecenas ut vulputate nibh</span>. <span>Vestibulum vel dictum turpis</span>, <span>ultrices venenatis metus</span>. <span>Donec urna justo</span>, <span>volutpat ut ultrices ut</span>, <span>ultrices in turpis</span>. <span>Curabitur vel feugiat ex</span>. <span>Ut maximus</span>, <span>libero pellentesque aliquam scelerisque</span>, <span>augue ante eleifend felis</span>, <span>in finibus sem dui eu ipsum</span>. <span>Etiam lacus nunc</span>, <span>sagittis sit amet vehicula et</span>, <span>tincidunt sit amet augue</span>. <span>Morbi purus risus</span>, <span>efficitur eu accumsan non</span>, <span>tristique eu nulla</span>. <span>Donec a ultricies nunc</span>, <span>sit amet dictum nibh</span>. <span>Praesent tempor elit sed efficitur dignissim</span>. <span>Phasellus dignissim</span>, <span>tortor quis porta aliquam</span>, <span>ante nisi aliquet ex</span>, <span>et venenatis enim diam nec tellus</span>. <span>Vivamus eget enim odio</span>. <span>Sed in eleifend ligula</span>. <span>Donec faucibus ornare pulvinar</span>. <span>Aliquam eget odio eu felis faucibus</span> <span>imperdiet eget non mi</span>. <span>Donec justo tellus</span>, <span>feugiat vel porttitor nec</span>, <span>rutrum vitae mauris</span>.</p><p><span>Vestibulum id dui ultrices</span>, <span>suscipit ex quis</span>, <span>pharetra tortor</span>. <span>Sed ac porta neque</span>. <span>Maecenas rhoncus dui nisl</span>, <span>ut tincidunt lorem sodales nec</span>. <span>Quisque dictum urna non odio efficitur</span>, <span>sed gravida nisl consequat</span>. <span>Mauris porta ipsum ac sagittis egestas</span>. <span>Aenean sed quam tempor</span>, <span>molestie elit non</span>, <span>mattis enim</span>. <span>Maecenas posuere nibh sit amet turpis</span> <span>finibus ullamcorper</span>. <span>Duis diam mi</span>, <span>finibus non justo non</span>, <span>varius auctor erat</span>. <span>Sed dapibus nulla quam</span>, <span>sed auctor nisl cursus aliquet</span>. <span>Vivamus semper</span>, <span>magna id mattis bibendum</span>, <span>tortor nulla commodo leo</span>, <span>id tristique arcu dui non lacus</span>.</p><p><span>Mauris dignissim est et turpis fermentum</span>, <span>in tristique justo elementum</span>. <span>Mauris sit amet erat libero</span>. <span>Maecenas sed congue risus</span>, <span>ac cursus quam</span>. <span>Proin orci velit</span>, <span>venenatis sed felis ut</span>, <span>auctor feugiat nibh</span>. <span>Ut tincidunt id metus eu consectetur</span>. <span>Nullam suscipit elementum elit</span>, <span>sit amet luctus ante congue id</span>. <span>Suspendisse consectetur at orci in cursus</span>. <span>Phasellus blandit sagittis leo</span>, <span>vel vehicula nisi malesuada a</span>. <span>Mauris posuere ornare nulla</span>, <span>ut porttitor nisl interdum eget</span>. <span>Sed facilisis augue sed nulla lobortis</span>, <span>eu volutpat elit congue</span>. <span>Ut condimentum</span>, <span>felis sit amet blandit laoreet</span>, <span>lectus lorem consequat turpis</span>, <span>eu venenatis dui risus et augue</span>. <span>In egestas sed felis ut ultricies</span>. <span>Aliquam euismod purus in egestas pellentesque</span>.</p><p><span>Pellentesque et tristique felis</span>. <span>Nulla facilisi</span>. <span>Maecenas eu tincidunt quam</span>. <span>Vestibulum ante ipsum primis in faucibus</span> <span>orci luctus et ultrices posuere cubilia</span> curae; <span>Nam in est sed arcu auctor</span> <span>tincidunt non nec odio</span>. <span>Praesent suscipit commodo ipsum at dignissim</span>. <span>Cras id commodo mauris</span>. <span>Vestibulum placerat ornare rhoncus</span>. <span>Ut fringilla tristique justo ac eleifend</span>. <span>Donec tincidunt velit ligula</span>, <span>ut dignissim ex consequat quis</span>. <span>Donec eget efficitur justo</span>. <span>Proin consequat</span>, <span>neque vehicula ultricies ultricies</span>, <span>leo enim egestas sem</span>, <span>et consequat purus ex tristique nulla</span>. <span>Nulla nec magna diam</span>. <span>Nullam sollicitudin malesuada laoreet</span>. <span>Maecenas vel lorem metus</span>. <span>Aliquam id mauris ac magna gravida</span> <span>auctor eget sit amet ligula</span>.</p><p><span>Sed semper nunc diam</span>, <span>id ultrices velit dignissim sit amet</span>. <span>Nunc pellentesque orci sodales</span>, <span>porta libero at</span>, <span>sagittis elit</span>. <span>Proin fermentum</span>, <span>mauris vel suscipit placerat</span>, <span>arcu dui dapibus nibh</span>, <span>venenatis consectetur lectus est in tellus</span>. <span>Suspendisse quis nisi congue</span>, <span>eleifend lorem in</span>, <span>tincidunt mauris</span>. <span>Nunc aliquet sit amet mi condimentum</span> <span>rutrum</span>. <span>Nam tempor augue vel diam ornare</span>, <span>eu vulputate urna fermentum</span>. <span>Class aptent taciti sociosqu ad litora</span> <span>torquent per conubia nostra</span>, <span>per inceptos himenaeos</span>. <span>Integer sit amet felis facilisis</span>, <span>laoreet risus vel</span>, <span>tristique elit</span>. <span>Ut eleifend porttitor lorem</span>, <span>blandit placerat orci dignissim in</span>.</p><p><span>In pretium ultricies nisl in placerat</span>. <span>Etiam nibh urna</span>, <span>dignissim quis consectetur in</span>, <span>faucibus in est</span>. <span>Ut porttitor eros elit</span>, <span>a blandit velit convallis nec</span>. <span>Cras at cursus velit</span>. <span>Aenean id condimentum magna</span>. <span>Pellentesque et nisi vehicula</span>, <span>ornare turpis eget</span>, <span>mollis enim</span>. <span>Sed facilisis</span>, <span>diam eget dapibus fermentum</span>, <span>est erat luctus purus</span>, <span>vel dignissim nulla tellus id quam</span>. <span>Fusce sed venenatis tortor</span>. <span>Ut consectetur sed ante non sodales</span>. <span>Praesent hendrerit pellentesque dolor non dignissim</span>. <span>Ut dui lorem</span>, <span>dignissim sed rutrum efficitur</span>, <span>cursus non velit</span>.</p><p><span>Nulla cursus lorem nisi</span>, <span>et vehicula risus blandit at</span>. <span>Suspendisse eget enim quis justo pulvinar</span> <span>fringilla</span>. <span>Sed rutrum consequat diam a finibus</span>. <span>Quisque elementum quam eros</span>. <span>Mauris facilisis mi eget tortor commodo</span>, <span>in semper odio egestas</span>. <span>Mauris ipsum purus</span>, <span>facilisis sed justo eget</span>, <span>dictum euismod elit</span>. <span>Suspendisse in congue orci</span>. <span>Etiam libero augue</span>, <span>faucibus ut augue non</span>, <span>rhoncus congue lectus</span>. <span>Aliquam nec diam pulvinar</span>, <span>viverra nisi id</span>, <span>posuere diam</span>. <span>Nam lacinia augue laoreet sem interdum</span>, <span>sit amet vestibulum lacus vestibulum</span>. <span>Donec laoreet pretium pellentesque</span>. <span>Donec sed ultrices nisl</span>.</p></div>

javascript
  • 1 个回答
  • 10 Views
Martin Hope
DiD
Asked: 2021-12-14 04:17:13 +0000 UTC

如何等待浏览器通过 puppeteer 接收对 ajax 请求的响应?

  • 0

所有的木偶指南都非常原始。

const puppeteer = require('puppeteer');

(async function() {
  const browser = await puppeteer.launch({ 
      headless: false, 
      defaultViewport: null
  });
  const page = await browser.newPage();
  await page.goto('https://url.com/', { waitUntil: 'networkidle2' });
  await page.click('#button-filters');
  await page.click('label[for="filter-type-pack"]');  // После второго и третьего клика
  await page.click('label[for="order_by-date"]');     // страница отправляет ajax-запрос

  // . . .

  await browser.close();
})();

在代码中三个点(. . .)的地方,根据手册,建议使用该方法等待一秒或多秒,page.waitFor(1000)然后从结果页面的 DOM 中提取请求的结果。问题在于:a)无法保证 ajax 请求将在分配的等待时间内完成,b)在最终的 DOM 中没有我需要的信息,但是这些信息在服务器对阿贾克斯请求。

因此,有两个问题:

如何保证对请求或连接错误的响应?

如何从 ajax 请求的响应正文中提取信息?

javascript
  • 1 个回答
  • 10 Views
Martin Hope
DiD
Asked: 2021-10-28 06:36:41 +0000 UTC

LibreOffice Calc (Excel) 的简单宏。在哪里可以找到信息?

  • 1

尽管任务简单而极简,但它打破了我的头脑。

有一个 XLS 文件,其中有一个包含 160000 多行不同数字的表格。

需要:

  1. 查找所有单元格为空的所有行;
  2. 在每条这样的线上方/下方画一条线;
  3. 删除整个空行。

事实证明,有必要从这样的文件:

在此处输入图像描述

制作这样的文档:

在此处输入图像描述

更新

问题自行解决了。感谢您的时间。没有什么比爱心人士的支持更能激发灵感了。

在编写宏时,使用了以下资源:

  • 应用程序的 Visual Basic (VBA) 语言参考

  • OpenOffice 论坛(英文)

  • 在线 LibreOffice 文档(英文)

  • LibreOffice 计算指南 6.4

  • 基本 IDE(英文)

  • 基本概述(英文)

  • BASIC 结构化数据类型

  • 基本计算

  • 基本事件

  • BASIC 运行时库

  • BASIC 运行时参数

  • 基本文件(英文)

  • 基本对话(英文)

  • Apache OpenOffice BASIC 编程指南

特别是 OpenOffice BASIC 指南的特定页面:

  • 电子表格文档的结构

  • 行和列

  • 单元格和范围

  • 格式化电子表格文档

  • 编辑电子表格文档

该解决方案标志着@JohnSUN同志的答案。

生成的宏代码:

    REM  *****  BASIC  *****

    Sub Main
       Dim oDoc As Object
       Dim oSheet As Object
       Dim oCellRange As Object
       Dim oCursor As Object   
       Dim lRowCnt As Long
       Dim lColCnt As Long
       Dim lRowCur As Long
       Dim bEmptyRow As Boolean
       Dim oBorder As Object
       Dim BLine As New com.sun.star.table.BorderLine
       
       ' устанавливаем ширину рисуемой линии
       BLine.OuterLineWidth = 60
       ' устанавливаем цвет рисуемой линии
       BLine.Color = RGB(0, 0, 0)
        
       ' текущий документ
       oDoc = ThisComponent  
 
       ' активная страница
       oSheet = oDoc.getCurrentController.activeSheet 
 
       ' определяем количество колонок по первой строке
       lColCnt = 0
       While oSheet.getCellByPosition(lColCnt, 0).type <> com.sun.star.table.CellContentType.EMPTY
          lColCnt = lColCnt + 1
       Wend
       
       ' определяем количество строк
       oCursor = oSheet.createCursor
       oCursor.gotoEndOfUsedArea(True)
       lRowCnt = Curs.Rows.Count 
   
       ' устанавливаем текущую строку
       lRowCur = 1
       ' основной цикл макроса
       while lRowCur < lRowCnt
          ' проверяем пустая ли текущая строка
          bEmptyRow = true
          For cColCur = 0 to lColCnt-1
             If oSheet.getCellByPosition(cColCur, lRowCur).Type <> com.sun.star.table.CellContentType.EMPTY Then bEmptyRow  = false
          Next cColCur
         
          If bEmptyRow Then
             ' если найдена пустая строка

             ' выделяем строку выше 
             oCellRange = oSheet.getCellRangeByPosition(0, lRowCur-1, lColCnt-1, lRowCur-1)
             ' рисуем линию по нижнему бортику ячеек
             oBorder = oCellRange.TableBorder
             oBorder.BottomLine = BLine
             oCellRange.TableBorder = oBorder
             ' удяляем одну строку
             oSheet.rows.removeByIndex(lRowCur, 1)
             ' количество строк уменьшилось на одно после удаления
             lRowCnt = lRowCnt - 1 
          Else
             ' если найдена не пустая строка

             ' инкремент индекса текущей строки
             lRowCur = lRowCur + 1        
          End If
         
       Wend
      
       ' дальнейшие строки кода выполняют не входившие в условия задачи действия, 
       ' а именно рисуют внешнюю рамку
        oCellRange = oSheet.getCellRangeByPosition(0, 0, lColCnt-1, lRowCnt-1)
        oBorder = oCellRange.TableBorder
        oBorder.BottomLine = BLine    
        oBorder.TopLine = BLine    
        oBorder.LeftLine = BLine    
        oBorder.RightLine = BLine
        oCellRange.TableBorder = oBorder
          
    End Sub
excel
  • 1 个回答
  • 10 Views
Martin Hope
DiD
Asked: 2021-10-26 19:33:30 +0000 UTC

当我的计算机连接到 ProtonVPN 时,如何使用本地网络资源(双向)?

  • 0

我有一台装有 OS Catalina 的 Macbook,它通过 DIGMA DMW1969-WT 移动 Wifi 调制解调器连接到互联网。同时,大多数时候(总是)ProtonVPN 在 macbook 上使用默认配置启用。

  1. 是否可以在不关闭 ProtonVPN 的情况下进入调制解调器的管理面板,例如查看 SIM 卡上的余额?

  2. 如果其他计算机连接到 wifi 调制解调器,我可以在不关闭 ProtonVPN 的情况下通过 http/ftp/ssh 协议从我的 macbook 连接到它们吗?

  3. 如果其他电脑连接到 wifi 调制解调器,在 macbook 上启用 ProtonVPN 时,它们可以通过 http/ftp/ssh 协议连接到 macbook 吗?

  4. 如果其他计算机连接到 wifi 调制解调器,我可以将 ProtonVPN 连接从我的 macbook 分配给他们吗?或者我需要为每台计算机单独支付 VPN 费用吗?

сеть
  • 1 个回答
  • 10 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