繁体   English   中英

CSS过渡不适用于offsetLeft上最右边的div

[英]CSS transition not working for right most div on offsetLeft

我有五个div。 您可以单击其中的四个div,这将运行一个函数,该函数使用div.offsetLeftdiv.offsetTop将您单击的div移动到第五个div的坐标。 前三个div都可以正常工作,但是如果首先单击最右边的div,则移至坐标时不会应用过渡效果。 如果您先点击其他任意div,然后再点击最右边的div,则将应用过渡。

如果这样做,则只有两个或三个div,问题仍然存在。 (您必须从多方数组和html元素中删除相应的ID)。

jsfiddle: https ://jsfiddle.net/zjystr2u/

抱歉html中的javascript。 从未使用过jsfiddle,也无法弄清楚如何使其在html之后加载javascript。

getCurrentPosAll()position从默认static更改为absolute position时,发生了一些混乱现象

您可以在更改topleft之前运行getCurrentPosAll()以正确设置其默认值。

 var selected = document.getElementById("selected"); var selectedX = selected.offsetLeft; var selectedY = selected.offsetTop; parties = ['opt1', 'opt2', 'opt3', 'opt4']; getCurrentPosAll(); // (NEW) Make sure their defaults are set. function moreTest(e) { var party = e.target party.style.left = selectedX + "px"; party.style.top = selectedY + "px"; } function getCurrentPosAll() { for (var idx = 0; idx < parties.length; idx++) { var currentDiv = document.getElementById(parties[idx]); var x = currentDiv.offsetLeft; var y = currentDiv.offsetTop; currentDiv.style.left = x + "px"; currentDiv.style.top = y + "px"; } for (var idx = 0; idx < parties.length; idx++) { var currentDiv = document.getElementById(parties[idx]); currentDiv.style.position = "absolute"; } } 
 .wrapper { display: flex; justify-content: space-around; width: 75%; margin: 0 auto; } .selected { width: 100px; height: 150px; position: absolute; left: 0; right: 0; margin-left: auto; margin-right: auto; background-color: black; opacity: 0.6; z-index: 1; } .opt { width: 100px; height: 150px; cursor: pointer; transition: top 0.7s, left 0.7s; } .opt1 { background-color: red; } .opt2 { background-color: blue; } .opt3 { background-color: orange; } .opt4 { background-color: green; } 
 <div class="wrapper"> <div class="selected" id="selected"></div> <div class="opt opt1" id="opt1" onclick="moreTest(event)"></div> <div class="opt opt2" id="opt2" onclick="moreTest(event)"></div> <div class="opt opt3" id="opt3" onclick="moreTest(event)"></div> <div class="opt opt4" id="opt4" onclick="moreTest(event)"></div> </div> 

我不确定为什么会这样。 我认为这与浏览器如何以及何时计算过渡的初始值有关。 最后元素CSS更改将分批更新1次。
因此,它将立即接收更新的topleft值,而其他元素将接收2个更新,一个具有默认的topleft ,然后一个具有更新的值。 导致其过渡正常运行。
最有可能是因为最后一个元素CSS发生了更改,所以它们的css更新将以2个更新而不是1个更新的方式应用。

 var selected = document.getElementById("selected"); var selectedX = selected.offsetLeft; var selectedY = selected.offsetTop; parties = ['opt1', 'opt2', 'opt3', 'opt4', 'opt5','opt6']; function moreTest(e) { var party = e.target getCurrentPosAll(); party.style.left = selectedX + "px"; party.style.top = selectedY + "px"; } function getCurrentPosAll() { for (var idx = 0; idx < parties.length; idx++) { var currentDiv = document.getElementById(parties[idx]); var x = currentDiv.offsetLeft; var y = currentDiv.offsetTop; currentDiv.style.left = x + "px"; currentDiv.style.top = y + "px"; } for (var idx = 0; idx < parties.length; idx++) { var currentDiv = document.getElementById(parties[idx]); currentDiv.style.position = "absolute"; } } 
 .wrapper { display: flex; justify-content: space-around; width: 100%; margin: 0 auto; } .selected { width: 100px; height: 150px; position: absolute; left: 0; right: 0; margin-left: auto; margin-right: auto; background-color: black; opacity: 0.6; z-index: 1; } .opt { width: 100px; height: 150px; cursor: pointer; transition: 0.7s; } .opt1 { background-color: red; } .opt2 { background-color: blue; } .opt3 { background-color: orange; } .opt4 { background-color: green; } .opt5 { background-color: violet; } .opt6 { background-color: black; } 
 <div class="wrapper"> <div class="selected" id="selected"></div> <div class="opt opt1" id="opt1" onclick="moreTest(event)"></div> <div class="opt opt2" id="opt2" onclick="moreTest(event)"></div> <div class="opt opt3" id="opt3" onclick="moreTest(event)"></div> <div class="opt opt4" id="opt4" onclick="moreTest(event)"></div> <div class="opt opt5" id="opt5" onclick="moreTest(event)"></div> <div class="opt opt6" id="opt6" onclick="moreTest(event)"></div> </div> 

过渡<div>从右到左</div><div id="text_translate"><p>我希望右侧的 div 从右向左过渡,而左侧的 div 从左向右过渡。</p><p> 左边的那个自然是从左到右移动,但是我如何让右边的那个从右到左移动。</p><p> 这是我使用的代码。 </p><p></p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"><div class="snippet-code"><pre class="snippet-code-js lang-js prettyprint-override"> function showmeme(){ document.getElementById('memes').style.width = "100%"; document.getElementById('game').style.width = "0%"; document.getElementById("memes").style.transition = "all 0.5s"; document.getElementById("game").style.transition = "all 0.5s"; var game= document.getElementsByClassName('game'); for(var i=0;i&lt;game.length;i++){ game[i].style.display='none'; } } function showgame(){ document.getElementById('game').style.width = "100%"; document.getElementById('memes').style.width = "0%"; document.getElementById("memes").style.transition = "all 0.5s"; document.getElementById("game").style.transition = "all 0.5s"; var memes= document.getElementsByClassName('memes'); for(var i=0;i&lt;memes.length;i++){ memes[i].style.display='none'; } }</pre><pre class="snippet-code-css lang-css prettyprint-override"> .body{ border: 1px solid black; display: flex; justify-content: space-between; align-items: center; margin-top: 10px; }.memes{ display: flex; justify-content: center; align-items: center; border: 1px solid black; width:48%; height: 500px; }.game{ display: flex; justify-content: center; align-items: center; border: 1px solid black; width:48%; height: 500px; }.butn{ width: 200px; height: 50px; }</pre><pre class="snippet-code-html lang-html prettyprint-override"> &lt;div class="body"&gt; &lt;div class="memes" id="memes"&gt; &lt;button class="butn" onclick="showmeme()"&gt;make a meme&lt;/button&gt; &lt;/div&gt; &lt;div class="game" id="game"&gt; &lt;button class="butn" onclick="showgame()"&gt;play meme games&lt;/button&gt; &lt;/div&gt; &lt;/div&gt;</pre></div></div><p></p></div>

[英]Transition <Div> from right to left

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 CSS3过渡不适用于JS滚动固定div过渡 使用 css 的权利过渡? 为什么 OffsetTop 和 offsetLeft 不起作用? 具有CSS过渡的可扩展Div CSS过渡在身体溢出中的可滚动div上不起作用:隐藏 过渡<div>从右到左</div><div id="text_translate"><p>我希望右侧的 div 从右向左过渡,而左侧的 div 从左向右过渡。</p><p> 左边的那个自然是从左到右移动,但是我如何让右边的那个从右到左移动。</p><p> 这是我使用的代码。 </p><p></p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"><div class="snippet-code"><pre class="snippet-code-js lang-js prettyprint-override"> function showmeme(){ document.getElementById('memes').style.width = "100%"; document.getElementById('game').style.width = "0%"; document.getElementById("memes").style.transition = "all 0.5s"; document.getElementById("game").style.transition = "all 0.5s"; var game= document.getElementsByClassName('game'); for(var i=0;i&lt;game.length;i++){ game[i].style.display='none'; } } function showgame(){ document.getElementById('game').style.width = "100%"; document.getElementById('memes').style.width = "0%"; document.getElementById("memes").style.transition = "all 0.5s"; document.getElementById("game").style.transition = "all 0.5s"; var memes= document.getElementsByClassName('memes'); for(var i=0;i&lt;memes.length;i++){ memes[i].style.display='none'; } }</pre><pre class="snippet-code-css lang-css prettyprint-override"> .body{ border: 1px solid black; display: flex; justify-content: space-between; align-items: center; margin-top: 10px; }.memes{ display: flex; justify-content: center; align-items: center; border: 1px solid black; width:48%; height: 500px; }.game{ display: flex; justify-content: center; align-items: center; border: 1px solid black; width:48%; height: 500px; }.butn{ width: 200px; height: 50px; }</pre><pre class="snippet-code-html lang-html prettyprint-override"> &lt;div class="body"&gt; &lt;div class="memes" id="memes"&gt; &lt;button class="butn" onclick="showmeme()"&gt;make a meme&lt;/button&gt; &lt;/div&gt; &lt;div class="game" id="game"&gt; &lt;button class="butn" onclick="showgame()"&gt;play meme games&lt;/button&gt; &lt;/div&gt; &lt;/div&gt;</pre></div></div><p></p></div> React,offsetTop,offsetLeft和getBoundingClientRect()不起作用 CSS转换宽度从右到左 CSS 从右到左过渡 Transition Div无效
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM