原生js实现移动开发轮播图、相册滑动特效

实现移动开发轮播图、相册滑动特效的核心技术是原生JS实现手势识别和滑动控制。在实现前,需要明确以下几点:

  1. 滑动容器的尺寸及内部元素的数量
  2. 滑动方向和速度控制
  3. 原生JS实现手势识别技术

接下来,我将结合示例展开讲解:

示例一:移动轮播图

实现移动轮播图需要使用JS异步实现图片的加载和手势滑动的监听。以下是详细步骤:

第一步:布局

使用HTML布局画面容器及包含着图片的DIV,图片数量根据需求自行添加。建议设置图片的高度、宽度、水平居中等属性,以便于控制样式。

<div id="banner">
  <div id="imgs" style="width: 600px; height: 200px; margin: 0 auto; position: relative;">
    <img alt="图片1" src="img/1.jpg" />
    <img alt="图片2" src="img/2.jpg" />
    <img alt="图片3" src="img/3.jpg" />
  </div>
</div>

第二步:JS异步加载图片

使用异步加载方法,将用于轮播的图片先预加载,以便于在滑动时不需要等待图片加载完毕。

var imgs = new Array();
var imgUrls = ["img/1.jpg", "img/2.jpg", "img/3.jpg"];

function preloadImages() {
  for (i = 0; i < imgUrls.length; i++) {
    imgs[i] = new Image();
    imgs[i].src = imgUrls[i];
    imgs[i].onload = function() {
      console.log(i);
    };
  }
}

第三步:处理手势滑动

使用原生JS处理滑动事件,需要对滑动容器添加 touchstart、touchmove、touchend三大事件监听器,并对其中的坐标位置信息进行处理,计算出滑动方向和速度。

$(function() {
  var startX, endX, startY, endY;
  var threshold = 50;    //手势敏感度
  var el_imgs = document.getElementById("imgs");
  var len = imgUrls.length;
  var index = 0;         //当前显示图片的下标

  el_imgs.addEventListener("touchstart", function(e) {
    startX = e.touches[0].pageX;
    startY = e.touches[0].pageY;
  }, false);

  el_imgs.addEventListener("touchend", function(e) {
    endX = e.changedTouches[0].pageX;
    endY = e.changedTouches[0].pageY;
    var swipeLength = Math.abs(endX-startX);      //水平位移量
    var swipeHLength = Math.abs(endY-startY);     //垂直位移量

    if (swipeLength > threshold && swipeHLength < threshold) {  //判断是否水平滑动、是否超过阈值
      if (endX > startX && index > 0) {
        index--;
        slide(index*600);
      }
      if (endX < startX && index < len-1) {
        index++;
        slide(index*600);
      }
    }
  }, false);

  function slide(duration) {    //滑动函数
    var imgs = document.getElementById("imgs");
    $(imgs).animate({"left": -duration + "px"}, 400);
  }

  preloadImages();  //异步预加载图片

});

第四步:添加样式

使用CSS对图片显示的样式进行简单排版,然后对图片容器进行绝对定位。

#imgs img {
  float:left;
  width:600px;
  height:200px;
}

#imgs {
  position:absolute;
  left: 0px;
  top: 0px;
}

示例二:相册滑动特效

实现相册滑动特效需要使用JS异步实现图片的加载和手势滑动的监听,同时使用CSS对显隐以及动画效果进行控制。以下是详细步骤:

第一步:布局

使用HTML布局画面容器及包含着图片列表的DIV,图片数量根据需求自行添加。建议设置图片宽度,以便于控制样式。

<div id="photos">
  <ul id="photo-list">
    <li><img src="images/1.jpg"></li>
    <li><img src="images/2.jpg"></li>
    <li><img src="images/3.jpg"></li>
    <li><img src="images/4.jpg"></li>
    <li><img src="images/5.jpg"></li>
    <li><img src="images/6.jpg"></li>
    <li><img src="images/7.jpg"></li>
    <li><img src="images/8.jpg"></li>
    <li><img src="images/9.jpg"></li>
  </ul>
</div>

第二步:JS异步加载图片

使用异步加载方法,将用于滑动的图片先预加载,以便于在滑动时不需要等待图片加载完毕。

var imgs = new Array();
var imgUrls = ["images/1.jpg", "images/2.jpg", "images/3.jpg", "images/4.jpg", "images/5.jpg", "images/6.jpg", "images/7.jpg", "images/8.jpg", "images/9.jpg"];

function preloadImages() {
  for (i = 0; i < imgUrls.length; i++) {
    imgs[i] = new Image();
    imgs[i].src = imgUrls[i];
    imgs[i].onload = function() {
      console.log(i);
    };
  }
}

第三步:处理手势滑动

使用原生JS处理滑动事件,需要对滑动容器添加 touchstart、touchmove、touchend三大事件监听器,并对其中的坐标位置信息进行处理,计算出滑动方向和速度。滑动过程中需要动态设置图片列表的left值。

$(function() {
  var startX, endX, dist, tmp, el_photos, li_photos, len_li, i, j, l;

  function init() {
    el_photos = document.getElementById("photos");
    li_photos = el_photos.getElementsByTagName('li');
    len_li = li_photos.length;
    l = 0;  //初始位置下标为0;
    el_photos.addEventListener('touchstart', function(e) {
      startX = e.touches[0].pageX;
      startY = e.touches[0].pageY;
      el_photos.style.transition = 'all 0s';
      dist = 0;    //滑动距离为0
    }, false);
    el_photos.addEventListener('touchmove', function(e) {
      e.preventDefault();
      endX = e.touches[0].pageX;
      dist = endX-startX;     //滑动距离
      el_photos.style.left = (-l*2*10 + dist/2) + 'vw';    //滑动距离为dist的1/10
    }, false);
    el_photos.addEventListener('touchend', function(e) {
      if (dist < -20) {  // 向左滑
        l++;
        tmp = setTimeout(function() {
          el_photos.style.transition = 'all 0.3s';
          el_photos.style.left = (-l*20) + 'vw';    //设置动态过渡效果         
        }, 100);
      } else if (dist > 20) {  // 向右滑
        l--;
        tmp = setTimeout(function() {
          el_photos.style.transition = 'all 0.3s';
          el_photos.style.left = (-l*20) + 'vw';
        }, 100);
      } else {
        el_photos.style.left = (-l*20) + 'vw';
      }
    }, false);
  }

  preloadImages();
  init();
});

第四步:添加样式

使用CSS对图片显示的样式进行简单排版,然后对图片容器进行绝对定位。

#photos {
  width: 100vw;
  overflow: hidden;
  position: relative;
}

#photo-list {
  width: calc(200% - (2 * 2vw));
  left: 0;
  position: absolute;
  margin: 0;
  padding: 0;
  list-style: none;
  white-space: nowrap;
  font-size: 0;
  z-index: -1;
}

#photo-list li {
  display: inline-block;
  width: 20vw;
  min-height: calc((100vw - 4vw) / 3);
  margin-right: 2vw;
  margin-left: 2vw;
  transition: all 0.3s;
}

#photo-list li:last-child {
  margin-right: 0;
}

至此,我们就完成了基于原生JS的移动开发轮播图、相册滑动特效。在实现过程中,需要理解手势的概念以及JS异步处理的方法。通过练习这种类型的小案例,可以帮助我们更好地掌握WenApp的特性和实现机制,从而更好地进行移动开发。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生js实现移动开发轮播图、相册滑动特效 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • jQuery插件-jRating评分插件源码分析及使用方法

    jQuery插件-jRating评分插件源码分析及使用方法 jRating评分插件介绍 jRating评分插件是一款jQuery评分插件,它可以让用户对一个对象进行打分,非常实用。相比大部分jQuery评分插件,jRating评分插件更加轻便,易于使用和定制。它使用CSS和DOM处理来改变HTML元素的外观和表现。 jRating评分插件的特点 简单易用。 …

    css 2023年6月9日
    00
  • 利用html+css实现菜单栏缓慢下拉效果的示例代码

    实现菜单栏缓慢下拉效果需要用到HTML和CSS,具体步骤如下: 首先,在HTML中创建一个菜单栏的结构,使用ul和li标签来创建菜单栏的列表项。例如: <nav> <ul> <li><a href="#">Home</a></li> <li><a h…

    css 2023年6月9日
    00
  • CSS3圆角和渐变2种常用功能详解

    CSS3圆角和渐变2种常用功能详解 CSS3圆角 CSS3中新增加了一个非常实用的功能——圆角(border-radius)。这个功能使得开发人员可以轻松地实现圆角效果的按钮和图片等效果。以下是如何使用CSS3圆角的方法: 语法 border-radius: 10px; 上面的例子是给元素的四个角设置了半径为10像素的圆角。如果想要给其中某个角设置圆角,可以…

    css 2023年6月9日
    00
  • 标记语言——打印样式

    标记语言是一种用于描述文档结构和内容的编程语言,常用于网页设计和排版。其中,打印样式即指对文档进行打印时所需要的样式设定。 在Markdown中,打印样式可以通过CSS(Cascading Style Sheets,层叠样式表)来统一设置文档中的格式。以下是两条示例说明: 在Markdown中使用CSS CSS可以通过在Markdown文件中插入<st…

    css 2023年6月9日
    00
  • CSS图片响应式 垂直水平居中

    CSS图片响应式垂直水平居中是前端开发中常见的需求之一,下面将详细讲解实现的完整攻略。 1. 使用CSS的transform属性实现 使用CSS的Transform属性,可以轻松实现图片的水平垂直居中。具体步骤如下: 设置父容器为相对定位,子容器为绝对定位; 子容器的top和left属性设置为50%; 使用Transform属性的translate(-50%…

    css 2023年6月11日
    00
  • 全方位了解CSS3的Regions扩展

    全方位了解CSS3的Regions扩展 什么是CSS3的Regions扩展 CSS3的Regions扩展是指一种可以自动将文本和图片等内容适应不同尺寸、不同分区的CSS样式功能。通过进行分区标记,可以使文本、图像从一个’flow’源跨越多个框从而达到更好的排版效果。 如何使用CSS3的Regions扩展 使用CSS3的Regions扩展需要以下步骤: 通过C…

    css 2023年6月9日
    00
  • php正则去除网页中所有的html,js,css,注释的实现方法

    实现方法: 一般情况下,可以使用正则表达式进行匹配和替换。 具体步骤如下: 使用PHP的file_get_contents()函数获取网页的完整内容,存储到一个变量中。 使用正则表达式匹配所有要去除的内容,并使用PHP的preg_replace()函数进行替换。 输出替换后的内容。 示例1: <?php $url = ‘http://www.examp…

    css 2023年6月9日
    00
  • 以淘宝前端为例剖析HTML5与移动端页面的性能优化

    以淘宝前端为例剖析HTML5与移动端页面的性能优化 1. HTML5的语义化结构 在HTML5中,我们可以使用语义化标签来描述页面的结构。这些标签不仅可以使代码更加清晰易懂,还能提高搜索引擎的识别能力,从而提高网站的SEO排名。在淘宝前端中,大量使用了语义化标签,例如:header、nav、section、aside等。这些标签不仅有利于搜索引擎优化,还能提…

    css 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部