马黑黑 发表于 2024-4-6 09:36

背景图片滚动演示

本帖最后由 马黑黑 于 2024-4-6 09:38 编辑 <br /><br /><style>
#mydiv {
        margin: 20px auto;
        padding: 20px;
        width: 640px;
        height: 423px;
        background: url('https://638183.freep.cn/638183/t23/3/mwhxyb.jpg') no-repeat var(--begin) 0;
        border: 1px solid red;
        box-sizing: border-box;
        position: relative;
        --begin: 0px;
}
.tMid { text-align: center; }

.mum { position: relative; margin: 0; padding: 10px; font: normal 16px/20px Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; color: black; background: rgba(240, 240, 240,.95); box-shadow: 2px 2px 4px gray; border: thick groove lightblue; border-radius: 6px; }
.mum ::selection { background-color: rgba(0,100,100,.35); }
.mum div { margin: 0; padding: 0; }
.mum cl-cd { display: block; position: relative; margin: 0 0 0 50px; padding: 0 0 0 10px; white-space: pre-wrap; overflow-wrap: break-word; border-left: 1px solid silver; }
.mum cl-cd::before { position: absolute; content: attr(data-idx); width: 50px; color: gray; text-align: right; transform: translate(-70px); }
.tRed { color: red; }
.tBlue { color: blue; }
.tGreen { color: green; }
.tDarkRed { color: darkred; }
.tMagenta { color: magenta; }
</style>

<h2 class='tMid'>背景图片滚动演示</h2>
<div id="mydiv">图片尺寸:640*423<br>盒子尺寸:640*423</div>
<div style="width: 280px; margin: 20px 0 20px calc(50% - 50px)">
        <input id="bgmov" type="range" min="-640" max="640" value="0" />
        <output id="bgmsg">0</output>
        <button id="reset" type="button" value="reset" onclick="setting(0)" style="float: right">重置</button>
</div>

<p>演示背景滚动的目的,在于展现实现背景图片无缝循环的基本原理。演示是单张图片做背景,通过拖曳滑杆滑块,我们会发现背景图片在往左或往右移动,同时左边或右边出现空当,当滑到两边的尽头,背景图片消失。空当部分如果用合适的背景图适时弥补,便可实现背景图片在滚动时无缝衔接,这在布局技巧和精细算法上需要下一点功夫,目前我们已经实现利用伪元素令单图背景无缝循环滚动的功能,详情请看附一示例。</p>

<p>附一: <a href="http://qhxy.52qingyin.cn/art/bshow.php?st=4&sd=4&art=uvuz_1712322641" target="_blank">袖舞江南</a></p>

<p>附二:本演示核心代码</p>
<div class='mum'>
<cl-cd data-idx="1">&lt;<span class="tDarkRed">style</span>&gt;</cl-cd>
<cl-cd data-idx="2">#mydiv {</cl-cd>
<cl-cd data-idx="3">&nbsp; &nbsp; <span class="tBlue">margin:</span> 20px auto;</cl-cd>
<cl-cd data-idx="4">&nbsp; &nbsp; <span class="tBlue">width:</span> 640px;</cl-cd>
<cl-cd data-idx="5">&nbsp; &nbsp; <span class="tBlue">height:</span> 423px;</cl-cd>
<cl-cd data-idx="6">&nbsp; &nbsp; <span class="tGreen">/* 背景设为不重复,位置为 begin 0,begin是左右移动的变量 */</span></cl-cd>
<cl-cd data-idx="7">&nbsp; &nbsp; <span class="tBlue">background:</span> url(<span class="tMagenta">'https://638183.freep.cn/638183/t23/3/mwhxyb.jpg'</span>) no-repeat <span class="tBlue">var</span>(--begin) 0;</cl-cd>
<cl-cd data-idx="8">&nbsp; &nbsp; <span class="tBlue">border:</span> 1px solid red;</cl-cd>
<cl-cd data-idx="9">&nbsp; &nbsp; <span class="tBlue">position:</span> relative;</cl-cd>
<cl-cd data-idx="10">&nbsp; &nbsp; <span class="tBlue">--begin:</span> 0px;</cl-cd>
<cl-cd data-idx="11">}</cl-cd>
<cl-cd data-idx="12">&lt;<span class="tDarkRed">/style</span>&gt;</cl-cd>
<cl-cd data-idx="13">&nbsp;</cl-cd>
<cl-cd data-idx="14">&lt;<span class="tDarkRed">div</span> <span class="tRed">id</span>=<span class="tMagenta">"mydiv"</span>&gt;&lt;<span class="tDarkRed">/div</span>&gt;</cl-cd>
<cl-cd data-idx="15">&lt;<span class="tDarkRed">div</span> style=<span class="tMagenta">"<span class="tBlue">width:</span> 280px; <span class="tBlue">margin:</span> 20px 0 20px calc(50% - 50px)"</span>&gt;</cl-cd>
<cl-cd data-idx="16">&nbsp; &nbsp; &lt;<span class="tDarkRed">input</span> <span class="tRed">id</span>=<span class="tMagenta">"bgmov"</span> type=<span class="tMagenta">"range"</span> min=<span class="tMagenta">"-640"</span> max=<span class="tMagenta">"640"</span> value=<span class="tMagenta">"0"</span> /&gt;</cl-cd>
<cl-cd data-idx="17">&nbsp; &nbsp; &lt;<span class="tDarkRed">output</span> <span class="tRed">id</span>=<span class="tMagenta">"bgmsg"</span>&gt;0&lt;<span class="tDarkRed">/output</span>&gt;</cl-cd>
<cl-cd data-idx="18">&lt;<span class="tDarkRed">/div</span>&gt;</cl-cd>
<cl-cd data-idx="19">&nbsp;</cl-cd>
<cl-cd data-idx="20">&lt;<span class="tDarkRed">script</span>&gt;</cl-cd>
<cl-cd data-idx="21"><span class="tGreen">//滑杆输入事件 :驱动背景改变位置</span></cl-cd>
<cl-cd data-idx="22">bgmov.oninput = () =&gt; {</cl-cd>
<cl-cd data-idx="23">&nbsp; &nbsp; bgmsg.value = bgmov.value;</cl-cd>
<cl-cd data-idx="24">&nbsp; &nbsp; mydiv.style.setProperty(<span class="tMagenta">'--begin'</span>, bgmov.value + <span class="tMagenta">'px'</span>);</cl-cd>
<cl-cd data-idx="25">};</cl-cd>
<cl-cd data-idx="26">&lt;<span class="tDarkRed">/script</span>&gt;</cl-cd>
</div>

<script>

var setting = (val) => {
        bgmov.value = bgmsg.value = val;
        mydiv.style.setProperty('--begin', bgmov.value + 'px');
};

bgmov.oninput = () => {
        bgmsg.value = bgmov.value;
        mydiv.style.setProperty('--begin', bgmov.value + 'px');
};

setting(0);

</script>

红影 发表于 2024-4-6 09:43

这个可以用滑竿手动去移动图图,对于理解图片滚动更形象了{:4_187:}

红影 发表于 2024-4-6 09:45

这个帖子还能用来理解如何设置滑竿以及重置的设置,真棒{:4_199:}

小水瓢 发表于 2024-4-6 16:34

我也可以拉动图片,感觉挺厉害{:5_106:}

马黑黑 发表于 2024-4-6 18:14

小水瓢 发表于 2024-4-6 16:34
我也可以拉动图片,感觉挺厉害

厉害的说{:4_170:}

马黑黑 发表于 2024-4-6 18:14

红影 发表于 2024-4-6 09:43
这个可以用滑竿手动去移动图图,对于理解图片滚动更形象了

也许可以解释一下背景图片滚动最基本的原理

马黑黑 发表于 2024-4-6 18:15

红影 发表于 2024-4-6 09:45
这个帖子还能用来理解如何设置滑竿以及重置的设置,真棒

谢棒

南无月 发表于 2024-4-6 19:01

老师的演示贴看上去又实用又高级。。{:4_199:}

马黑黑 发表于 2024-4-6 19:56

南无月 发表于 2024-4-6 19:01
老师的演示贴看上去又实用又高级。。

果酱果酱

南无月 发表于 2024-4-6 20:15

马黑黑 发表于 2024-4-6 19:56
果酱果酱

{:4_174:}果酱快被吃完了

马黑黑 发表于 2024-4-6 21:01

南无月 发表于 2024-4-6 20:15
果酱快被吃完了

有的是有的是

红影 发表于 2024-4-6 23:31

马黑黑 发表于 2024-4-6 18:14
也许可以解释一下背景图片滚动最基本的原理

是的,这个演示特别好{:4_187:}

红影 发表于 2024-4-6 23:32

马黑黑 发表于 2024-4-6 18:15
谢棒

不是棍棒的棒哦,是代表很好的棒{:4_170:}

马黑黑 发表于 2024-4-7 09:18

红影 发表于 2024-4-6 23:31
是的,这个演示特别好

谢好

马黑黑 发表于 2024-4-7 09:18

红影 发表于 2024-4-6 23:32
不是棍棒的棒哦,是代表很好的棒

棍棒之下,谁能说棍棒不好?

南无月 发表于 2024-4-7 18:19

马黑黑 发表于 2024-4-6 21:01
有的是有的是

哪里哪里。。{:4_170:}

马黑黑 发表于 2024-4-7 18:26

南无月 发表于 2024-4-7 18:19
哪里哪里。。

这里这里

南无月 发表于 2024-4-7 20:39

马黑黑 发表于 2024-4-7 18:26
这里这里

这里咋就这么好呢。。真是个好地方。{:4_170:}

马黑黑 发表于 2024-4-7 22:08

南无月 发表于 2024-4-7 20:39
这里咋就这么好呢。。真是个好地方。

{:4_190:}
页: [1]
查看完整版本: 背景图片滚动演示