关于作业的一些问题
来源:3-2 项目作业
soso_crazy
2019-06-29 17:06:38
屏幕适配问题,我没有按照视频中的屏幕适配,改为如下的屏幕适配,不知道是否有问题?
;(function () {
'use strict';
var docEl=document.documentElement,
viewPortEl=document.querySelector('meta[name="viewport"'),
dpr=window.devicePixelRatio||1,
maxWidth=1204,
minWidth=320;
dpr=dpr>=3?3:(dpr>=2?2:1);
docEl.setAttribute('data-dpr',dpr);
docEl.setAttribute('max-width', maxWidth);
docEl.setAttribute('min-width', minWidth);
var scale=1/dpr,
content='width=device-width,initial-scale='+scale+',maximum-scale='+scale+',minimum-scale='+scale+',user-scalable=no';
if (viewPortEl) {
viewPortEl.setAttribute('content',content);
} else {
viewPortEl=document.createElement('meta');
viewPortEl.setAttribute('name','viewport');
viewPortEl.setAttribute('content',content);
document.head.appendChild(viewPortEl);
}
setUnitRem();
window.addEventListener('resize',setUnitRem);
window.addEventListener('pageshow',function (e) {
if (e.persisted) {
setUnitRem();
}
});
function setUnitRem() {
//以手机375px做标准,px2rem设置root font-size为37.5。所以ratio=375/37.5
var ratio=10,
viewWidth=docEl.getBoundingClientRect().width||window.innerWidth;
console.log(viewWidth);
//如果不设置最大最小宽度,viewWidth=viewWidth*dpr
if (maxWidth&&(viewWidth/dpr>maxWidth)) {
viewWidth=maxWidth*dpr;
}else if (minWidth && (viewWidth / dpr < minWidth)) {
viewWidth = minWidth * dpr;
}
docEl.style.fontSize=viewWidth/ratio +'px';
}
})();
2.关于左右侧数据联动的思路是什么?
3.为什么在shopBar.js中,点击购物车加减号联动左右侧是$('.left-item.active').click();?
4.为什么在right.js中addClick()中,$item=$(e.currentTarget).parents('.menu-item').first();为什么要加上first()?不是通过e.currentTarget获取到的.plus对应的menu-item只有一个,为什么还要加上first()?
function addClick() {
$('.menu-item').on('click','.plus',function (e) { //e.curretnTarget是.plus
//找到被点击.plus元素的父元素中子元素的.count元素
var $count=$(e.currentTarget).parent().find('.count');
$count.text(parseInt($count.text()||0)+1);
$item=$(e.currentTarget).parents('.menu-item').first();
//将右侧点击加号对应的menu-item,获取其在getMenuList中绑定的数据
var itemData=$item.data('itemData');
//当点击加号改写对应menu-item中绑定的数据中的chooseCount
itemData.chooseCount=itemData.chooseCount+1;
//联动购物车渲染内容函数
window.ShopBar.renderItems();
});
$('.menu-item').on('click','.reduce',function (e) {
var $count=$(e.currentTarget).parent().find('.count');
if ($count.text()==0) return;
$count.text(parseInt($count.text()||0)-1);
var $item=$(e.currentTarget).parents('.menu-item').first();
//获取右侧menu-item在渲染时绑定的数据(查看getMenuList)
var itemData=$item.data('itemData');
//点击减号,改变数据中的chooseCount
itemData.chooseCount=itemData.chooseCount-1;
//选择右侧菜品联动购物车菜品内容
window.ShopBar.renderItems();
});
}
1回答
好帮手慕慕子
2019-06-29
同学你好,
你的这种适配方案在前面的移动端课程中,老师也讲过, 是可以实现适配效果的
左右侧数据联动的思路就是
1)渲染左侧选项卡的时候,将每个选项卡对应的数据,通过data方法存储在对应的元素上

2)在点击对应的选项卡,获取选项卡上存储的数据, 传递给右侧列表渲染数据

$('.left-item.active').click()的主要作用是为了触发左侧选项的点击事件,因为左侧选项卡点击事件中调用了右侧渲染列表的refresh方法,所以可以重新渲染右侧列表
1)从第二条可以知道, 右侧列表渲染的数据是从左侧传入进来的, 在购物车中点击加减号的时候,需要更新右侧列表的数据,所以每点击一次需要调用右侧的refresh这个函数重新渲染列表,实现联动效果。
2)这里只是为了触发左侧的点击事件,调用refresh方法, 所以也可以直接写成$('.left-item').click();触发点击事件。
3)老师这里写成$('.left-item.active')只触发选中选项卡的点击事件达到更新数据的目的。 提高程序的运行效率
同学你好, 这里可以直接使用$(e.currentTarget).parents('.menu-item')表示获取到得对应的menu-item, 老师这里写只是为了代码的严谨性可以可扩展性(后续可能会增加其他元素, 此时代码也不会报错)
如果帮助到了你, 欢迎采纳!
祝学习愉快~~~~
相似问题