js 自适应手机电脑 轮播图
自己写了一个javascript的可循环轮播图,支持手机滑动,不过代码着实小白,全局变量,函数调用满天飞,研究别的代码规范好的轮播图插件,表示看得懂但是写不出。。

HTML:
<div id="main" >
<!--轮播图片或背景-->
<div class="bigbox">
<ul id="listCont">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
</div>
</div>
<!--页数按钮-->
<div id="pageBtn">
<a class="active">one</a>
<a >two</a>
<a >three</a>
<a >four</a>
<a >five</a>
</div>
<!--前后按钮-->
<div id="pnBtn">
<a class="prev" > < <span></span></a>
<a class="next" > > <span></span></a>
</div>
JS:
document.addEventListener('touchmove', function(event) {
event.preventDefault();
}, false);
//touchstart事件
function touchstartFunc(evt) {
try {
//evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等
var touch = evt.touches[0]; //获取第一个触点
var x = Number(touch.pageX); //页面触点X坐标
var y = Number(touch.pageY); //页面触点Y坐标
//记录触点初始位置
startX = x;
startY = y;
} catch (e) {
alert('touchstartFunc:' + e.message);
}
}
//touchmove事件,这个事件无法获取坐标
function touchMoveFunc(evt) {
//touchstartFunc(evt);
try {
//evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等
var touch = evt.touches[0]; //获取第一个触点
var x = Number(touch.pageX); //页面触点X坐标
var y = Number(touch.pageY); //页面触点Y坐标
//document.getElementById("main").innerHTML = "原:"+startY+" "+"现:"+y;
//判断滑动方向
if (x - startX > 50) {
swipeRight();
//alert("向右划");
} else if(x - startX < -50){
swipeLeft();
}
} catch (e) {
alert('touchMoveFunc:' + e.message);
}
}
//touchend事件
function touchEndFunc(evt) {
try {
//evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等
} catch (e) {
alert('touchEndFunc:' + e.message);
}
}
document.getElementById("main").addEventListener('touchstart', touchstartFunc, false);
document.getElementById("main").addEventListener('touchmove', touchMoveFunc, false);
document.getElementById("main").addEventListener('touchend', touchEndFunc, false);
//页数按钮
var pageBtn = document.getElementById("pageBtn");
var pageList = document.getElementById("pageBtn").getElementsByTagName("a");
//前后按钮
var pnBtn = document.getElementById("pnBtn");
var pnList = document.getElementById("pnBtn").getElementsByTagName("a");
var prev = getByClass("prev","a",pnBtn);
var next = getByClass("next","a",pnBtn);
//轮播内容
var main = document.getElementById("main");//main content
var list = document.getElementById("main").getElementsByTagName('li');
var listCont = document.getElementById("listCont");//轮播列表
del_ff(listCont);
var count = list.length;
var listWidth = main.offsetWidth;
listCont.style.marginLeft = -listWidth + "px";
//将first子元素复制到列表尾,last复制到列表头
var f = listCont.firstChild.cloneNode(true);
var l = listCont.lastChild.cloneNode(true);
listCont.appendChild(f);
listCont.insertBefore(l,listCont.firstChild);
// main.addClass("trans");
main.className = "trans";
var time = setInterval("turn(-2)",5000);
//getElementsByClass
function getByClass(classname, tagname, parent){
var result=[],
_array=parent.getElementsByTagName(tagname);
for(var i=0,j=_array.length;i<j;i++){
if((new RegExp("(?:^|\\s+)"+classname+"(?:\\s+|$)")).test(_array[i].className)){
result.push(_array[i]);
}
}
return result;
}
//解决FF和chrome下把换行也当作子元素的bug
function del_ff(elem){
var elem_child = elem.childNodes;
for(var i=0; i<elem_child.length;i++){
if(elem_child[i].nodeName == "#text" && !/\s/.test(elem_child.nodeValue)) {
elem.removeChild(elem_child[i]);
}
}
}
//自适应宽度
for(var i=0;i<list.length;i++){
list[i].index = i;
list[i].style.width = listWidth+'px';
}
//turn
var timer = null;
function turn(dir){
var flag = Math.abs(parseInt(listCont.style.marginLeft))/main.offsetWidth;
if(dir == -1){ //前一张
if(flag == 0){//flag = 0,在第一张并且要到前一张
var tim = null;
flag = list.length-3;
listCont.className = "";
tim = setTimeout(function(){
listCont.style.marginLeft = -(flag+1)*listWidth + "px";
},0)
}else if(flag>0){
flag--;
}
}else if(dir == -2){ //后一张
if (flag < list.length-1 ) {
flag++;
}else{
var tim = null;
flag = 2;
listCont.className = "";
tim = setTimeout(function(){
listCont.style.marginLeft = -listWidth + "px";
},0)
}
}else{
flag = dir;
}
clearTimeout(timer);
timer = setTimeout(function(){
listCont.className = "trans";
listCont.style.marginLeft = -flag*listWidth + "px";
},100)
//按钮激活
for(var i=0 ;i<pageList.length;i++){
var index = flag;
pageList[i].className=" ";
if(index == 0) index = 5;
else if(index == 6) index = 1;
pageList[index-1].className="active";
}
}//turn end
//点击按钮翻页
for(var i=0 ;i<pageList.length;i++){
pageList[i].index = i+1;
pageList[i].onclick = function(){
clearInterval(time);
turn(this.index);
time = setInterval("turn(-2)",5000);
}
}
//前后按钮翻页
prev[0].onclick = function(){
swipeRight();
}
next[0].onclick = function(){
swipeLeft();
}
//右划 == 前一张
function swipeRight(){
clearInterval(time);
var dir = -1;
turn(dir);
time = setInterval("turn(-2)",5000);
}
//左划 == 下一张
function swipeLeft(){
clearInterval(time);
var dir = -2;
turn(dir);
time = setInterval("turn(-2)",5000);
}
js 自适应手机电脑 轮播图的更多相关文章
- 原生JS面向对象思想封装轮播图组件
原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...
- 基于js的自适应、多样式轮播图插件(兼容IE8+、FF、chrome等主流浏览器)
插件github地址:https://github.com/pomelott/slider-plug_in 使用方式: slider plug-in 左右滑动的自适应.多样式全能插件.多次调用时只需传 ...
- 原生js实现响应式轮播图,支持电脑端点击切图,手机端滑动切图
轮播图的实现原理并不难,但是步骤有些繁琐.最近练习了一个轮播图,大部分是跟着网上的教程写的,然后自己做了一点兼容ie8的修改,加了点击切换图片的特效和手机端的滑动特效,让这个轮播图可以在响应式的网站中 ...
- js原生代码实现轮播图案例
一.轮播图是现在网站网页上最常见的效果之一,对于轮播图的功能,要求不同,效果也不同! 我们见过很多通过不同的方式,实现这一效果,但是有很多比较麻烦,而且不容易理解,兼容性也不好. 在这里分享一下,用j ...
- 用html +js+css 实现页面轮播图效果
html 页面 <html lang="en"> <head> <meta charset="UTF-8"> <met ...
- js访3d上下轮播图
js/css访3d上下轮播图 (附件) <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...
- 用js和jQuery做轮播图
Javascript或jQuery做轮播图 css样式 <style> a{ text-decoration:none; } .naver{ width: 100%; position:r ...
- JS框架_(Bootstrap.js)实现简单的轮播图
Bootstrap框架中 轮播(Carousel)插件是一种灵活的响应式的向站点添加滑块的方式 轮播图效果: <!DOCTYPE html> <html> <head&g ...
- 原生js写一个无缝轮播图插件(支持vue)
轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端.因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使 ...
随机推荐
- PADS Layout VX.2.3 灌铜之后只显示灌铜外框,没有显示整块铜皮
操作系统:Windows 10 x64 工具1:PADS Layout VX.2.3 使用Copper Pour功能,画了一个灌铜区,并分配了网络. Tools > Pour Manager,打 ...
- matlab find函数使用语法
find 找到非零元素的索引和值 语法: 1. ind = find(X) 2. ind = find(X, k) 3. ind = find(X, k, 'first') 4. ind = find ...
- Redash 二开 - 后端环境搭建
Redash 二开 - 后端环境搭建 一.操作系统选择 官方文档有一句话:Windows users: while it should be possible to run Redash on a W ...
- LiteOS-任务篇-源码分析-系统启动函数
目录 前言 链接 参考 开启调度 LOS_Start 函数源码 osTickStart 函数源码 LOS_StartToRun 函数源码 前言 20201009 移植好内核后,开始实战内核. 源码分析 ...
- javascript之判断数组的几种方法
今天和小伙伴一起出去吃饭,有个小伙伴突然问我,你是前端是吧,问一下现在前端判断数组都有哪些方法,哈哈不知道是不是考我,当时没有说全,吃过饭后看了下自己以前的小笔记这里总结一下目前知道的所有对于数组的判 ...
- JWT安全性第1部分,创建令牌
下载Demo Core 2.0 - 13.2 MB 下载Demo Core 1.2 - 14 MB 介绍 JWT (JSON Web Token)作为保护Web站点和REST服务的标准越来越流行.我将 ...
- JVM性能调优(4) —— 性能调优工具
前序文章: JVM性能调优(1) -- JVM内存模型和类加载运行机制 JVM性能调优(2) -- 垃圾回收器和回收策略 JVM性能调优(3) -- 内存分配和垃圾回收调优 一.JDK工具 先来看看有 ...
- 本地环境Django配置问题
Django本地环境出现的问题 当你的前端出现这个问题的时候 你只需要吧setting.py 中的DEBUG 改为 True,即可 我原来是是DEBUG = False 本人亲测有用!!!
- 【全网免费VIP观看】哔哩哔哩番剧解锁大会员-集合了优酷-爱奇艺-腾讯-芒果-乐视-ab站等全网vip视频免费破解去广告-高清普清电视观看-持续更新
哔哩哔哩番剧解锁大会员-集合了优酷-爱奇艺-腾讯-芒果-乐视-ab站等全网vip视频免费破解去广告-高清普清电视观看-持续更新 前言 突然想看电视,结果 没有VIP 又不想花钱,这免费的不久来啦. 示 ...
- 新手学习C语言/C++编程你所必须要了解的知识!从计算机原理开始!
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...