网页图片无缝循环滚动html代码

图片循环滚动代码
图片无缝滚动代码

先介绍一下它的实现思路:一个设定宽度并且隐藏超出它宽度的内容的容器demo,里面放demo1和demo2,demo1是滚动内容,demo2为demo1的直接克隆,通过不断改变demo1的scrollTop或者scrollLeft达到滚动的目的,当滚动至demo1与demo2的交界处时直接跳回初始位置,因为demo1与demo2一样,所以分不出跳动的瞬间,从而达到“无缝”滚动的目的。

先了解一下对象的几个的属性:
innerHTML:设置或获取位于对象起始和结束标签内的 HTML
scrollHeight: 获取对象的滚动高度。
scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象的滚动宽度
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置
offsetWidth:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的宽度


向上滚动的代码:
<div id=demo style=overflow:hidden;height:400;width:160;background:#214984;color:#ffffff><table align=top cellpadding=0 cellspace=0 border=0><tr><td id=demo1 valign=top><img src="pic/1.jpg" width="156" height="200" /><br><img src="pic/2.jpg" width="160" height="198" /><br><img src="pic/3.jpg" width="155" height="200" /><br><img src="pic/4.jpg" width="157" height="200" /></td></tr><tr><td id=demo2 valign=top></td></tr></table></div>
<script>
var speed=30
demo2.innerHTML=demo1.innerHTML//克隆demo1为demo2
function Marquee(){
if(demo2.offsetHeight-demo.scrollTop<=0)//当滚动至demo1与demo2交界时
demo.scrollTop-=demo1.offsetHeight//demo跳到最顶端
else{
demo.scrollTop++
}
}
var MyMar=setInterval(Marquee,speed)//设置定时器
demo.οnmοuseοver=function() {clearInterval(MyMar)}//鼠标移上时清除定时器达到滚动停止的目的
demo.οnmοuseοut=function() {MyMar=setInterval(Marquee,speed)}//鼠标移开时重设定时器
</script>


向下滚动:
<div id=demo style=overflow:hidden;height:400;width:160;background:#214984;color:#ffffff><table align=top cellpadding=0 cellspace=0 border=0><tr><td id=demo1 valign=top><img src="pic/1.jpg" width="156" height="200" /><br><img src="pic/2.jpg" width="160" height="198" /><br><img src="pic/3.jpg" width="155" height="200" /><br><img src="pic/4.jpg" width="157" height="200" /></td></tr><tr><td id=demo2 valign=top></td></tr></table></div>
<script>
var speed=30
demo2.innerHTML=demo1.innerHTML
function Marquee(){
if(demo.scrollTop<=0)
demo.scrollTop+=demo2.offsetHeight
else{
demo.scrollTop--
}
}
var MyMar=setInterval(Marquee,speed)
demo.οnmοuseοver=function() {clearInterval(MyMar)}
demo.οnmοuseοut=function() {MyMar=setInterval(Marquee,speed)}
</script>


向左滚动:
<div id=demo style=overflow:hidden;height:200;width:500;background:#214984;color:#ffffff><table align=left cellpadding=0 cellspace=0 border=0><tr><td id=demo1 valign=top><img src="pic/1.jpg" width="156" height="200" /><img src="pic/2.jpg" width="160" height="198" /><img src="pic/3.jpg" width="155" height="200" /><img src="pic/4.jpg" width="157" height="200" /></td><td id=demo2 valign=top></td></tr></table></div>
<script>
var speed=30
demo2.innerHTML=demo1.innerHTML
function Marquee(){
if(demo2.offsetWidth-demo.scrollLeft<=0)
demo.scrollLeft-=demo1.offsetWidth
else{
demo.scrollLeft++
}
}
var MyMar=setInterval(Marquee,speed)
demo.οnmοuseοver=function() {clearInterval(MyMar)}
demo.οnmοuseοut=function() {MyMar=setInterval(Marquee,speed)}
</script>

 

向右滚动:
<div id=demo style=overflow:hidden;height:200;width:500;background:#214984;color:#ffffff><table align=left cellpadding=0 cellspace=0 border=0><tr><td id=demo1 valign=top><img src="pic/1.jpg" width="156" height="200" /><img src="pic/2.jpg" width="160" height="198" /><img src="pic/3.jpg" width="155" height="200" /><img src="pic/4.jpg" width="157" height="200" /></td><td id=demo2 valign=top></td></tr></table></div>
<script>
var speed=30
demo2.innerHTML=demo1.innerHTML
function Marquee(){
if(demo.scrollLeft<=0)
demo.scrollLeft+=demo2.offsetWidth
else{
demo.scrollLeft--
}
}
var MyMar=setInterval(Marquee,speed)
demo.οnmοuseοver=function() {clearInterval(MyMar)}
demo.οnmοuseοut=function() {MyMar=setInterval(Marquee,speed)}
</script>

 

 

<!--无缝向左循环代码开始-->
   <div id="mhmove" style="overflow:hidden;width:800px;margin:0 auto 0;">
    <table width="800px" border="0" cellspacing="0" cellpadding="0">
    <tr>

      <td width="800px" id="mhmove1"><table width="800px" border="0" cellpadding="0" cellspacing="0">
        <tr>


        <td width="166" align="center"><img src="tupian/gumushi1538.4m.jpg" width="166" height="117" border="0" usemap="#Map2" /></td>

          <td width="166" align="center"> <img src="tupian/tupian1/pingchuanghe7[1].jpg" width="166" height="117" border="0" usemap="#Map"/></td>


          <td width="166" align="center"><img src="tupian/tupian1/1[2].jpg" width="166" height="117" border="0" usemap="#Map3" /></td>

          <td width="166" align="center"><img src="tupian/tupian1/6[1].jpg" width="166" height="117" border="0" usemap="#Map4"  /></td>

          <td width="172" align="center"><img src="tupian/tupian1/92[1].jpg" width="166" height="117" border="0" usemap="#Map5"  /></td>
   
    <td width="172" align="center"><img src="tupian/dujuan_da2.jpg" width="166" height="117" border="0" usemap="#Map6" /></td>
       </tr>
       
      </table></td>
      <td width="50" id="mhmove2">&nbsp;</td>
    </tr>
  </table>
   </div>
   
          <script>
    var speed=40 ;  
    mhmove2.innerHTML=mhmove1.innerHTML;
    function Marquee3(){
     if(mhmove2.offsetWidth-mhmove.scrollLeft<=0)
      mhmove.scrollLeft-=mhmove1.offsetWidth;
     else{
      mhmove.scrollLeft++;
     }
    }
    function Marquee4(){
     if(mhmove2.offsetHeight-mhmove.scrollTop<=0)
      mhmove.scrollTop-=mhmove1.offsetHeight;
     else{
      mhmove.scrollTop++;
     }
    }
    var MyMar2=setInterval(Marquee3,speed);
    mhmove.οnmοuseοver=function() {clearInterval(MyMar2)}
    mhmove.οnmοuseοut=function() {MyMar2=setInterval(Marquee3,speed)}
   </script>
<!--无缝循环代码结束-->

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现图片无缝循环滚动,可以使用 Vue 的过渡动画和 CSS3 的 transform 属性。具体实现步骤如下: 1. 在 Vue 的模板中使用 v-for 指令渲染图片列表,并添加一个包裹元素用于容纳图片。 2. 使用 CSS3 的 transform 属性将图片容器平移,使得第一张图片刚好显示在容器中。 3. 使用 Vue 的过渡动画,在图片容器中添加一个过渡组件,用于实现图片的滑动效果。 4. 使用定时器或者 requestAnimationFrame() 方法,定时更新图片容器的 transform 属性,实现图片循环滚动。 5. 为图片容器添加 touchstart、touchmove 和 touchend 事件,实现手动滑动滚动的效果。 下面是一个简单的实现示例: ```html <template> <div class="image-carousel"> <transition-group name="carousel-slide" tag="div"> <div class="image-item" v-for="(image, index) in images" :key="index"> <img :src="image" alt=""> </div> </transition-group> </div> </template> <script> export default { data() { return { images: [ 'image1.jpg', 'image2.jpg', 'image3.jpg', 'image4.jpg', 'image5.jpg' ], currentIndex: 0, startX: 0, startY: 0, endX: 0, endY: 0 } }, mounted() { this.startCarousel() this.initTouchEvent() }, methods: { startCarousel() { setInterval(() => { this.currentIndex = (this.currentIndex + 1) % this.images.length }, 3000) }, initTouchEvent() { const imageCarousel = this.$el imageCarousel.addEventListener('touchstart', e => { if (e.touches.length === 1) { this.startX = e.touches[0].clientX this.startY = e.touches[0].clientY } }) imageCarousel.addEventListener('touchmove', e => { if (e.touches.length === 1) { this.endX = e.touches[0].clientX this.endY = e.touches[0].clientY e.preventDefault() } }) imageCarousel.addEventListener('touchend', e => { const dx = this.endX - this.startX const dy = this.endY - this.startY if (Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 20) { if (dx > 0) { // 向右滑动 this.currentIndex = (this.currentIndex - 1 + this.images.length) % this.images.length } else { // 向左滑动 this.currentIndex = (this.currentIndex + 1) % this.images.length } } }) } }, computed: { transformStyle() { const translateX = -this.currentIndex * 100 return { transform: `translateX(${translateX}%)` } } } } </script> <style> .image-carousel { position: relative; overflow: hidden; width: 100%; height: 300px; } .carousel-slide-enter-active, .carousel-slide-leave-active { transition: transform 0.5s; } .carousel-slide-enter, .carousel-slide-leave-to { transform: translateX(100%); position: absolute; } .image-item { display: inline-block; width: 100%; height: 100%; vertical-align: top; } </style> ``` 在上面的代码中,使用了一个计算属性 transformStyle 来动态计算图片容器的 transform 属性,实现了自动循环滚动的效果。同时,使用了 touchstart、touchmove 和 touchend 事件来实现手动滑动滚动的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值