shopify结账时无法选择运费
问题原因
结账时除了美国的地址,其他国家的地址,填写完地址后无法设置运费
报错信息
1 | Shipping not available |
解决方法
转到您的 Shopify 帐户
点击设置(左下角)
点击市场,添加你能销往的国家
点击发货和配送
点击一般运费/新建发货预设
选择配送区域,选择所有你能发货的国家
选择你能发货的产品(只选择了国家,不选择产品,也是无法选择运费的)
确保您的产品在您选择的仓库中有库存。由于您可能有多个仓库,您在发货页面设置的仓库可能没有库存
可以在编辑产品中,修改仓库地址
小结:先检查一下有没有在市场中添加该国家,再到发货和配送下检查下,有没有给该国家配置运费,接着检查该国家下有没有添加该产品,最后检查下产品设置的仓库有没有库存。
JS 函数的执行时机
1、解释为什么如下代码会打印 6 个 6
1 | let i = 0 |
SetTimeout在for循环之后才执行,那时候i为6,然后再打印出6次6
2、写出让上面代码打印 0、1、2、3、4、5 的方法
1 | for(let i = 0; i<6; i++){ |
3 、(可选内容)除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5,如果你能找到并写在博客里,可以得到五星好评 :)
方法一:
1 | let i = 0 |
方法二:
1 | let i = 0 |
方法三:
1 | let i = new Array(6).fill('') |
方法四:
1 | let i = 0 |
jQuery 的功能
1、jQuery 如何获取元素
1.1 选择表达式可以是CSS选择器:
1 | $(document) //选择整个文档对象 |
1.2 jQuery特有的表达式:
1 | $('a:first') //选择网页中第一个a元素 |
2、jQuery 的链式操作是怎样的
1 | $('div').find('h3').eq(2).html('Hello'); |
分解开来,就是下面这样:
1 | $('div') //找到div元素 |
jQuery还提供了.end()方法,使得结果集可以后退一步:
1 | $('div') |
3、jQuery 如何创建元素
1 | $('<p>Hello</p>'); |
4、jQuery 如何移动元素
假定我们选中了一个div元素,需要把它移动到p元素后面。
第一种方法是使用.insertAfter(),把div元素移动p元素后面:
1 | $('div').insertAfter($('p')); |
第二种方法是使用.after(),把p元素加到div元素前面:
1 | $('p').after($('div')); |
5、jQuery 取值和赋值
1 | $('h1').html(); //html()没有参数,表示取出h1的值 |
常见的取值和赋值函数如下:
1 | .html() 取出或设置html内容 |
DOM 事件模型或 DOM 事件机制
1、事件捕获
捕获型事件(event capturing):事件从最不精确的对象(document 对象)开始触发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)
2、事件冒泡
冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。
3、捕获和冒泡顺序
w3c规定了,任何发生在w3c事件模型中的事件,首是进入捕获阶段,直到达到目标元素,再进入冒泡阶段。绑定在被点击元素的事件是按照代码的顺序发生的。
冒泡,它就像鱼儿吐泡泡一样,从下到上。
从祖先元素开始慢慢找,最后找到我们的点击目标,这个行为不就像警察叔叔抓坏人一样,逐渐的缩小抓捕范围,最后确定到某一个人身上,所以这个叫做捕获。
事件委托
事件委托还有一个名字叫事件代理,JS高程上讲:事件委托就是利用事件冒泡,只制定一个时间处理程序,就可以管理某一类型的所有事件。我用取快递来解释这个现象: 有三个同事预计会在周一收到快递。为签收快递,有两种办法:一是三个人在公司门口等快递;二是委托给前台代为签收。现实当中,我们大都采用委托的方案。前台收到快递后,她会判断收件人是谁,然后按照收件人的要求签收,甚至代为付款。这种方案还有一个优势,那就是即使公司里来了新员工(不管多少),前台也会在收到寄给新员工的快递后核实并代为签收。
浅析MVC
1、MVC 三个对象分别做什么,给出伪代码示例
M:model(模型) 负责操作数据与服务器的交互,将请求到的数据传给control
V:View (视图) 负责所有UI界面,比如el,templete,render
C:controller(控制器)负责其他,比如初始化和事件,负责监听和处理View事件,并更新和调用 Model,负责监听Model数据变化,并更新View
1 | /** 模擬 Model, View, Controller */ |
2、EventBus 有哪些 API,是做什么用的,给出伪代码示例
1 | _self.getEventBus |
3、表驱动编程是做什么的(可以自己查查资料)
Table-Driven Approach
解决if else面对多种情况的情形,以表的形式进行获取数据,通过下标索引来查
1 | methods{ |
4、我是如何理解模块化的
模块化就是把一个模块的代码放在一个文件夹里,再进行引入,简化了代码之间的影响
1 | let string=`内容` |
七种方式实现垂直居中
如果 .parent 的 height 不写,你只需要 padding: 10px 0; 就能将 .child 垂直居中;
如果 .parent 的 height 写死了,就很难把 .child 居中,以下是垂直居中的方法。
忠告:能不写 height 就千万别写 height。
1、table自带功能
代码
1 | // html |
1 | .parent{ |
效果图
2、100% 高度的 after before 加上 inline block
代码
1 | // html |
1 | .parent{ |
效果图
优化版
1 | // html |
1 | .parent{ |
3、div 装成 table
代码
1 | // html |
1 | // css |
效果图
4、margin-top -50%
代码
1 | // html |
1 | // css |
效果图
5、translate -50%
代码
1 | // html |
1 | // css |
效果图
6、absolute margin auto
代码
1 | // html |
1 | // css |
效果图
7、flex
代码
1 | <!DOCTYPE html> |
1 | // css |
效果图
如何清除浮动?
未清除浮动的影响
- 父级元素因为子级浮动引起的内部高度为0
- 父级元素的兄弟元素高度为0,其他样式也不能实现
代码
1 | <body> |
1 | .child1,.child2,.friend{ |
方法1:给父元素加上 .clearfix
代码
1 | <body> |
1 | .child1,.child2,.friend{ |
效果图
方法2:给父元素加上 overflow:hidden
代码
1 | <body> |
1 | .child1,.child2,.friend{ |
效果图
Canvas 和 SVG 的区别是什么?
- Canvas 主要是用笔刷来绘制 2D 图形的。
- SVG 主要是用标签来绘制不规则矢量图的。
- 相同点:都是主要用来画 2D 图形的。
- 不同点:Canvas 画的是位图,SVG 画的是矢量图。
- 不同点:SVG 节点过多时渲染慢,Canvas 性能更好一点,但写起来更复杂。
- 不同点:SVG 支持分层和事件,Canvas 不支持,但是可以用库实现。