精华内容
下载资源
问答
  • web轮播图demo

    2016-01-22 12:13:08
    web轮播图demo
  • WEB轮播大全

    2018-08-31 10:08:28
    各种各样的网页轮播方式,满足你的各种需求,响应式轮播
  • 主要给大家介绍了利用纯js + transition动画实现移动端web轮播图的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考借鉴,下面来一起看看吧。
  • 在做移动端开发的时候,必不可少的是轮播图,下面这篇文章主要给大家介绍了关于利用纯JS实现移动端web轮播图的相关资料,重要的是结合Tween算法造轮子,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,...
  • 130-web轮播

    2018-12-12 18:37:08
    web轮播图 来做一个轮播图 window.onload=function(){ var leftBtn=document.getElementById('btn01'); var rightBtn=document.getElementById('btn02'); var ul=document.getElementById('list'); //初始化...
    
    
    web轮播图
    
    
    
    来做一个轮播图
    window.onload=function(){
    
    var leftBtn=document.getElementById('btn01');
    var rightBtn=document.getElementById('btn02');
    var ul=document.getElementById('list');
    
    //初始化位置
    var left=0;
    
    //设置一个移动增量
    var size= -3;
    
    //将图片列表复制一份
    //将5个li变成10个li
    ul.innerHTML+=ul.innerHTML
    
    setInterval(fnMove,20);
    
    //移动函数
    function fnMove(){
    	//自增从操作
    	left+=size;
    
    	//左移判断
    	if(left<-1000){
    	left=0;
    	}	
    	
    	//右移判断
    	if(left>0){
    	left=-1000;
    	}
    
    	//修改定位的值
    	ul.style.left=left+"px";
    }
    
    
    leftBtn.onclick=funtion(){
    	size=-3;
    }
    
    rightBtn.onclick=function(){
    	size=3;
    }
    
    }
    
    
    
    js定时器
    <script>
    	function fnAlert(){
    		alert('abc);
    	}
    
    	fnAlert();
    </script>
    
    我们把这段代码改成延时的
    那么我们使用一下 一次性定时器
    
    <script>
    	function fnAlert(){
    		alert('abc);
    	}
    
    	setTimeout(fnAlert,2000);
    </script>
    
    我们把函数名放在setTimeout方法里面
    现在这样的话,就会在2秒后调用fnAlert
    
    
    
    var oTime=setTimeout(fnAlert,2000);
    clearTimeout(oTime);
    
    clearTimeout方法
    用来清除一次性定时器
    
    
    
    
    再来说反复执行的定时器
    setInterval(fnAlert,2000);
    这样就是2秒执行一次
    
    反复执行的定时器也可以被清除
    var oTime=setInterval(fnAlert,2000);
    clearInterval(oTime)
    
    
    
    
    预解析
    fnAlert();
    
    function fnAlert(){
    	alert("hello world");
    }
    
    
    一般的函数可以使用预解析
    但是变量最好不要使用预解析
    
    
    
    document.getElementById
    document代表了页面所有标签
    其实也就是代表整个html文档
    
    
    
    font-size: 10px;
    改成
    div.fontSize=10px;
    
    
    
    btn.onclick=fnOnclick;
    不用加()括号
    
    也可以使用匿名函数
    btn.onclick=function(){
    
    }
    
    
    
    var num='10'
    if (num==10)
    隐式转换
    
    if (num===10)
    这样会比对类型
    
    
    
    
    
    数组结尾添加和删除
    list.push(99);
    list.pop();
    反转
    list.reverse();
    添加删除
    list.splice(2,1);
    list.splice(2,0,3);
    
    
    
    

     

    展开全文
  • JS实现某东移动web轮播

    千次阅读 多人点赞 2019-01-03 18:24:00
    移动web轮播图 参考实例,可以从中保存轮播图的图片,这里我们放入uploads的文件夹下,将八张图片一次改为l1.jpg,l2.jpg… https://m.jd.com/ HTML 这里要放入十张图片,因为手指滑动的时候要从第一张滑动...

    移动web轮播图

    参考实例,可以从中保存轮播图的图片,这里我们放入uploads的文件夹下,将八张图片一次改为l1.jpg,l2.jpg…(最后面都demo)

    https://m.jd.com/

    HTML

    1. 这里要放入十张图片,因为手指滑动的时候要从第一张滑动到最后一张,是无缝滑动,当然可以用原生的JS进行添加
    2. 最终我们可以通过移动ul来达到轮播的效果,所以ul的宽度要刚好放得下十张图片
    3. ol下的li是分页器,也就是我们看到的圆圈,类.current为选中状态
    4. clearfix类是清除浮动
    <div class="jd_banner">
    		<ul class="jd_wrap clearfix">
    				<li><a href="javascript:;"><img src="uploads/l8.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l1.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l2.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l3.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l4.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l5.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l6.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l7.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l8.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l1.jpg" alt=""></a></li>
    		</ul>
    		<ol>
    			<li class="current"></li>
    			<li></li>
    			<li></li>
    			<li></li>
    			<li></li>
    			<li></li>
    			<li></li>
    			<li></li>
    		</ol>
    	</div>
    

    css样式

    .clearfix::before,
    .clearfix::after{
        content: "";
        display: block;
        height: 0;
        line-height: 0px;
        clear: both;
        visibility: hidden;
    }
    
    .jd_banner {
      max-width: 640px;
      min-width: 320px;
      margin: 100px auto;
      width: 100%;
      position: relative;
      overflow: hidden;
    }
    .jd_banner .jd_wrap {
      width: 1000%;
      transform: translateX(-10%);
    }
    .jd_banner .jd_wrap li {
      width: 10%;
      float: left;
    }
    .jd_banner .jd_wrap li img {
      width: 100%;
    }
    .jd_banner ol {
      height: 10px;
      position: absolute;
      left: 50%;
      bottom: 3px;
      transform: translateX(-50%);
    }
    .jd_banner ol li {
      width: 6px;
      height: 6px;
      float: left;
      border: 1px solid #fff;
      margin-left: 10px;
      border-radius: 50%;
    }
    .jd_banner ol li.current {
      background: #fff;
    }
    

    轮播图效果

    JS

    1. 我们主要通过控制index,translateX,监听过渡动画的结束(webkitTransitionEnd)来实现轮播
    2. 对index进行限制
    3. 相同的代码进行封装
    4. 优化代码
    var jdCon = document.querySelector('.jd_banner')
    	var ul = document.querySelector('.jd_banner>.jd_wrap')
    	var index = 1
    	var li = ul.querySelectorAll('li')
    	var olLi = document.querySelectorAll('ol>li')
    	var imgWidth = li[0].offsetWidth
    	// 过渡移动的效果
    	var transit = function(move){
    		var move = move || 0
    		ul.style.transition = 'all 0.5s linear'
    		ul.style.transform = `translateX(${-imgWidth*index+move}px)`
    	}
    	// 瞬间定位效果
    	var moment = function(distanceMove){
    		var distanceMove = distanceMove || 0
    		ul.style.transform = `translateX(${-imgWidth*index+distanceMove}px)`
    		ul.style.transition = 'none'
    	}
    	window.onresize = function(){
    		imgWidth = li[0].offsetWidth
    	}
    	var timer1 = setInterval(function(){
    		index++;
    		transit()
    	}, 1000)
    	ul.addEventListener('webkitTransitionEnd', function(){
    		if(index>li.length-2){
    			index = 1
    			moment()
    		}
    		if(index<1){
    			index = li.length-2
    			moment()
    		}
    		document.querySelector('.current').classList.remove('current')
    		olLi[index-1].classList.add('current')
    	})
    	var distanceStart = 0;
    	var move = 0;
    	var distanceEnd = 0;
    	jdCon.addEventListener('touchstart',function(e){
    		clearInterval(timer1)
    		distanceStart = e.touches[0].clientX
    	})
    	jdCon.addEventListener('touchmove',function(e){
    		var distance = e.touches[0].clientX
    		move = distance - distanceStart
    		moment(move)
    	})
    	jdCon.addEventListener('touchend',function(){
    		if(move>imgWidth/2){
    			index--
    			transit()
    		}else if(move<-imgWidth/2){
    			index++
    			transit()
    		}else{
    			transit()
    		}
    		distanceStart = 0;
    		move = 0;
    		distanceEnd = 0;
    		timer1 = setInterval(function(){
    			index++;
    			transit()
    		}, 1000)
    	})
    

    整体思路

    1. 首先做好布局,ul的子元素li要在一行上,无缝链接
    2. 利用css,ul的宽度为1000%, 设置transform: translateX(-10%);,使得不会显示展示给用户的最后一张图片,显示第一张图片
    3. 自动播放轮播图
    4. 利用定时器,让index每次加1,然后过渡滚动一张图片
    var timer1 = setInterval(function(){
    		index++;
    		ul.style.transition = 'all 0.5s linear'
    		ul.style.transform = `translateX(${-imgWidth*index}px)`
    	}, 1000)
    
    1. 监听webkitTransitionEnd,过渡动画结束时,清除当前的类.current,给ol下的li[index]添加一个类
    2. 过渡动画结束后,如果index过大,我们要对其进行限制,当index为9,此时界面显示的是第十张图片,也就是用户看到的第一张图片,所以我们瞬间(在0s)让其移动到第一张,在令index=1
    ul.addEventListener('webkitTransitionEnd', function(){
    		// 当时间过渡结束
    		// 添加.current
    		if(index>8){
    			// 当第一张移动完成后
    			// 瞬间让index变为1
    			ul.style.transform = `translateX(${-imgWidth}px)`
    			ul.style.transition = 'none'
    			index = 1
    		}		document.querySelector('.current').classList.remove('current')
    		olLi[index-1].classList.add('current')
    	})
    
    1. ul跟随着手指的滑动而滑动,当手指滑动多少,ul跟着滑动多少
    var distanceStart = 0;
    	var move = 0;
    	var distanceEnd = 0;
    jdCon.addEventListener('touchstart',function(e){
    		clearInterval(timer1)
    		distanceStart = e.touches[0].clientX
    	})
    	jdCon.addEventListener('touchmove',function(e){
    		var distance = e.touches[0].clientX
    		move = distance - distanceStart
    		ul.style.transform = `translateX(${-imgWidth*index+move}px)`
    		ul.style.transition = 'none'
    	})
    
    1. 滑动结束时做吸附效果
    2. 向右滑动时,如果滑动大于图片二分之一的宽度,当手指放开则加上过渡动画效果移动到上一张图片,此时我们移动始终是控制index
    if(move>imgWidth/2){
    			index--
    			ul.style.transition = 'all 0.5s linear'
    			ul.style.transform = `translateX(${-imgWidth*index}px)`
    		}
    
    1. 向左滑动时,如果滑动大于图片二分之一的宽度,当手指放开则加上过渡动画效果移动到下一张图片,此时我们移动始终是控制index
    else if(move<-imgWidth/2){
    			index++
    			ul.style.transition = 'all 0.5s linear'
    			ul.style.transform = `translateX(${-imgWidth*index}px)`
    		}
    
    1. 其它情况保持显示现状的图片
    else{
    			ul.style.transition = 'all 0.5s linear'
    			ul.style.transform = `translateX(${-imgWidth*index}px)`
    		}
    
    1. 最后所有的清0,开启定时器
    2. 相同代码封装,测试是否有bug,发现右滑有问题--------始终通过控制index来实现移动和切换ol分页器,要对index进行限制。对数字通过ul下的li.length来控制,将代码封装成可调用,可读性,逻辑性的代码
    if(index<1){
    			ul.style.transform = `translateX(${-imgWidth*8}px)`
    			ul.style.transition = 'none'
    			index = 8
    		}
    

    步骤

    /*
    	获取 必须知道的 变量
    	处理 
    	1: 不考虑过渡效果 实现自动播放
    		定时器中 index++
    			    限制index的值
    			   修改 轮播图ul的 位置
    			   考虑到 索引从1开始
    			   css 默认 让ul 往左边窜一个屏幕宽度
    	2:	  根据索引li标签 给li添加类
    		监听滚动结束添加.current类
    	3:然切换有动画效果
    		使用css3中的transition
    	4:当我切换到 最后一张时 瞬间 切到 第一张
    		关闭过度
    		瞬间切换到第一张
    
    	5:过渡结束知识点
    		由于 我们在修改 ul的位置时 会使用过度
    		当注册了 过渡结束事件之后,每次 过渡完毕 都会 调用该事件
    			将 判断 index  是否 越界 以及 修改 索引的 代码 全部 迁移到 过渡结束事件中
    	6: 使用touch事件,实现 手指 拨动 ul滑动 效果
    	7:封装优化代码
    */
    

    疑问

    1. 宽高必须考虑到移动web的适配方案
    2. 可能大家会把ul进行定位,ul定位(absolute),我们就无法把父盒子撑开,也就是父盒子jd_banner就没有高度,到时ol也很难定位,影响页面布局等问题
    3. 直接给父盒子设置高度,但是我们这个高度不好设置,因为不同的屏幕图片高度是不一致的
    4. 使用translateX来移动逻辑会更简单些
    5. 注意要样式重置,比如img要去掉基线
    6. clearfix可以不加,因为父盒子jd_banner已经设置overflow: hidden;会触发bfc
    7. 实际开发中最好使用zetop.js或则swiper.js来提高我们的开发效率

    DEMO

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    	<title>Document</title>
    	<style>
    	*{
    		padding: 0;
    		margin: 0;
    	}
    	ol,ul{
    		list-style: none;
    	}
    		.clearfix::before,
    		.clearfix::after{
    		    content: "";
    		    display: block;
    		    height: 0;
    		    line-height: 0px;
    		    clear: both;
    		    visibility: hidden;
    		}
    		.jd_banner {
    		  max-width: 640px;
    		  min-width: 320px;
    		  margin: 100px auto;
    		  width: 100%;
    		  position: relative;
    		  overflow: hidden;
    		}
    		.jd_banner .jd_wrap {
    		  width: 1000%;
    		  transform: translateX(-10%);
    		}
    		.jd_banner .jd_wrap li {
    		  width: 10%;
    		  float: left;
    		}
    		.jd_banner .jd_wrap li img {
    		  width: 100%;
    		}
    		.jd_banner ol {
    		  height: 10px;
    		  position: absolute;
    		  left: 50%;
    		  bottom: 3px;
    		  transform: translateX(-50%);
    		}
    		.jd_banner ol li {
    		  width: 6px;
    		  height: 6px;
    		  float: left;
    		  border: 1px solid #fff;
    		  margin-left: 10px;
    		  border-radius: 50%;
    		}
    		.jd_banner ol li.current {
    		  background: #fff;
    }
    
    	</style>
    </head>
    <body>
    	<div class="jd_banner">
    		<ul class="jd_wrap clearfix">
    				<li><a href="javascript:;"><img src="uploads/l8.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l1.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l2.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l3.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l4.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l5.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l6.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l7.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l8.jpg" alt=""></a></li>
    				<li><a href="javascript:;"><img src="uploads/l1.jpg" alt=""></a></li>
    		</ul>
    		<ol>
    			<li class="current"></li>
    			<li></li>
    			<li></li>
    			<li></li>
    			<li></li>
    			<li></li>
    			<li></li>
    			<li></li>
    		</ol>
    	</div>
    
    </body>
    <script>
    	var jdCon = document.querySelector('.jd_banner')
    	var ul = document.querySelector('.jd_banner>.jd_wrap')
    	var index = 1
    	var li = ul.querySelectorAll('li')
    	var olLi = document.querySelectorAll('ol>li')
    	var imgWidth = li[0].offsetWidth
    	// 过渡移动的效果
    	var transit = function(move){
    		var move = move || 0
    		ul.style.transition = 'all 0.5s linear'
    		ul.style.transform = `translateX(${-imgWidth*index+move}px)`
    	}
    	// 瞬间定位效果
    	var moment = function(distanceMove){
    		var distanceMove = distanceMove || 0
    		ul.style.transform = `translateX(${-imgWidth*index+distanceMove}px)`
    		ul.style.transition = 'none'
    	}
    	window.onresize = function(){
    		imgWidth = li[0].offsetWidth
    	}
    	var timer1 = setInterval(function(){
    		index++;
    		transit()
    	}, 1000)
    	ul.addEventListener('webkitTransitionEnd', function(){
    		if(index>li.length-2){
    			index = 1
    			moment()
    		}
    		if(index<1){
    			index = li.length-2
    			moment()
    		}
    		document.querySelector('.current').classList.remove('current')
    		olLi[index-1].classList.add('current')
    	})
    	var distanceStart = 0;
    	var move = 0;
    	var distanceEnd = 0;
    	jdCon.addEventListener('touchstart',function(e){
    		clearInterval(timer1)
    		distanceStart = e.touches[0].clientX
    	})
    	jdCon.addEventListener('touchmove',function(e){
    		var distance = e.touches[0].clientX
    		move = distance - distanceStart
    		moment(move)
    	})
    	jdCon.addEventListener('touchend',function(){
    		if(move>imgWidth/2){
    			index--
    			transit()
    		}else if(move<-imgWidth/2){
    			index++
    			transit()
    		}else{
    			transit()
    		}
    		distanceStart = 0;
    		move = 0;
    		distanceEnd = 0;
    		timer1 = setInterval(function(){
    			index++;
    			transit()
    		}, 1000)
    	})
    
    </script>
    </html>
    
    展开全文
  • web轮播图+侧边栏.zip

    2021-06-03 13:19:37
    web大作业侧边栏+轮播
  • 移动WEB轮播

    2020-09-01 19:31:14
    首先定义一个盒子作为轮播图容器,加入轮播图的图片元素和导航图片元素。 一共有4张图片轮播,需要添加两张图片作为过渡,分别是第一张和最后一张要轮播的图片,使他连贯不冲突。 <div class="rotation"> <...

    HTML
    首先定义一个盒子作为轮播图容器,加入轮播图的图片元素和导航图片元素。
    一共有4张图片轮播,需要添加两张图片作为过渡,分别是第一张和最后一张要轮播的图片,使他连贯不冲突。

    <div class="rotation">
    <ul class="imgs">
                    <li>
                        <img src="images/graduation1.png" alt="" >
                        <p>我校举行庆祝2019/7/2</p>
                    </li>
                    <li>
                        <img src=" images/rotation1.png" alt="">
                        <p>我校举行庆祝建党98周年升国旗仪式 2019/7/2</p>
                    </li>
                    <li>
                        <img src="images/rotation1.png" alt="" >
                        <p>学生合照 2019/7/2</p>
                    </li>
                    <li>
                        <img src="images/rotation1.png" alt="" >
                        <p>建党98周年升国旗仪式 2019/7/2</p>
                    </li>
                    <li>
                        <img src="images/graduation1.png" alt="" >
                        <p>我校举行庆祝2019/7/2</p>
                    </li>
                    <li>
                        <img src="images/rotation1.png" alt="" >
                        <p>我校举行庆祝建党98周年升国旗仪式 2019/7/2</p>
                    </li>
    
                </ul>
                <ol class="circle">
                    <li class="red_current"></li>
                    <li></li>
                    <li></li>
                    <li></li>
                </ol>
            </div>
    

    CSS
    对轮播图添加样式

    nav .rotation {
        /* !!轮播图下面的div抖动问题: 在图片的上一层div样式上加一个transform:translataZ(0)*/
        transform: translateZ(0);
        overflow: hidden;
        position: relative;
        width: 100%;
        height: 270px;
        /* background-color: pink; */
    }
    nav .rotation .imgs {
    //一共有六张图片
        width: 600%;
        margin-left: -100%;
        overflow: hidden;
        //高度要比图片大小高,因为还有文字描述需要加进来
        height: 250px;
    }
    
    nav .rotation .imgs li {
    //将图片浮动使它们在一行排列
        float: left;
        width: 414px;
        height: 212px;
        margin: 0 auto;
    
    }
    //设置图片大小
    .rotation .imgs li img {
        margin-bottom: 16px;
        height: 212px;
        width: 100%;
    }
    
    //设置图片大小和位置
    .rotation li p {
        display: block;
        float: left;
        height: 16px;
        line-height: 16px;
        font-size: 14px;
    }
    //定位小圆点位置
    .rotation .circle {
        position: absolute;
        bottom: 25px;
        right: 0px;
    }
    //设置小圆点样式,大小
    .rotation .circle li {
        float: left;
        width: 10px;
        height: 10px;
        margin: 4px;
        border-radius: 5px;
        background-color: #d0d0d0;
    }
    //设置第几张图片轮播时相应圆点变化的样式:颜色边框大小之类的,这里就变化了颜色
    .rotation .circle .red_current {
        background-color: red;
    }
    

    Javascript

    window.addEventListener('load', function () {
    
        //阻止手长期触碰屏幕触发右键
        window.addEventListener('contextmenu', function (e) {
            e.preventDefault();
        })
        // 获取轮播图模块
        var rotation = document.querySelector('.rotation');
        // 获取图片模块
        var imgs = rotation.querySelector('.imgs');
        // 获取小圆点模块
        var circle = rotation.querySelector('.circle');
        //获取轮播图模块的宽度
        var wth = rotation.offsetWidth;
        // console.log(circle);
        // 设置图片的下标
        var index = 0;
        // 定时器:每两秒播放下一张图片
        var timer = setInterval(function () {
            index++;
            // 下一张图片的位置
            var translatex = -(index * wth);
            // console.log(translatex);
            // 过渡效果
            imgs.style.transition = 'all 0.5s';
            // 移动的终点位置,这里的终点位置不是相对与上一张图的位置,一直都是相对于起点位置(0,0);
            imgs.style.transform = 'translateX(' + translatex + 'px)';
        }, 2000)
        // 当过渡效果结束后,触发事件
        imgs.addEventListener('transitionend', function () {
            // 如果移动到第5张图结束,则回到第一张
            if (index >= 4) {
                index = 0;
                // 回到第一张不需要触发过渡效果,因为第五张图与第一张图是一样的
                imgs.style.transition = 'none';
                var translatex = -(index * wth);
                //  因为这里的下标是4的图,即第五张与第一张一样的图,要回到第一张图,,否则只是下标回去,而图为第五张图,之后小圆点会把1忽略
                imgs.style.transform = 'translateX(' + translatex + 'px)';
            } else if (index < 0) {
                // 如果为负数则说明滑动到-1,则需要回到看到的最后一张图,即第四张图,下标为3
                index = 3;
                // 取消过渡效果
                imgs.style.transition = 'none';
                var translatex = -(index * wth);
                // 图片回到第四张图,下标为3的图
                imgs.style.transform = 'translateX(' + translatex + 'px)';
            }
    
            // 运用classList将带有这个红点样式的类移除,再添加这个红点样式类给另一个元素
            // 当过渡效果触发时,即图片已经替换,获取小圆点
            var red_current = circle.querySelector('.red_current');
            // console.log(red_current);
            // 将小圆点这个类移除,即类似排他法,将所有元素的小红圆点清掉,再将新的对应下标的小圆点赋予红色
            red_current.classList.remove('red_current');
            circle.children[index].classList.add('red_current');
        })
    
        // 手触碰时的位置
        var startX = 0;
        // 手触碰后移动的距离
        var moveX = 0;
        // 判断触摸后是否移动距离
        var flag = false;
        // 手触到图片触发事件
        imgs.addEventListener('touchstart', function (e) {
            // 获取手触碰时的位置
            startX = e.targetTouches[0].pageX;
            // console.log(startX);
            // 当手触碰轮播图终止定时器,结束移动
            clearInterval(timer);
            // console.log(1111);
        })
        // 当手移动时触发事件
        imgs.addEventListener('touchmove', function (e) {
            // console.log(2222);
            // 移动的距离 = 手指新位置 - 手指刚触碰时的位置
            moveX = e.targetTouches[0].pageX - startX;
            // console.log(moveX);
            // 图片移动距离=目前位置+手指移动距离
            var translatex = moveX - index * wth;
            // 移除过渡效果
            imgs.style.transition = 'none';
            // 图片移动距离
            imgs.style.transform = 'translateX(' + translatex + 'px)';
            // 记录手指移动过
            flag = true;
        })
        // 手指松开触发事件
        imgs.addEventListener('touchend', function (e) {
            // 如果移动时间触发过则执行
            if (flag == true) {
                // 移动距离大于50px则执行效果
                if (Math.abs(moveX) > 50) {
                    // 大于0则说明手指右移,图片左移,下标减一。反之,小于0手指左移,图片右移,下标加一
                    if (moveX > 0) {
                        index--;
                    } else {
                        index++;
                    }
                    // 移动到下一个图片的距离
                    var translatex = -(index * wth);
                    // 触发过渡效果
                    imgs.style.transition = 'all 0.3s';
                    imgs.style.transform = 'translateX(' + translatex + 'px)';
                } else {
                    // 移动距离小于50px则执行效果,回到当前下标位置;
                    var translatex = -(index * wth);
                    imgs.style.transition = 'all 0.1s';
                    imgs.style.transform = 'translateX(' + translatex + 'px)';
                }
            }
            //保证只有一个定时器开着
            clearInterval(timer);
            // 开启定时器
            timer = setInterval(function () {
                index++;
                var translatex = -(index * wth);
                // console.log(translatex);
                imgs.style.transition = 'all 0.5s';
                imgs.style.transform = 'translateX(' + translatex + 'px)';
    
            }, 2000)
        })
    })
    
    展开全文
  • 移动端web轮播图,包括触摸左右滑动切换效果 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=...

    移动端web轮播图,包括触摸左右滑动切换效果

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=0">
        <title>Title</title>
    </head>
    <style>
        *
        {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            -webkit-box-sizing: border-box;
        }
        ul{
            list-style: none;
        }
        a{
            text-decoration: none;
        }
        body{
            background-color:#f5f5f5 ;
        }
        .banner{
            width: 100%;
            position: relative;
            overflow: hidden;
        }
        .banner ul:first-child{
            width: 1000%;
            transform: translateX(-10%);
            -webkit-transform: translateX(-10%);
        }
        .banner ul li{
            float: left;
            width: 10%;
        }
        .banner ul li a{
            display: block;
            width: 100%;
        }
        .banner ul li img{
            display: block;
            width: 100%;
        }
        .banner ul:last-child{
            position: absolute;
            width: 118px;
            height: 6px;
            left: 50%;
            margin-left:-59px;
            bottom: 6px;
        }
        .banner ul:last-child li{
            width: 6px;
            height: 6px;
            border-radius: 3px;
            border: 1px solid #fff;
            margin-left:10px;
            float: left;
        }
        .banner ul:last-child li:first-child{
            margin-left: 0;
        }
        .banner ul:last-child .now{
            background: #fff;
        }
    </style>
    <body>
        <!--轮播图-->
        <div class="banner">
            <ul>
                <li><a href="#"><img src="images/l8.jpg" alt=""></a></li>
                <li><a href="#"><img src="images/l1.jpg" alt=""></a></li>
                <li><a href="#"><img src="images/l2.jpg" alt=""></a></li>
                <li><a href="#"><img src="images/l3.jpg" alt=""></a></li>
                <li><a href="#"><img src="images/l4.jpg" alt=""></a></li>
                <li><a href="#"><img src="images/l5.jpg" alt=""></a></li>
                <li><a href="#"><img src="images/l6.jpg" alt=""></a></li>
                <li><a href="#"><img src="images/l7.jpg" alt=""></a></li>
                <li><a href="#"><img src="images/l8.jpg" alt=""></a></li>
                <li><a href="#"><img src="images/l1.jpg" alt=""></a></li>
            </ul>
            <ul>
                <li class="now"></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    </body>
    <script>
        window.onload = function () {
        banner();
        };
        var banner = function () {
            /*1. 自动轮播图且无缝   定时器,过渡*/
            /*2. 点要随着图片的轮播改变  根据索引切换*/
            /*3. 滑动效果  利用touch事件完成*/
            /*4. 滑动结束的时候    如果滑动的距离不超过屏幕的1/3  吸附回去   过渡*/
            /*5. 滑动结束的时候    如果滑动的距离超过屏幕的1/3  切换(上一张,下一张)根据滑动的方向,过渡*/
    	    /*轮播图*/
            var banner = document.querySelector('.banner');
            /*屏幕宽度*/
            var width = banner.offsetWidth;
            /*图片容器*/
            var imageBox = banner.querySelector('ul:first-child');
            /*点容器*/
            var pointBox = banner.querySelector('ul:last-child');
            /*所有的点*/
            var points = pointBox.querySelectorAll('li');
            var addTransition = function () {
                imageBox.style.transition = 'all 0.2s';
                imageBox.style.webkitTransition = 'all 0.2s';
            }
            var removeTransition = function () {
                imageBox.style.transition = 'none';
                imageBox.style.webkitTransition = 'none';
            }
            var setTranslateX = function (translateX) {
                imageBox.style.transform = 'translateX(' + translateX + 'px)';
                imageBox.style.webkitTransform = 'translateX(' + translateX + 'px)';
            }
            /*程序的核心 index */
            var index = 1;
            var timer = setInterval(function () {
                index++;
                /*加过渡*/
                addTransition();
                /*做位移*/
                setTranslateX(-index * width);
            }, 1000);
            /*需要等最后一张动画结束去判断 是否瞬间定位第一张*/
            imageBox.addEventListener('transitionend', function () {
                /*自动滚动的无缝*/
                if (index >= 9) {
                    index = 1;
                    /*瞬间定位*/
                    /*清过渡*/
                    removeTransition();
                    /*做位移*/
                    setTranslateX(-index * width);
                }
                /*滑动的时候也需要无缝*/
                else if (index <= 0) {
                    index = 8;
                    /*瞬间定位*/
                    /*清过渡*/
                    removeTransition();
                    /*做位移*/
                    setTranslateX(-index * width);
                }
                /*根据索引设置点*/
                /*此时此刻  index  的取值范围  1-8(0,8--1,9)*/
                /*点索引  index - 1 */
                setPoint();
            });
            /*设置点的方法*/
            var setPoint = function () {
                /*index 1-8*/
                /*清除样式*/
                for (var i = 0; i < points.length; i++) {
                    var obj = points[i];
                    obj.classList.remove('now');
                }
                /*给对应的加上样式*/
                points[index - 1].classList.add('now');
            }
            /*绑定事件*/
            var startX = 0;
            var distanceX = 0;
            var isMove = false;
            banner.addEventListener('touchstart', function (e) {
                /*清除定时器*/
                clearInterval(timer);
                /*记录起始位置的X坐标*/
                startX = e.touches[0].clientX;
            });
            banner.addEventListener('touchmove', function (e) {
                /*记录滑动过程当中的X坐标*/
                var moveX = e.touches[0].clientX;
                /*计算位移  有正负方向*/
                distanceX = moveX - startX;
                /*计算目标元素的位移  不用管正负*/
                /*元素将要的定位=当前定位+手指移动的距离*/
                var translateX = -index * width + distanceX;
                /*滑动--->元素随着手指的滑动做位置的改变*/
                removeTransition();
                setTranslateX(translateX);
                isMove = true;
            });
            banner.addEventListener('touchend', function (e) {
                /*4.  5.  实现*/
                /*要使用移动的距离*/
                if (isMove) {
                    if (Math.abs(distanceX) < width / 3) {
                        /*吸附*/
                        addTransition();
                        setTranslateX(-index * width);
                    } else {
                        /*切换*/
                        /*右滑动 上一张*/
                        if (distanceX > 0) {
                            index--;
                        }
                        /*左滑动 下一张*/
                        else {
                            index++;
                        }
                        /*根据index去动画的移动*/
                        addTransition();
                        setTranslateX(-index * width);
                    }
                }
                /*最好做一次参数的重置*/
                startX = 0;
                distanceX = 0;
                isMove = false;
                /*加上定时器*/
                clearInterval(timer);
                timer = setInterval(function () {
                    index++;
                    /*加过渡*/
                    addTransition();
                    /*做位移*/
                    setTranslateX(-index * width);
                }, 1000);
            });
        }
    </script>
    </html>
    
    展开全文
  • 原生JS实现移动端web轮播图详解(结合Tween算法造轮子)发布时间:2020-09-19 21:30:05来源:脚本之家阅读:80作者:苦练内功前言相信大家应该都知道,移动端的轮播图是我们比较常见的需求, 我们最快的实现方式往往是 ...
  • 2.移动端web轮播

    2020-03-20 18:42:59
    html+css 轮播图大小为618*244,只支持触摸图片时滑动,不支持鼠标滑动。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=...
  • 在这里我们使用HTML+CSS+JavaScript制作一个简单的Web轮播图,也可以在代码中添加链接转到其他链接,在这里我是把链接改为"#"。如果需要里面的代码可以在评论区联系 产品展示: 这里面大多运用到HTML+CSS里面的...
  • web 轮播图(2)

    2018-01-16 22:54:50
    轮播图的第二种思路 通过修改opacity,z-index来实现轮播,通过tranfrom属性,可以让图片淡入淡出。js的实现与第一种基本一样,html则是只需container(显示框) 与 container的孩子元素-装载图片的div。 html代码...
  • web 轮播图(1):

    2018-01-16 22:09:05
    首先是轮播图的思路: ①.用一个div(container)装需要展示的img,然后将这个大的div放进一个小的显示框(box)(即网页上可看的部分),对显示框设置超出部分隐藏。然后利用js或者css来改变container的left值,来...
  • < div class = " wrap scrollleft " style =" height : 475px ; " > < ul > < li > < img id = " msgSpan " src = " views/images1/lunbosan.png ..."文字轮播" ) < / script >
  • 晚饭前,被测试吐槽说,banner轮播手动左右滑的时候会卡顿。我一看不科学啊,大水果手机怎么会卡顿。我一看测试手中拿的是iPod,我觉得大概是这小玩意性能不强悍,后来又拿来5S,依然会卡顿,有趣的是,两个5S,一个...
  • 使用方法示例: < div class ="swiper-container" > < div class ="swiper-wrapper" > < div class ="swiper-slide" > slider1 ...转载于:https://www.cnblogs.com/peter-web/p/9145747.html
  • 前言相信大家应该都知道,移动端的轮播图是我们比较常见的需求, 我们最快的实现方式往往是 使用第三方的代码, 例如 swiper , 但当遇到一些比较复杂的轮播图需求时, 往往是束手无策,不知道怎么改.所以我们要尝试去...
  • web轮播

    2020-10-06 21:29:56
    由于我是第一次学习web,如果还有其他的更好的办法,还希望大家告知 <!DOCTYPE html> <html> <head> <title>轮播图</title> <style type="text/css"> .box{//对盒子进行...
  • web实现轮播

    千次阅读 2017-02-26 13:05:56
    //轮播图 function banner(box,bannerStyle){ var liWidth,buttonBox,indicator,leftButton,buttonHieght,rightButton,methodId,liNumber,boxWidth = box.width(),index = 0; //此处为重点 var cloneObject = ...
  • 主要介绍了使用jQuery制作基础的Web图片轮播效果的实例,鼠标悬停时可停止而离开时可自动轮播,文中还介绍了一种使用zslider插件来实现的方法,比较犀利,需要的朋友可以参考下
  • web实现动态轮播

    2018-07-01 17:08:27
    利用HTML代码,实现web3D轮播图。包括js的使用,脚本的使用。
  • web网页轮播图/js控制轮播

    千次阅读 2018-07-27 08:57:42
    以下是完整网页轮播图完整代码,喜欢的码农可以赋值进行调试使用: <!DOCTYPE html> < html >   < head >   < meta charset = "UTF-8" >   < title > title >   < style ...
  • web轮播

    2020-05-09 19:15:11
    文章目录 原生JS编写 jQuery编写 移动web轮播图(可触屏拖动) 原生JS编写 function getStyle(obj,name){ if(window.getComputedStyle){ return getComputedStyle(obj,null)[name]; }else{ return obj....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,218
精华内容 6,487
关键字:

web轮播