draggable="false",通过设置draggable,是可以设置html不允许拖拽效果,通过拖拽可以初步实现pc端横向滚动行为。 draggable的兼容性是最好HTML属性 css样式-webkit-user-drag: none;也可以实现类似效果,兼容性不太好,移动效果大部份都有效 user-select:属性可以设置是否允许用户选择页面中的图文内容 mousedown和mouseup:通过设置鼠标事件,实现鼠标按下后,坐标位置不一样,让容器调用scrollTo就可以实现滚动效果。 wheel:通过滚动事件,在容器内滚动滚轴可以横向滚动 getBoundingClientRect,记录每个图标的x位置,通过前后位置是否变化,如果不变化,鼠标单击的时候就可以触发单击事件。因为mousedown事件发生也会触发click事件由于容器隐藏横向滚动条后,移动端横向滚动效果不受影响,但是pc端是无法通过鼠标进行横向滚动,因此需要自己手动实现效果。
class Scroller {
init() {
this.setDragWheelEvent(".gameShow");
this.setDragScrollEvent(".gameShow");
this.initClick();
}
throttle(fn, wait) {
let inThrottle, lastFn, lastTime;
return function () {
const context = this, args = arguments;
if (!inThrottle) {
fn.apply(context, args);
lastTime = Date.now();
inThrottle = true;
} else {
clearTimeout(lastFn);
lastFn = setTimeout(function () {
if (Date.now() - lastTime >= wait) {
fn.apply(context, args);
lastTime = Date.now();
}
}, Math.max(wait - (Date.now() - lastTime), 0));
}
};
}
setDragWheelEvent(selector) {
const gameShowEle = document.querySelector(selector);
gameShowEle.addEventListener("wheel", (event) => {
event.preventDefault();
gameShowEle.scrollLeft += event.deltaY;
});
}
setDragScrollEvent(selector) {
const gameShowEle = document.querySelector(selector);
let left = 0;
let oldLeft = 0;
const move = this.throttle((event) => {
let x = left + (oldLeft - event.clientX)
if (x < 0) x = 0;
gameShowEle.scrollTo(x, 0)
}, 100)
gameShowEle.addEventListener('mousedown', function (event) {
gameShowEle.style.cursor = 'grabbing';
gameShowEle.style.userSelect = 'none';
oldLeft = event.clientX;
left = gameShowEle.scrollLeft;
document.addEventListener('mousemove', move)
});
document.addEventListener('mouseup', function () {
gameShowEle.style.cursor = 'pointer';
gameShowEle.style.removeProperty('user-select');
document.removeEventListener('mousemove', move)
})
}
isMobile() {
return window.navigator.userAgent.match(
/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|Symbian|Windows Phone)/i
);
}
initClick() {
const imgSpaceEles = document.querySelectorAll(".imgSpace");
if (imgSpaceEles) {
const xAarry = [];
Array.from(imgSpaceEles).forEach((imgSpaceEle, index) => {
const href = imgSpaceEle.getAttribute("url");
let { x } = imgSpaceEle.getBoundingClientRect();
xAarry.push(x);
imgSpaceEle.addEventListener("click", () => {
let { x: newx } = imgSpaceEle.getBoundingClientRect();
if (xAarry[index] == newx || this.isMobile()) {
alert(href)
}
xAarry.forEach((m, i) => {
const ele = imgSpaceEles[i];
const site = ele.getBoundingClientRect();
xAarry[i] = site.x
})
})
})
}
}
}
window.onload = () => {
const scroller = new Scroller()
scroller.init();
}
<style>
.gameMenu {
overflow: hidden;
margin: 0 auto;
height: 100%;
}
.gameMenu>div {
display: flex;
flex-direction: column;
justify-content: center;
align-content: center;
box-sizing: border-box;
margin: auto;
padding: 10px 10px 0 10px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
width: 320px;
height: 100%;
background: #fff;
}
.games {
border-radius: 10px;
width: 100%;
height: 90px;
box-shadow: rgb(0 0 0 / 16%) 0 0 10px 0;
}
.navigationStyle {
display: flex;
overflow: hidden;
position: relative;
justify-content: center;
align-items: center;
padding: 0 1px;
width: 100%;
height: 100%;
}
.gameShow {
display: flex;
overflow-x: scroll;
align-items: center;
width: inherit;
height: 90px;
cursor: pointer;
}
.gameShow::-webkit-scrollbar {
display: none;
}
.imgSpace {
margin: 5px;
width: 60px;
height: 60px;
}
</style>
<div class="gameMenu" style="width: 320px">
<div>
<div class="games">
<div id="navigationStyle" class="navigationStyle">
<div class="gameShow" draggable="false" style="cursor: pointer;">
<div class="imgSpace" url="/game/crazy-ball/play" title="crazy-ball">
<div style="position: relative">
<div
style="width: 60px; height: 60px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.16) 0px 9px 5px 0px; background-image: url("https://res.minigame.vip/gc-assets/crazy-ball/crazy-ball_icon.webp"); background-position: center center; background-repeat: no-repeat; background-size: contain;">
</div>
</div>
</div>
<div class="imgSpace" url="/game/mutant-dino/play" title="mutant-dino">
<div style="position: relative">
<div
style="width: 60px; height: 60px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.16) 0px 9px 5px 0px; background-image: url("https://res.minigame.vip/gc-assets/mutant-dino/mutant-dino_icon.webp"); background-position: center center; background-repeat: no-repeat; background-size: contain;">
</div>
</div>
</div>
<div class="imgSpace" url="/game/plants-beatzombies/play" title="plants-beatzombies">
<div style="position: relative">
<div
style="width: 60px; height: 60px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.16) 0px 9px 5px 0px; background-image: url("https://res.minigame.vip/gc-assets/plants-beatzombies/plants-beatzombies_icon.webp"); background-position: center center; background-repeat: no-repeat; background-size: contain;">
</div>
</div>
</div>
<div class="imgSpace" url="/game/queen-hulahoop/play" title="queen-hulahoop">
<div style="position: relative">
<div
style="width: 60px; height: 60px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.16) 0px 9px 5px 0px; background-image: url("https://res.minigame.vip/gc-assets/queen-hulahoop/queen-hulahoop_icon.webp"); background-position: center center; background-repeat: no-repeat; background-size: contain;">
</div>
</div>
</div>
<div class="imgSpace" url="/game/popstone2/play" title="popstone2">
<div style="position: relative">
<div
style="width: 60px; height: 60px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.16) 0px 9px 5px 0px; background-image: url("https://res.minigame.vip/gc-assets/popstone2/popstone2_icon.webp"); background-position: center center; background-repeat: no-repeat; background-size: contain;">
</div>
</div>
</div>
<div class="imgSpace" url="/game/ninja-sword/play" title="ninja-sword">
<div style="position: relative"></div>
<div
style="width: 60px; height: 60px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.16) 0px 9px 5px 0px; background-image: url("https://res.minigame.vip/gc-assets/ninja-sword/ninja-sword_icon.webp"); background-position: center center; background-repeat: no-repeat; background-size: contain;">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
最终实现的效果,如下图:
到此这篇关于css3手动实现pc端横向滚动的文章就介绍到这了,更多相关css3 pc端横向滚动内容请搜索仿站网www.ecmsw.cn以前的文章或继续浏览下面的相关文章,希望大家以后多多支持仿站网www.ecmsw.cn!
企业仿站制作的周期一般是3-5天,主要取决于被仿网站的确定,甚至功能的新增,确定以后一般3-4天网站就可以仿制完成。仿站基本流程第一步:客户提供...
说实话,您要的不只是网站,要的是 能带来客户的网络平台。☉ 不知道怎么利用网站赚钱?☉ 有了网站,不过网站实在看不下去?☉ 网站没有功能,时常出...
今天仿站小编介绍站内站外需要注意的事项才能提高百度权重相关内容的介绍,感兴趣的朋友们可以跟着小编去下文了解一下哦看一个网站的受欢迎程...
现在随着移动端流量的暴增,很多用户意识到移动端的推广是现在网络推广的主力,那么想要在移动蓝海市场获得自己的一块领地,首先需要一个手机...
仿站网认为通常情况下,有以下两种方式的服务器可供选择。(1)虚拟主机方式。所谓虚拟主机是指使用特殊的软硬件技术,把计算机分成若干台"虚拟"...
仿站是什么意思?其实仿站最简单的理解就是你发一个网站给我,然后我仿制出来一个一模一样的,记住了是可以百分百一样的,一般的用户是仿界面,然后修...