3 changed files with 426 additions and 13233 deletions
@ -0,0 +1,381 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html lang="cn"> |
||||||
|
|
||||||
|
<head> |
||||||
|
<meta charset="UTF-8"> |
||||||
|
<meta name="screen-orientation" content="portrait"/> |
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0"> |
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes"> |
||||||
|
<meta name="format-detection" content="telephone=no"> |
||||||
|
<meta name="full-screen" content="yes"> |
||||||
|
<meta name="x5-fullscreen" content="true"> |
||||||
|
<title>Document</title> |
||||||
|
<!-- <script src="https://lib.baomitu.com/jquery/3.4.1/jquery.min.js"></script>--> |
||||||
|
<script src="https://lib.baomitu.com/zepto/1.2.0/zepto.js"></script> |
||||||
|
<!-- <script src="event.js"></script>--> |
||||||
|
<script src="http://www.ttentau.top/touch.js"></script> |
||||||
|
<script src="http://www.ttentau.top/fx.js"></script> |
||||||
|
|
||||||
|
<style> |
||||||
|
html, body { |
||||||
|
height: 100%; |
||||||
|
width: 100%; |
||||||
|
margin: 0; |
||||||
|
padding: 0; |
||||||
|
background: #2e3244; |
||||||
|
} |
||||||
|
|
||||||
|
.container { |
||||||
|
width: 100%; |
||||||
|
height: 100%; |
||||||
|
overflow: hidden; |
||||||
|
/*overflow: auto;*/ |
||||||
|
} |
||||||
|
|
||||||
|
.wrapper { |
||||||
|
position: relative; |
||||||
|
/*left: -100%;*/ |
||||||
|
/*top: -350px;*/ |
||||||
|
display: flex; |
||||||
|
width: 100%; |
||||||
|
height: 100%; |
||||||
|
/*height: 812px;*/ |
||||||
|
/*overflow-y:hidden ;*/ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
.swiper-item { |
||||||
|
/*flex-shrink: 0;*/ |
||||||
|
position: absolute; |
||||||
|
width: 100%; |
||||||
|
height: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
.left-container { |
||||||
|
top: 0; |
||||||
|
left: 0; |
||||||
|
overflow: hidden; |
||||||
|
} |
||||||
|
|
||||||
|
.content-list { |
||||||
|
position: absolute; |
||||||
|
/*top: -100%;*/ |
||||||
|
height: 100%; |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
.content-item { |
||||||
|
width: 100%; |
||||||
|
height: 100%; |
||||||
|
position: relative; |
||||||
|
} |
||||||
|
|
||||||
|
.item-tool { |
||||||
|
height: 300px; |
||||||
|
width: 50px; |
||||||
|
background: #ccc; |
||||||
|
position: absolute; |
||||||
|
bottom: 100px; |
||||||
|
right: 30px; |
||||||
|
} |
||||||
|
|
||||||
|
.footer { |
||||||
|
position: absolute; |
||||||
|
bottom: 0; |
||||||
|
width: 100%; |
||||||
|
height: 30px; |
||||||
|
background: #666; |
||||||
|
} |
||||||
|
|
||||||
|
.right-container { |
||||||
|
top: 0; |
||||||
|
left: 100%; |
||||||
|
overflow: auto; |
||||||
|
} |
||||||
|
|
||||||
|
.user-videos { |
||||||
|
height: 12000px; |
||||||
|
} |
||||||
|
|
||||||
|
.console { |
||||||
|
display: none; |
||||||
|
position: absolute; |
||||||
|
top: 0; |
||||||
|
right: 0; |
||||||
|
height: 500px; |
||||||
|
overflow: auto; |
||||||
|
} |
||||||
|
|
||||||
|
p { |
||||||
|
margin: 0; |
||||||
|
} |
||||||
|
</style> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body> |
||||||
|
<div class="container"> |
||||||
|
<div class="wrapper"> |
||||||
|
<div class="left-container swiper-item"> |
||||||
|
<div class="content-list"> |
||||||
|
<div class="content-item">11111 |
||||||
|
<div class="item-tool"></div> |
||||||
|
</div> |
||||||
|
<div class="content-item">22222 |
||||||
|
<div class="item-tool"></div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="footer"></div> |
||||||
|
</div> |
||||||
|
<div class="right-container swiper-item "> |
||||||
|
<div class="user-bg">user-bg</div> |
||||||
|
<div class="user-videos">user-videos |
||||||
|
<p>user-videos</p> |
||||||
|
<p>user-videos</p> |
||||||
|
<p>user-videos</p> |
||||||
|
<p>user-videos</p> |
||||||
|
<p>user-videos</p> |
||||||
|
<p>user-videos</p> |
||||||
|
<p>user-videos</p> |
||||||
|
<p>user-videos</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="console"> |
||||||
|
|
||||||
|
</div> |
||||||
|
</body> |
||||||
|
<script> |
||||||
|
// let |
||||||
|
let consoleEl = $('.console') |
||||||
|
let swiperItem = $('.swiper-item') |
||||||
|
let contentItem = $('.content-item') |
||||||
|
let wrapper = $('.wrapper') |
||||||
|
let contentList = $('.content-list') |
||||||
|
|
||||||
|
let height = $('body').height() |
||||||
|
let width = $('body').width() |
||||||
|
|
||||||
|
let startLocationY = 0 |
||||||
|
let startLocationX = 0 |
||||||
|
|
||||||
|
let lastLocationY = 0 |
||||||
|
let lastLocationX = 0 |
||||||
|
|
||||||
|
let moveXDistance = 0 |
||||||
|
let moveYDistance = 0 |
||||||
|
|
||||||
|
let judgeValue = 30 |
||||||
|
|
||||||
|
let startTime |
||||||
|
let currentIndex |
||||||
|
let currentSwiperItemIndex |
||||||
|
let isDrawDown |
||||||
|
let isDrawRight |
||||||
|
|
||||||
|
let isCanDownWiping = false |
||||||
|
let isCanRightWiping = false |
||||||
|
let isNeedCheck = true |
||||||
|
// let isCanDownWiping = true |
||||||
|
// let isCanRightWiping = true |
||||||
|
// let isNeedCheck = false |
||||||
|
|
||||||
|
|
||||||
|
function checkDirection() { |
||||||
|
consoleEl.append('<p>' + 'isNeedCheck:' + isNeedCheck + '</p>') |
||||||
|
|
||||||
|
|
||||||
|
if (!isNeedCheck) { |
||||||
|
// console.log('不需要检测了') |
||||||
|
return |
||||||
|
} |
||||||
|
consoleEl.append('<p>' + 'moveXDistance:' + moveXDistance + '</p>') |
||||||
|
consoleEl.append('<p>' + 'moveYDistance:' + moveYDistance + '</p>') |
||||||
|
|
||||||
|
if (Math.abs(moveXDistance) > judgeValue || Math.abs(moveYDistance) > judgeValue) { |
||||||
|
//X 除以 Y |
||||||
|
let angle = (Math.abs(moveXDistance) * 10) / (Math.abs(moveYDistance) * 10) |
||||||
|
if (angle > 0.7 && angle < 1.3) { |
||||||
|
isNeedCheck = false |
||||||
|
return |
||||||
|
} |
||||||
|
consoleEl.append('<p>' + 'angle:' + angle + '</p>') |
||||||
|
|
||||||
|
// console.log('x------------', moveXDistance) |
||||||
|
// console.log('y------------', moveYDistance) |
||||||
|
// console.log('角度------------', angle) |
||||||
|
|
||||||
|
if (angle < 0.6) { |
||||||
|
//上下划 |
||||||
|
isCanDownWiping = true |
||||||
|
isCanRightWiping = false |
||||||
|
isNeedCheck = false |
||||||
|
return |
||||||
|
} |
||||||
|
if (angle > 5) { |
||||||
|
//左右划 |
||||||
|
isCanDownWiping = false |
||||||
|
isCanRightWiping = true |
||||||
|
isNeedCheck = false |
||||||
|
return |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function resetConfig() { |
||||||
|
isCanDownWiping = false |
||||||
|
isCanRightWiping = false |
||||||
|
isNeedCheck = true |
||||||
|
moveXDistance = 0 |
||||||
|
moveYDistance = 0 |
||||||
|
// isCanDownWiping = true |
||||||
|
// isCanRightWiping = true |
||||||
|
// isNeedCheck = false |
||||||
|
} |
||||||
|
|
||||||
|
swiperItem |
||||||
|
.on('touchstart', function (e) { |
||||||
|
consoleEl.empty() |
||||||
|
consoleEl.append('<p>swiperItem touchstart</p>') |
||||||
|
currentSwiperItemIndex = $(this).index() |
||||||
|
startLocationX = e.touches[0].pageX |
||||||
|
startTime = Date.now() |
||||||
|
}) |
||||||
|
.on('touchmove', function (e) { |
||||||
|
consoleEl.append('<p>' + 'si move isCanRightWiping:' + isCanRightWiping + '</p>') |
||||||
|
|
||||||
|
lastLocationX = e.touches[0].pageX |
||||||
|
moveXDistance = lastLocationX - startLocationX |
||||||
|
isDrawRight = moveXDistance < 0 |
||||||
|
|
||||||
|
// console.log(moveXDistance) |
||||||
|
checkDirection() |
||||||
|
if (isCanRightWiping) { |
||||||
|
if (isDrawRight) { |
||||||
|
wrapper.css({left: -(currentSwiperItemIndex + 0) * width + moveXDistance + judgeValue}) |
||||||
|
} else { |
||||||
|
wrapper.css({left: -(currentSwiperItemIndex + 0) * width + moveXDistance - judgeValue}) |
||||||
|
} |
||||||
|
} |
||||||
|
}) |
||||||
|
.on('touchend', function (e) { |
||||||
|
consoleEl.append('<p>swiperItem touchend</p>') |
||||||
|
|
||||||
|
if (!isCanRightWiping) { |
||||||
|
// resetConfig() |
||||||
|
isNeedCheck = true |
||||||
|
return |
||||||
|
} |
||||||
|
// console.log('contentList-touchend', e) |
||||||
|
let endTime = Date.now() |
||||||
|
let gapTime = endTime - startTime |
||||||
|
|
||||||
|
// 如果 |
||||||
|
if (Math.abs(moveXDistance) < 20) { |
||||||
|
gapTime = 1000 |
||||||
|
} |
||||||
|
if (Math.abs(moveXDistance) > (width / 3)) { |
||||||
|
gapTime = 100 |
||||||
|
} |
||||||
|
// console.log('是否向左划',isDrawRight) |
||||||
|
if (gapTime < 150) { |
||||||
|
// console.log('小于500', currentIndex) |
||||||
|
if (isDrawRight) { |
||||||
|
// console.log('往下划'); |
||||||
|
if (currentSwiperItemIndex === swiperItem.length - 1) { |
||||||
|
return wrapper.animate({left: -(swiperItem.length - 1) * width}, 200) |
||||||
|
} |
||||||
|
wrapper.animate({left: -(currentSwiperItemIndex + 1) * width}, 200) |
||||||
|
} else { |
||||||
|
// console.log('往上划'); |
||||||
|
if (currentSwiperItemIndex === 0) { |
||||||
|
return wrapper.animate({left: 0}, 200) |
||||||
|
} |
||||||
|
wrapper.animate({left: -(currentSwiperItemIndex - 1) * width}, 200) |
||||||
|
} |
||||||
|
} else { |
||||||
|
wrapper.animate({left: -(currentSwiperItemIndex) * width}, 200, 'linear') |
||||||
|
} |
||||||
|
|
||||||
|
resetConfig() |
||||||
|
}) |
||||||
|
contentList |
||||||
|
.on('touchstart', '.content-item', function (e) { |
||||||
|
consoleEl.empty() |
||||||
|
consoleEl.append('<p>contentItem touchstart</p>') |
||||||
|
currentIndex = $(this).index() |
||||||
|
startLocationY = e.touches[0].pageY |
||||||
|
startLocationX = e.touches[0].pageX |
||||||
|
startTime = Date.now() |
||||||
|
}) |
||||||
|
.on('touchmove', function (e) { |
||||||
|
consoleEl.append('<p>' + 'ci move isCanDownWiping:' + isCanDownWiping + '</p>') |
||||||
|
|
||||||
|
lastLocationY = e.touches[0].pageY |
||||||
|
|
||||||
|
moveYDistance = lastLocationY - startLocationY |
||||||
|
isDrawDown = moveYDistance < 0 |
||||||
|
|
||||||
|
checkDirection() |
||||||
|
if (isCanDownWiping) { |
||||||
|
if (isDrawDown) { |
||||||
|
contentList.css({top: -(currentIndex + 0) * height + moveYDistance + judgeValue}) |
||||||
|
} else { |
||||||
|
contentList.css({top: -(currentIndex + 0) * height + moveYDistance - judgeValue}) |
||||||
|
} |
||||||
|
} |
||||||
|
}) |
||||||
|
.on('touchend', function (e) { |
||||||
|
consoleEl.append('<p>contentItem touchend</p>') |
||||||
|
|
||||||
|
if (!isCanDownWiping) { |
||||||
|
isNeedCheck = true |
||||||
|
return |
||||||
|
} |
||||||
|
// console.log('contentList-touchend', e) |
||||||
|
let endTime = Date.now() |
||||||
|
moveYDistance = lastLocationY - startLocationY |
||||||
|
let gapTime = endTime - startTime |
||||||
|
|
||||||
|
// 如果 |
||||||
|
if (Math.abs(moveYDistance) < 20) { |
||||||
|
gapTime = 1000 |
||||||
|
} |
||||||
|
if (Math.abs(moveYDistance) > (width / 3)) { |
||||||
|
gapTime = 100 |
||||||
|
} |
||||||
|
|
||||||
|
if (gapTime < 150) { |
||||||
|
// console.log('小于500', currentIndex) |
||||||
|
if (isDrawDown) { |
||||||
|
console.log('往下划') |
||||||
|
if ($('.content-item').length < currentIndex + 3) { |
||||||
|
loadNewVideo() |
||||||
|
} |
||||||
|
// if (currentIndex === contentItem.length - 1) { |
||||||
|
// return contentList.animate({top: -(contentItem.length - 1) * height}, 200) |
||||||
|
// } |
||||||
|
contentList.animate({top: -(currentIndex + 1) * height}, 200) |
||||||
|
} else { |
||||||
|
console.log('往上划') |
||||||
|
if (currentIndex === 0) { |
||||||
|
return contentList.animate({top: 0}, 200) |
||||||
|
} |
||||||
|
contentList.animate({top: -(currentIndex - 1) * height}, 200) |
||||||
|
} |
||||||
|
} else { |
||||||
|
contentList.animate({top: -(currentIndex) * height}, 200, 'linear') |
||||||
|
} |
||||||
|
resetConfig() |
||||||
|
}) |
||||||
|
|
||||||
|
function loadNewVideo() { |
||||||
|
console.log('加载新的视频到末尾') |
||||||
|
let html = ` <div class="content-item">${currentIndex} |
||||||
|
<div class="item-tool"></div> |
||||||
|
</div>` |
||||||
|
contentList.append(html) |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
</html> |
Loading…
Reference in new issue