使用Javascript设置元素的宽度会产生意外的结果

使用Javascript设置元素的宽度会产生意外的结果,javascript,html,css,Javascript,Html,Css,我正在尝试为一个学校项目制作一个javascript图像旋转木马。我在制作的早期阶段,但是我已经遇到了问题 代码如下: 类转盘{ 构造器(选择器=“.carousel”){ 常数=5; 常量autoscroll='关闭'; const width=“100%”; const height=“200px”; this.selector=document.querySelector(选择器); this.number=(this.selector.dataset.viewNumber==未定义)?

我正在尝试为一个学校项目制作一个javascript图像旋转木马。我在制作的早期阶段,但是我已经遇到了问题

代码如下:

类转盘{
构造器(选择器=“.carousel”){
常数=5;
常量autoscroll='关闭';
const width=“100%”;
const height=“200px”;
this.selector=document.querySelector(选择器);
this.number=(this.selector.dataset.viewNumber==未定义)?编号:this.selector.dataset.viewNumber;
this.autoScroll=(this.selector.dataset.autoScroll==未定义)?autoScroll:this.selector.dataset.autoScroll;
this.width=(this.selector.dataset.width==未定义)?width:this.selector.dataset.width;
this.height=(this.selector.dataset.height==未定义)?height:this.selector.dataset.height;
}
makeCarousel(){
设srcList=[];
让str=“←

”; 让src; 对于(让我考虑一下这个.selector.children){ src=i.getAttribute(“src”); srcList.push(src); str=`${str}`; } str=`${str}→

`; this.selector.innerHTML=str; const styler=this.selector.style; styler.width=this.width; styler.height=this.height; styler.display=“flex”; const rotate=this.selector.childNodes[1]; rotate.style.display=“flex”; rotate.style.height=“100%”; rotate.style.width=“100%”; rotate.style.overflow=“滚动”; for(让我考虑这个.selector.childNodes[1].childNodes){ 设height=this.selector.getBoundingClientRect().height+“px”; 让宽度=(this.selector.getBoundingClientRect().width/this.number)+“px”; i、 setAttribute('style','height:${height};width:${width}`); i、 子节点[0]。style.maxWidth=“100%”; i、 子节点[0]。style.maxWidth=“100%”; } } } const转盘=新转盘(“转盘”); carousel.makeCarousel(); console.log(“getBoundingClientRect的宽度:“+document.querySelector”(.carousel img holder”).getBoundingClientRect().Width) console.log(“css样式的宽度:“+document.querySelector”(.carousel img holder”).style.Width)

您没有考虑下一个和上一个div的宽度。您还应该从转盘的宽度中减去该值

基本上,逻辑应该是

widthOfImg = (Totalwidth - Width of previous div - Width of next div )/this.number
同时添加以下样式

body {
    margin :0;
}
也改变了这一行

rotate.style.width = "calc(100% - 32px)";
另外,不要将最大宽度应用于图像,而是将相同宽度应用于要添加到
carousel img holder
div上的图像

i.childNodes[0].style.width= width ;
请参阅下面的更新代码

类转盘{
构造器(选择器=“#转盘”){
常数=5;
常量autoscroll='关闭';
const width=“100%”;
const height=“200px”;
this.selector=document.querySelector(选择器);
this.number=(this.selector.dataset.viewNumber==未定义)?编号:this.selector.dataset.viewNumber;
this.autoScroll=(this.selector.dataset.autoScroll==未定义)?autoScroll:this.selector.dataset.autoScroll;
this.width=(this.selector.dataset.width==未定义)?width:this.selector.dataset.width;
this.height=(this.selector.dataset.height==未定义)?height:this.selector.dataset.height;
}
makeCarousel(){
设srcList=[];
让str=“←

”; 让src; 对于(让我考虑一下这个.selector.children){ src=i.getAttribute(“src”); srcList.push(src); str=`${str}`; } str=`${str}→

`; this.selector.innerHTML=str; const styler=this.selector.style; styler.width=this.width; styler.height=this.height; styler.display=“flex”; const rotate=this.selector.childNodes[1]; rotate.style.display=“flex”; rotate.style.height=“100%”; rotate.style.width=“计算(100%-32px)”; for(让我考虑这个.selector.childNodes[1].childNodes){ 设height=this.selector.getBoundingClientRect().height+“px”; 让宽度=((this.selector.getBoundingClientRect().width-document.getElementsByClassName('next')[0]。getBoundingClientRect().width-document.getElementsByClassName('previous')[0]。getBoundingClientRect().width)/this.number)+“px”; i、 setAttribute('style','height:${height};width:${width}`); i、 子节点[0]。样式。宽度=宽度; i、 子节点[0]。样式。宽度=宽度; } } } const转盘=新转盘(“转盘”); carousel.makeCarousel()
您没有考虑下一个和上一个div的宽度。您还应该从转盘的宽度中减去该值

基本上,逻辑应该是

widthOfImg = (Totalwidth - Width of previous div - Width of next div )/this.number
同时添加以下样式

body {
    margin :0;
}
也改变了这一行

rotate.style.width = "calc(100% - 32px)";
另外,不要将最大宽度应用于图像,而是将相同宽度应用于要添加到
carousel img holder
div上的图像

i.childNodes[0].style.width= width ;
请参阅下面的更新代码

类转盘{
构造器(选择器=“#转盘”){
常数=5;
常量autoscroll='关闭';
const width=“100%”;
const height=“200px”;
this.selector=document.querySelector(选择器);
this.number=(this.selector.dataset.viewNumber==未定义)?编号:this.selector.dataset.viewNumber;
this.autoScroll=(this.selector.dataset.autoScroll==未定义)?autoScroll:this.selector.dataset.autoScroll;
this.width=(this.selector.dataset.width==未定义)?width:this.selector.dataset.width;
this.height=(this.selector.dataset.height==未定义)?height:this.selector.dataset.height;
}
makeCarousel(){
设srcList=[];
让str=“←

”; 让src; 对于(让我考虑一下这个.selector.children){ src=i.getAttribute(“src”); srcList.push(src); str=`${str}`; } str=`${str}→

`; this.selector.innerHTML=str; const styler=this.selector.style; styler.width=this.width; styler.height=this.height; styler.display=“flex”; const rotate=this.selector.childNodes[1]; rotate.style.display=“flex”;