JavaScript實(shí)現(xiàn)櫥窗展示效果
本文實(shí)例為大家分享了JavaScript實(shí)現(xiàn)櫥窗展示效果的具體代碼,供大家參考,具體內(nèi)容如下
1.先搭架子
* {
margin: 0;
padding: 0;
}
.box {
width: 800px;
height: 190px;
border: 1px solid #000;
margin: 100px auto;
}
ul {
list-style: none;
display: flex;
}
ul img {
vertical-align: top;
}
.progress {
width: 100%;
height: 30px;
background: #ccc;
}
.progress>.line {
width: 100px;
height: 100%;
background: orange;
border-radius: 15px;
}
<div class="box">
<ul>
<li>
<img src="images/img1.jpg" alt="">
</li>
<li>
<img src="images/img2.jpg" alt="">
</li>
<li>
<img src="images/img3.jpg" alt="">
</li>
<li>
<img src="images/img4.jpg" alt="">
</li>
<li>
<img src="images/img5.jpg" alt="">
</li>
<li>
<img src="images/img6.jpg" alt="">
</li>
<li>
<img src="images/img7.jpg" alt="">
</li>
<li>
<img src="images/img8.jpg" alt="">
</li>
<li>
<img src="images/img9.jpg" alt="">
</li>
<li>
<img src="images/img10.jpg" alt="">
</li>
</ul>
<div class="progress">
<div class="line"></div>
</div>
</div>
2.邏輯部分
拿到需要操作的元素
計(jì)算ul的寬度
設(shè)置ul的寬度
計(jì)算滾動條的寬度
設(shè)置滾動條的寬度
監(jiān)聽鼠標(biāo)按下的事件
- 拿到滾動條當(dāng)前的位置
- 拿到鼠標(biāo)在滾動條中按下的位置
監(jiān)聽鼠標(biāo)移動事件
- 拿到鼠標(biāo)在滾動條中移動之后的位置
- 計(jì)算偏移位
- 安全校驗(yàn)
- 重新設(shè)置滾動條的位置
- 計(jì)算圖片的滾動距離
- 重新設(shè)置圖片的位置
.box {
overflow: hidden;
}
ul {
position: relative;
}
.progress {
position: relative;
}
.progress>.line {
position: absolute;
left: 0;
top: 0;
}
//1.拿到需要操作的元素
const oUl = document.querySelector("ul");
const oItems = oUl.querySelectorAll("li");
const oProgress = document.querySelector(".progress");
const oLine = document.querySelector(".line");
const oBox = document.querySelector(".box");
//2.計(jì)算ul的寬度
const ulWidth = oItems[0].offsetWidth * oItems.length;
//3.設(shè)置ul的寬度
oUl.style.width = ulWidth + 'px';
//4.計(jì)算滾動條的寬度
// 滾動條的寬度/滾動條滾動范圍 = 容器的寬度/內(nèi)容的范圍
const progressWidth = oProgress.offsetWidth;
const boxWidth = oBox.offsetWidth;
const lineWidth = boxWidth / ulWidth * progressWidth;
//5.設(shè)置滾動條的寬度
oLine.style.width = lineWidth + 'px';
// 計(jì)算滾動條最大能夠滾動的范圍
const maxLineX = progressWidth - lineWidth;
// 計(jì)算圖片最大能夠滾動的范圍
const maxImgX = boxWidth - ulWidth;
//6.監(jiān)聽鼠標(biāo)按下的事件
oLine.onmousedown = function(e) {
e = e || window.e;
//a.拿到滾動條當(dāng)前的位置
let begin = parseFloat(oLine.style.left) || 0;
//b.拿到鼠標(biāo)在滾動條中按下的位置
let mouseX = e.pageX - oBox.offsetLeft;
//7.監(jiān)聽鼠標(biāo)移動事件
oLine.onmousemove = function(e) {
e = e || window.e;
//c.拿到鼠標(biāo)在滾動條中移動之后的位置
let moveMouseX = e.pageX - oBox.offsetLeft;
//d.計(jì)算偏移位
let offsetX = moveMouseX - mouseX + begin;
//e.安全校驗(yàn)
offsetX = offsetX < 0 ? 0 : offsetX;
offsetX = offsetX > maxLineX ? maxLineX : offsetX;
//f.重新設(shè)置滾動條的位置
oLine.style.left = offsetX + 'px';
//g.計(jì)算圖片的滾動距離
// 滾動條滾動的距離 / 滾動條最大能夠滾動的范圍 = 圖片滾動的距離 / 圖片最大能夠滾動的范圍
// 滾動條滾動的距離 / 滾動條最大能夠滾動的范圍 * 圖片最大能夠滾動的范圍 = 圖片滾動的距離
const imgOffsetX = offsetX / maxLineX * maxImgX;
// h.重新設(shè)置圖片的位置
oUl.style.left = imgOffsetX + "px";
};
};
document.onmouseup = function() {
oLine.onmousemove = null;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript關(guān)于prototype實(shí)例詳解(超重點(diǎn))
prototype是js里面給類增加功能擴(kuò)展的一種模式,這篇文章主要介紹了JavaScript關(guān)于prototype(超重點(diǎn)),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08
layuimini框架實(shí)現(xiàn)點(diǎn)擊菜單欄回到起始頁的解決方案
這篇文章主要介紹了layuimini框架實(shí)現(xiàn)點(diǎn)擊菜單欄回到起始頁的解決方案,本文通過圖文示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06
webpack自動引入打包資源HtmlWebpackPlugin的實(shí)現(xiàn)
本文主要介紹了webpack自動引入打包資源HtmlWebpackPlugin的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
javascript addLoadEvent函數(shù)說明
網(wǎng)頁加載完整后會觸發(fā)一個(gè)onload事件,默認(rèn)地一個(gè)事件只能和一個(gè)函數(shù)綁定。2010-01-01
JavaScript獲取服務(wù)器時(shí)間的方法詳解
這篇文章主要介紹了JavaScript獲取服務(wù)器時(shí)間的方法,結(jié)合實(shí)例形式詳細(xì)分析了javascript基于ajax獲取服務(wù)器時(shí)間的相關(guān)操作技巧,需要的朋友可以參考下2016-12-12

