JavaScript實現(xiàn)櫥窗展示效果
更新時間:2021年11月08日 15:55:31 作者:小白小白從不日白
這篇文章主要介紹了JavaScript實現(xiàn)櫥窗展示效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了JavaScript實現(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.邏輯部分
拿到需要操作的元素
計算ul的寬度
設(shè)置ul的寬度
計算滾動條的寬度
設(shè)置滾動條的寬度
監(jiān)聽鼠標按下的事件
- 拿到滾動條當前的位置
- 拿到鼠標在滾動條中按下的位置
監(jiān)聽鼠標移動事件
- 拿到鼠標在滾動條中移動之后的位置
- 計算偏移位
- 安全校驗
- 重新設(shè)置滾動條的位置
- 計算圖片的滾動距離
- 重新設(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.計算ul的寬度
const ulWidth = oItems[0].offsetWidth * oItems.length;
//3.設(shè)置ul的寬度
oUl.style.width = ulWidth + 'px';
//4.計算滾動條的寬度
// 滾動條的寬度/滾動條滾動范圍 = 容器的寬度/內(nèi)容的范圍
const progressWidth = oProgress.offsetWidth;
const boxWidth = oBox.offsetWidth;
const lineWidth = boxWidth / ulWidth * progressWidth;
//5.設(shè)置滾動條的寬度
oLine.style.width = lineWidth + 'px';
// 計算滾動條最大能夠滾動的范圍
const maxLineX = progressWidth - lineWidth;
// 計算圖片最大能夠滾動的范圍
const maxImgX = boxWidth - ulWidth;
//6.監(jiān)聽鼠標按下的事件
oLine.onmousedown = function(e) {
e = e || window.e;
//a.拿到滾動條當前的位置
let begin = parseFloat(oLine.style.left) || 0;
//b.拿到鼠標在滾動條中按下的位置
let mouseX = e.pageX - oBox.offsetLeft;
//7.監(jiān)聽鼠標移動事件
oLine.onmousemove = function(e) {
e = e || window.e;
//c.拿到鼠標在滾動條中移動之后的位置
let moveMouseX = e.pageX - oBox.offsetLeft;
//d.計算偏移位
let offsetX = moveMouseX - mouseX + begin;
//e.安全校驗
offsetX = offsetX < 0 ? 0 : offsetX;
offsetX = offsetX > maxLineX ? maxLineX : offsetX;
//f.重新設(shè)置滾動條的位置
oLine.style.left = offsetX + 'px';
//g.計算圖片的滾動距離
// 滾動條滾動的距離 / 滾動條最大能夠滾動的范圍 = 圖片滾動的距離 / 圖片最大能夠滾動的范圍
// 滾動條滾動的距離 / 滾動條最大能夠滾動的范圍 * 圖片最大能夠滾動的范圍 = 圖片滾動的距離
const imgOffsetX = offsetX / maxLineX * maxImgX;
// h.重新設(shè)置圖片的位置
oUl.style.left = imgOffsetX + "px";
};
};
document.onmouseup = function() {
oLine.onmousemove = null;
}

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

