3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js html等比例放大后生成图片 html2canvas

發布時間:2024/3/13 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js html等比例放大后生成图片 html2canvas 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原html:

注:圖片帶有html://的域名地址不兼容

<html><head><title>預覽</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width,user-scalable=no"><script type="text/javascript" src="jquery.min.js"></script><script type="text/javascript" src="jquery-1.9.1.min.js"></script><script type="text/javascript" src="html2canvas.js"></script><style>*{margin: 0;padding: 0; -webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}body{font-family: "微軟雅黑";font-size: 14px;color: #000000;-webkit-overflow-scrolling: touch;}a{text-decoration: none;color: #000000;}.all{position: absolute;overflow: auto;width: 100%;height: 100%;}.all .card{width: 100%;margin-top: 2px; position: absolute; display:block; overflow-x:hidden; overflow-y:auto }/*height: 202px;*/.all .card .card_bj{width: 100%; border: 1px solid #D5B8A6; margin-top:5px; position: relative; margin-top: 20px; float: left; display: block; overflow: hidden;} .imgcard { position: absolute; background-color: white;top: 0px;left: -10000px;} </style></head><body><div class="all"><div class="card" style="height: 549px;"><div class="card_bj card_back" style="height: 495px; width: 297px; margin-left: 11.5px;"><div style="width: 100%;height: 100%; background: #DE5E3B; position: absolute; "><div style="width: 100%;height: 80%;position: absolute;left: 0;top: 10%;background: #0B090A;">?</div><div style="position: absolute;left: 33%;top: 30%;"><img style="width: 80px;" src="/logo/bd_logo1_31bdc765.png"></div><div style="position: absolute;color: white;width: 100%;text-align: center; font-size: 16px;top: 64%;">我的智能名片</div><div style="position: absolute;color: white;width: 100%;text-align: center; font-size: 12px;top: 73%;">公司名稱</div><div style="position: absolute;color: white;width: 100%;text-align: center; font-size: 6px;top: 77%; font-family: arial;">Chongqing new her network technology co . LTD</div></div></div><div style="width:100%; height:30px; margin-bottom: 50px; line-height:30px; text-align:center; float:left;" οnclick="htmlimg('.card .card_back', '.imgcard .card_back')">生成圖片</div></div></div><div><div class="imgcard"><div class="card_bj card_back" style="position: absolute; overflow: auto; background-color: white; width: 297px; height: 495px;"></div></div></div><script type="text/javascript" src="pcpreview.js"></script></body> </html>

pcpreview.js

$(function () {var card_bj_w = 313.2// Math.floor((parseInt($(".all .card .card_bj").width()) * 0.94 - 2) * 100) / 100var card_bj_h = 313.2 / 90 * 54$(".card .card_bj").css({"height": card_bj_h,"width": card_bj_w,"margin-left": (parseInt($(".all .card .card_bj").width()) - card_bj_w) / 2 + "px"})$(".all .card").css({"height": parseInt($(window).height()) + 27})$(".card_btn").hide()setTimeout(function () {$(".card_btn").show()}, 1500) })function gettransform(clschildren) {if ($(clschildren).css("transform") == 'none') {return 0;} else {var trans = $(clschildren).css("transform");var values = trans.split('(')[1].split(')')[0].split(',');var one = values[0];var two = values[1];var scale = Math.sqrt(one * one + two * two);var sin = two / scale;return Math.round(Math.atan2(two, one) * (180 / Math.PI));} }/type = 0 div type = 1 img 等比例放大// function div_install(obj, card_actual, card_w, card_h, type) {var card_percentw = parseFloat(card_actual) * parseFloat(card_w) / 100.00;var card_percenth = parseFloat(card_actual) * parseFloat(card_h) / 100.00;var transformmatrix = $(obj).css("transform")if (transformmatrix != undefined && transformmatrix != "none") {$(obj).css("transform", "rotate(0deg)");}if (type == 1) {var widthint = $(obj).width()var heightint = $(obj).height()var widthpint = $(obj).parent().width()var heightpint = $(obj).parent().height()if (widthint > 0) {$(obj).width(actualFloat(widthint, card_actual))}if (heightint > 0) {$(obj).height(actualFloat(heightint, card_actual))}if (widthpint > 0) {$(obj).parent().width(actualFloat(widthpint, card_actual));}if (heightpint > 0) {$(obj).parent().height(actualFloat(heightpint, card_actual));}} else {if ($(obj).children("img").length == 0) {if (type == 0 && $(obj).text().trim().length > 0) {$(obj).css("font-size", actualFloat($(obj).css("font-size"), card_actual));} else {var widthint = $(obj).width()var heightint = $(obj).height()$(obj).width(actualFloat(widthint, card_actual))$(obj).height(actualFloat(heightint, card_actual))}}}var csstop = $(obj).css("top")if (pcard_float(csstop) != 0) {if (csstop.indexOf('%') != -1) {$(obj).css("top", actualFloat(csstop, card_percenth));} else {$(obj).css("top", actualFloat(csstop, card_actual));}}var cssleft = $(obj).css("left")if (pcard_float(cssleft) != 0) {if (cssleft.indexOf('%') != -1) {$(obj).css("left", actualFloat(cssleft, card_percentw));} else {$(obj).css("left", actualFloat(cssleft, card_actual));}}var cssmarginleft = $(obj).css("margin-left")if (pcard_float(cssmarginleft) != 0) {if (cssmarginleft.indexOf('%') != -1) {$(obj).css("margin-left", actualFloat(cssmarginleft, card_percentw));} else {$(obj).css("margin-left", actualFloat(cssmarginleft, card_actual));}}var cssmargintop = $(obj).css("margin-top")if (pcard_float(cssmargintop) != 0) {if (cssmargintop.indexOf('%') != -1) {$(obj).css("margin-top", actualFloat(cssmargintop, card_percenth));} else {$(obj).css("margin-top", actualFloat(cssmargintop, card_actual));}}var csspaddingleft = $(obj).css("padding-left")if (pcard_float(csspaddingleft) != 0) {if (csspaddingleft.indexOf('%') != -1) {$(obj).css("padding-left", actualFloat(csspaddingleft, card_percentw));} else {$(obj).css("padding-left", actualFloat(csspaddingleft, card_actual));}}var csspaddingtop = $(obj).css("padding-top")if (pcard_float(csspaddingtop) != 0) {if (csspaddingtop.indexOf('%') != -1) {$(obj).css("padding-top", actualFloat(csspaddingtop, card_percenth));} else {$(obj).css("padding-top", actualFloat(csspaddingtop, card_actual));}}var cssborderwidth = $(obj).css("border-width")if (pcard_float(cssborderwidth) != 0) {if (cssborderwidth.indexOf('%') != -1) {$(obj).css("border-width", actualFloat(cssborderwidth, card_percenth));} else {$(obj).css("border-width", actualFloat(cssborderwidth, card_actual));}}if (transformmatrix != undefined && transformmatrix != "none") {$(obj).css("transform", transformmatrix);} }function pcard_float(obj) {obj = obj.toString().replace(/[^-0-9][^0-9]/ig, "");if (!isNaN(parseFloat(obj))) {if (obj.toString().split(".").length == 1) {return parseInt(obj)} else if (obj.toString().split(".")[1].length > 4) {return parseFloat(parseFloat(obj).toFixed(4))}return parseFloat(obj)} else {return 0} }function htmlimg1(html_div, img_div) {$(img_div).show()var card_w = 313.2 //長var card_h = 313.2 / 90 * 54 //寬var actual_w = 648$(img_div).css({ "width": card_w, "height": card_h })var card_actual = actual_w / card_w //和要生成長寬的實際比例card_actual = parseFloat(parseFloat(card_actual).toFixed(4))var pritstr = ""$(img_div).html($(html_div).html())var width = 0, height = 0;var transformmatrix = ""$(img_div + " div div").each(function () {div_install($(this), card_actual, card_w, card_h, 0);})$(img_div + " img").each(function () {div_install($(this), card_actual, card_w, card_h, 1);})div_install($($(img_div + " div").get(0)), card_actual, card_w, card_h, 0); }function htmlimg(html_div, img_div) {$(".imgcard .card_bj").hide()if ($(img_div).children("div").length == 0 && $(img_div).children("img").length > 0) {$(img_div).show()$(".imgcard").css({ "width": parseInt($("body", window.parent.document).width()), "height": parseInt($(window).height()), "left": "0px" })$($(".all").get(0)).css({ "display": "none" })} else if ($(img_div).children("div").length > 0) {$(img_div).show()var card_w = 313.2 //長var card_h = 313.2 / 90 * 54 //寬var actual_w = 648var actual_h = 389var card_actual = actual_w / card_w //和要生成長寬的實際比例card_actual = parseFloat(parseFloat(card_actual).toFixed(4))actual_w = card_w * card_actualactual_h = card_h * card_actualsetTimeout(function () {$(img_div).css({ "width": actual_w, "height": actual_h })$(".imgcard").css({ "width": actual_w, "height": actual_h+70 })html2canvas($($(img_div).children("div").get(0)), {allowTaint: true,taintTest: false,onrendered: function (canvas) {canvas.id = "mycanvas";//生成base64圖片數據 var dataUrl = canvas.toDataURL("image/jpg").replace("image/jpg", "image/octet-stream");var newImg = document.createElement("img");newImg.src = dataUrl;$(img_div).html(newImg);$(img_div + " img").css({ "width": parseFloat(parseInt($("body", window.parent.document).width()) * 0.8) - 2, "border": "1px solid red", "margin-left": "" + parseInt($("body", window.parent.document).width()) * 0.1 + "px" })$(".imgcard").css({ "overflow-x": "hidden", "overflow-y": "auto", "width": parseInt($("body", window.parent.document).width()), "height": parseInt($(window).height()) })$(img_div).css({ "width": $("body", window.parent.document).width(), "height": $(window).height() })}})$(".imgcard").css({ "left": "0px" })$($(".all").get(0)).css({ "display": "none" })}, 500)} }//數字等比例放大 function actualFloat(obj, card_actual) {if (obj == undefined) {return 0;} else {if (!isNaN(obj)) {return parseFloat((parseFloat(obj) * card_actual).toFixed(2))} else {return parseFloat((parseFloat(obj.replace(/[^-0-9][^0-9]/ig, "")) * card_actual).toFixed(2))}} }htmlimg1('.card .card_back', '.imgcard .card_back')


html2canvas.js

(function (window, document, undefined) {"use strict";var _html2canvas = {},previousElement,computedCSS,html2canvas;_html2canvas.Util = {};_html2canvas.Util.log = function (a) {if (_html2canvas.logging && window.console && window.console.log) {window.console.log(a);}};_html2canvas.Util.trimText = (function (isNative) {return function (input) {return isNative ? isNative.apply(input) : ((input || '') + '').replace(/^\s+|\s+$/g, '');};})(String.prototype.trim);_html2canvas.Util.asFloat = function (v) {return parseFloat(v);};(function () {// TODO: support all possible length valuesvar TEXT_SHADOW_PROPERTY = /((rgba|rgb)\([^\)]+\)(\s-?\d+px){0,})/g;var TEXT_SHADOW_VALUES = /(-?\d+px)|(#.+)|(rgb\(.+\))|(rgba\(.+\))/g;_html2canvas.Util.parseTextShadows = function (value) {if (!value || value === 'none') {return [];}// find multiple shadow declarationsvar shadows = value.match(TEXT_SHADOW_PROPERTY),results = [];for (var i = 0; shadows && (i < shadows.length) ; i++) {var s = shadows[i].match(TEXT_SHADOW_VALUES);results.push({color: s[0],offsetX: s[1] ? s[1].replace('px', '') : 0,offsetY: s[2] ? s[2].replace('px', '') : 0,blur: s[3] ? s[3].replace('px', '') : 0});}return results;};})();_html2canvas.Util.parseBackgroundImage = function (value) {var whitespace = ' \r\n\t',method, definition, prefix, prefix_i, block, results = [],c, mode = 0, numParen = 0, quote, args;var appendResult = function () {if (method) {if (definition.substr(0, 1) === '"') {definition = definition.substr(1, definition.length - 2);}if (definition) {args.push(definition);}if (method.substr(0, 1) === '-' &&(prefix_i = method.indexOf('-', 1) + 1) > 0) {prefix = method.substr(0, prefix_i);method = method.substr(prefix_i);}results.push({prefix: prefix,method: method.toLowerCase(),value: block,args: args});}args = []; //for some odd reason, setting .length = 0 didn't work in safarimethod =prefix =definition =block = '';};appendResult();for (var i = 0, ii = value.length; i < ii; i++) {c = value[i];if (mode === 0 && whitespace.indexOf(c) > -1) {continue;}switch (c) {case '"':if (!quote) {quote = c;}else if (quote === c) {quote = null;}break;case '(':if (quote) { break; }else if (mode === 0) {mode = 1;block += c;continue;} else {numParen++;}break;case ')':if (quote) { break; }else if (mode === 1) {if (numParen === 0) {mode = 0;block += c;appendResult();continue;} else {numParen--;}}break;case ',':if (quote) { break; }else if (mode === 0) {appendResult();continue;}else if (mode === 1) {if (numParen === 0 && !method.match(/^url$/i)) {args.push(definition);definition = '';block += c;continue;}}break;}block += c;if (mode === 0) { method += c; }else { definition += c; }}appendResult();return results;};_html2canvas.Util.Bounds = function (element) {var clientRect, bounds = {};if (element.getBoundingClientRect) {clientRect = element.getBoundingClientRect();// TODO add scroll position to bounds, so no scrolling of window necessarybounds.top = clientRect.top;bounds.bottom = clientRect.bottom || (clientRect.top + clientRect.height);bounds.left = clientRect.left;bounds.width = element.offsetWidth;bounds.height = element.offsetHeight;}return bounds;};// TODO ideally, we'd want everything to go through this function instead of Util.Bounds,// but would require further work to calculate the correct positions for elements with offsetParents_html2canvas.Util.OffsetBounds = function (element) {var parent = element.offsetParent ? _html2canvas.Util.OffsetBounds(element.offsetParent) : { top: 0, left: 0 };return {top: element.offsetTop + parent.top,bottom: element.offsetTop + element.offsetHeight + parent.top,left: element.offsetLeft + parent.left,width: element.offsetWidth,height: element.offsetHeight};};function toPX(element, attribute, value) {var rsLeft = element.runtimeStyle && element.runtimeStyle[attribute],left,style = element.style;// Check if we are not dealing with pixels, (Opera has issues with this)// Ported from jQuery css.js// From the awesome hack by Dean Edwards// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291// If we're not dealing with a regular pixel number// but a number that has a weird ending, we need to convert it to pixelsif (!/^-?[0-9]+\.?[0-9]*(?:px)?$/i.test(value) && /^-?\d/.test(value)) {// Remember the original valuesleft = style.left;// Put in the new values to get a computed value outif (rsLeft) {element.runtimeStyle.left = element.currentStyle.left;}style.left = attribute === "fontSize" ? "1em" : (value || 0);value = style.pixelLeft + "px";// Revert the changed valuesstyle.left = left;if (rsLeft) {element.runtimeStyle.left = rsLeft;}}if (!/^(thin|medium|thick)$/i.test(value)) {return Math.round(parseFloat(value)) + "px";}return value;}function asInt(val) {return parseInt(val, 10);}function parseBackgroundSizePosition(value, element, attribute, index) {value = (value || '').split(',');value = value[index || 0] || value[0] || 'auto';value = _html2canvas.Util.trimText(value).split(' ');if (attribute === 'backgroundSize' && (!value[0] || value[0].match(/cover|contain|auto/))) {//these values will be handled in the parent function} else {value[0] = (value[0].indexOf("%") === -1) ? toPX(element, attribute + "X", value[0]) : value[0];if (value[1] === undefined) {if (attribute === 'backgroundSize') {value[1] = 'auto';return value;} else {// IE 9 doesn't return double digit alwaysvalue[1] = value[0];}}value[1] = (value[1].indexOf("%") === -1) ? toPX(element, attribute + "Y", value[1]) : value[1];}return value;}_html2canvas.Util.getCSS = function (element, attribute, index) {if (previousElement !== element) {computedCSS = document.defaultView.getComputedStyle(element, null);}var value = computedCSS[attribute];if (/^background(Size|Position)$/.test(attribute)) {return parseBackgroundSizePosition(value, element, attribute, index);} else if (/border(Top|Bottom)(Left|Right)Radius/.test(attribute)) {var arr = value.split(" ");if (arr.length <= 1) {arr[1] = arr[0];}return arr.map(asInt);}return value;};_html2canvas.Util.resizeBounds = function (current_width, current_height, target_width, target_height, stretch_mode) {var target_ratio = target_width / target_height,current_ratio = current_width / current_height,output_width, output_height;if (!stretch_mode || stretch_mode === 'auto') {output_width = target_width;output_height = target_height;} else if (target_ratio < current_ratio ^ stretch_mode === 'contain') {output_height = target_height;output_width = target_height * current_ratio;} else {output_width = target_width;output_height = target_width / current_ratio;}return {width: output_width,height: output_height};};function backgroundBoundsFactory(prop, el, bounds, image, imageIndex, backgroundSize) {var bgposition = _html2canvas.Util.getCSS(el, prop, imageIndex),topPos,left,percentage,val;if (bgposition.length === 1) {val = bgposition[0];bgposition = [];bgposition[0] = val;bgposition[1] = val;}if (bgposition[0].toString().indexOf("%") !== -1) {percentage = (parseFloat(bgposition[0]) / 100);left = bounds.width * percentage;if (prop !== 'backgroundSize') {left -= (backgroundSize || image).width * percentage;}} else {if (prop === 'backgroundSize') {if (bgposition[0] === 'auto') {left = image.width;} else {if (/contain|cover/.test(bgposition[0])) {var resized = _html2canvas.Util.resizeBounds(image.width, image.height, bounds.width, bounds.height, bgposition[0]);left = resized.width;topPos = resized.height;} else {left = parseInt(bgposition[0], 10);}}} else {left = parseInt(bgposition[0], 10);}}if (bgposition[1] === 'auto') {topPos = left / image.width * image.height;} else if (bgposition[1].toString().indexOf("%") !== -1) {percentage = (parseFloat(bgposition[1]) / 100);topPos = bounds.height * percentage;if (prop !== 'backgroundSize') {topPos -= (backgroundSize || image).height * percentage;}} else {topPos = parseInt(bgposition[1], 10);}return [left, topPos];}_html2canvas.Util.BackgroundPosition = function (el, bounds, image, imageIndex, backgroundSize) {var result = backgroundBoundsFactory('backgroundPosition', el, bounds, image, imageIndex, backgroundSize);return { left: result[0], top: result[1] };};_html2canvas.Util.BackgroundSize = function (el, bounds, image, imageIndex) {var result = backgroundBoundsFactory('backgroundSize', el, bounds, image, imageIndex);return { width: result[0], height: result[1] };};_html2canvas.Util.Extend = function (options, defaults) {for (var key in options) {if (options.hasOwnProperty(key)) {defaults[key] = options[key];}}return defaults;};/** Derived from jQuery.contents()* Copyright 2010, John Resig* Dual licensed under the MIT or GPL Version 2 licenses.* http://jquery.org/license*/_html2canvas.Util.Children = function (elem) {var children;try {children = (elem.nodeName && elem.nodeName.toUpperCase() === "IFRAME") ? elem.contentDocument || elem.contentWindow.document : (function (array) {var ret = [];if (array !== null) {(function (first, second) {var i = first.length,j = 0;if (typeof second.length === "number") {for (var l = second.length; j < l; j++) {first[i++] = second[j];}} else {while (second[j] !== undefined) {first[i++] = second[j++];}}first.length = i;return first;})(ret, array);}return ret;})(elem.childNodes);} catch (ex) {_html2canvas.Util.log("html2canvas.Util.Children failed with exception: " + ex.message);children = [];}return children;};_html2canvas.Util.isTransparent = function (backgroundColor) {return (backgroundColor === "transparent" || backgroundColor === "rgba(0, 0, 0, 0)");};_html2canvas.Util.Font = (function () {var fontData = {};return function (font, fontSize, doc) {if (fontData[font + "-" + fontSize] !== undefined) {return fontData[font + "-" + fontSize];}var container = doc.createElement('div'),img = doc.createElement('img'),span = doc.createElement('span'),sampleText = 'Hidden Text',baseline,middle,metricsObj;container.style.visibility = "hidden";container.style.fontFamily = font;container.style.fontSize = fontSize;container.style.margin = 0;container.style.padding = 0;doc.body.appendChild(container);// http://probablyprogramming.com/2009/03/15/the-tiniest-gif-ever (handtinywhite.gif)img.src = "data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACwAAAAAAQABAAACAkQBADs=";img.width = 1;img.height = 1;img.style.margin = 0;img.style.padding = 0;img.style.verticalAlign = "baseline";span.style.fontFamily = font;span.style.fontSize = fontSize;span.style.margin = 0;span.style.padding = 0;span.appendChild(doc.createTextNode(sampleText));container.appendChild(span);container.appendChild(img);baseline = (img.offsetTop - span.offsetTop) + 1;container.removeChild(span);container.appendChild(doc.createTextNode(sampleText));container.style.lineHeight = "normal";img.style.verticalAlign = "super";middle = (img.offsetTop - container.offsetTop) + 1;metricsObj = {baseline: baseline,lineWidth: 1,middle: middle};fontData[font + "-" + fontSize] = metricsObj;doc.body.removeChild(container);return metricsObj;};})();(function () {var Util = _html2canvas.Util,Generate = {};_html2canvas.Generate = Generate;var reGradients = [/^(-webkit-linear-gradient)\(([a-z\s]+)([\w\d\.\s,%\(\)]+)\)$/,/^(-o-linear-gradient)\(([a-z\s]+)([\w\d\.\s,%\(\)]+)\)$/,/^(-webkit-gradient)\((linear|radial),\s((?:\d{1,3}%?)\s(?:\d{1,3}%?),\s(?:\d{1,3}%?)\s(?:\d{1,3}%?))([\w\d\.\s,%\(\)\-]+)\)$/,/^(-moz-linear-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?))([\w\d\.\s,%\(\)]+)\)$/,/^(-webkit-radial-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?)),\s(\w+)\s([a-z\-]+)([\w\d\.\s,%\(\)]+)\)$/,/^(-moz-radial-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?)),\s(\w+)\s?([a-z\-]*)([\w\d\.\s,%\(\)]+)\)$/,/^(-o-radial-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?)),\s(\w+)\s([a-z\-]+)([\w\d\.\s,%\(\)]+)\)$/];/** TODO: Add IE10 vendor prefix (-ms) support* TODO: Add W3C gradient (linear-gradient) support* TODO: Add old Webkit -webkit-gradient(radial, ...) support* TODO: Maybe some RegExp optimizations are possible ;o)*/Generate.parseGradient = function (css, bounds) {var gradient, i, len = reGradients.length, m1, stop, m2, m2Len, step, m3, tl, tr, br, bl;for (i = 0; i < len; i += 1) {m1 = css.match(reGradients[i]);if (m1) {break;}}if (m1) {switch (m1[1]) {case '-webkit-linear-gradient':case '-o-linear-gradient':gradient = {type: 'linear',x0: null,y0: null,x1: null,y1: null,colorStops: []};// get coordinatesm2 = m1[2].match(/\w+/g);if (m2) {m2Len = m2.length;for (i = 0; i < m2Len; i += 1) {switch (m2[i]) {case 'top':gradient.y0 = 0;gradient.y1 = bounds.height;break;case 'right':gradient.x0 = bounds.width;gradient.x1 = 0;break;case 'bottom':gradient.y0 = bounds.height;gradient.y1 = 0;break;case 'left':gradient.x0 = 0;gradient.x1 = bounds.width;break;}}}if (gradient.x0 === null && gradient.x1 === null) { // centergradient.x0 = gradient.x1 = bounds.width / 2;}if (gradient.y0 === null && gradient.y1 === null) { // centergradient.y0 = gradient.y1 = bounds.height / 2;}// get colors and stopsm2 = m1[3].match(/((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\)(?:\s\d{1,3}(?:%|px))?)+/g);if (m2) {m2Len = m2.length;step = 1 / Math.max(m2Len - 1, 1);for (i = 0; i < m2Len; i += 1) {m3 = m2[i].match(/((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\))\s*(\d{1,3})?(%|px)?/);if (m3[2]) {stop = parseFloat(m3[2]);if (m3[3] === '%') {stop /= 100;} else { // px - stupid operastop /= bounds.width;}} else {stop = i * step;}gradient.colorStops.push({color: m3[1],stop: stop});}}break;case '-webkit-gradient':gradient = {type: m1[2] === 'radial' ? 'circle' : m1[2], // TODO: Add radial gradient support for older mozilla definitionsx0: 0,y0: 0,x1: 0,y1: 0,colorStops: []};// get coordinatesm2 = m1[3].match(/(\d{1,3})%?\s(\d{1,3})%?,\s(\d{1,3})%?\s(\d{1,3})%?/);if (m2) {gradient.x0 = (m2[1] * bounds.width) / 100;gradient.y0 = (m2[2] * bounds.height) / 100;gradient.x1 = (m2[3] * bounds.width) / 100;gradient.y1 = (m2[4] * bounds.height) / 100;}// get colors and stopsm2 = m1[4].match(/((?:from|to|color-stop)\((?:[0-9\.]+,\s)?(?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\)\))+/g);if (m2) {m2Len = m2.length;for (i = 0; i < m2Len; i += 1) {m3 = m2[i].match(/(from|to|color-stop)\(([0-9\.]+)?(?:,\s)?((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\))\)/);stop = parseFloat(m3[2]);if (m3[1] === 'from') {stop = 0.0;}if (m3[1] === 'to') {stop = 1.0;}gradient.colorStops.push({color: m3[3],stop: stop});}}break;case '-moz-linear-gradient':gradient = {type: 'linear',x0: 0,y0: 0,x1: 0,y1: 0,colorStops: []};// get coordinatesm2 = m1[2].match(/(\d{1,3})%?\s(\d{1,3})%?/);// m2[1] == 0% -> left// m2[1] == 50% -> center// m2[1] == 100% -> right// m2[2] == 0% -> top// m2[2] == 50% -> center// m2[2] == 100% -> bottomif (m2) {gradient.x0 = (m2[1] * bounds.width) / 100;gradient.y0 = (m2[2] * bounds.height) / 100;gradient.x1 = bounds.width - gradient.x0;gradient.y1 = bounds.height - gradient.y0;}// get colors and stopsm2 = m1[3].match(/((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\)(?:\s\d{1,3}%)?)+/g);if (m2) {m2Len = m2.length;step = 1 / Math.max(m2Len - 1, 1);for (i = 0; i < m2Len; i += 1) {m3 = m2[i].match(/((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\))\s*(\d{1,3})?(%)?/);if (m3[2]) {stop = parseFloat(m3[2]);if (m3[3]) { // percentagestop /= 100;}} else {stop = i * step;}gradient.colorStops.push({color: m3[1],stop: stop});}}break;case '-webkit-radial-gradient':case '-moz-radial-gradient':case '-o-radial-gradient':gradient = {type: 'circle',x0: 0,y0: 0,x1: bounds.width,y1: bounds.height,cx: 0,cy: 0,rx: 0,ry: 0,colorStops: []};// centerm2 = m1[2].match(/(\d{1,3})%?\s(\d{1,3})%?/);if (m2) {gradient.cx = (m2[1] * bounds.width) / 100;gradient.cy = (m2[2] * bounds.height) / 100;}// sizem2 = m1[3].match(/\w+/);m3 = m1[4].match(/[a-z\-]*/);if (m2 && m3) {switch (m3[0]) {case 'farthest-corner':case 'cover': // is equivalent to farthest-cornercase '': // mozilla removes "cover" from definition :(tl = Math.sqrt(Math.pow(gradient.cx, 2) + Math.pow(gradient.cy, 2));tr = Math.sqrt(Math.pow(gradient.cx, 2) + Math.pow(gradient.y1 - gradient.cy, 2));br = Math.sqrt(Math.pow(gradient.x1 - gradient.cx, 2) + Math.pow(gradient.y1 - gradient.cy, 2));bl = Math.sqrt(Math.pow(gradient.x1 - gradient.cx, 2) + Math.pow(gradient.cy, 2));gradient.rx = gradient.ry = Math.max(tl, tr, br, bl);break;case 'closest-corner':tl = Math.sqrt(Math.pow(gradient.cx, 2) + Math.pow(gradient.cy, 2));tr = Math.sqrt(Math.pow(gradient.cx, 2) + Math.pow(gradient.y1 - gradient.cy, 2));br = Math.sqrt(Math.pow(gradient.x1 - gradient.cx, 2) + Math.pow(gradient.y1 - gradient.cy, 2));bl = Math.sqrt(Math.pow(gradient.x1 - gradient.cx, 2) + Math.pow(gradient.cy, 2));gradient.rx = gradient.ry = Math.min(tl, tr, br, bl);break;case 'farthest-side':if (m2[0] === 'circle') {gradient.rx = gradient.ry = Math.max(gradient.cx,gradient.cy,gradient.x1 - gradient.cx,gradient.y1 - gradient.cy);} else { // ellipsegradient.type = m2[0];gradient.rx = Math.max(gradient.cx,gradient.x1 - gradient.cx);gradient.ry = Math.max(gradient.cy,gradient.y1 - gradient.cy);}break;case 'closest-side':case 'contain': // is equivalent to closest-sideif (m2[0] === 'circle') {gradient.rx = gradient.ry = Math.min(gradient.cx,gradient.cy,gradient.x1 - gradient.cx,gradient.y1 - gradient.cy);} else { // ellipsegradient.type = m2[0];gradient.rx = Math.min(gradient.cx,gradient.x1 - gradient.cx);gradient.ry = Math.min(gradient.cy,gradient.y1 - gradient.cy);}break;// TODO: add support for "30px 40px" sizes (webkit only)}}// color stopsm2 = m1[5].match(/((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\)(?:\s\d{1,3}(?:%|px))?)+/g);if (m2) {m2Len = m2.length;step = 1 / Math.max(m2Len - 1, 1);for (i = 0; i < m2Len; i += 1) {m3 = m2[i].match(/((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\))\s*(\d{1,3})?(%|px)?/);if (m3[2]) {stop = parseFloat(m3[2]);if (m3[3] === '%') {stop /= 100;} else { // px - stupid operastop /= bounds.width;}} else {stop = i * step;}gradient.colorStops.push({color: m3[1],stop: stop});}}break;}}return gradient;};function addScrollStops(grad) {return function (colorStop) {try {grad.addColorStop(colorStop.stop, colorStop.color);}catch (e) {Util.log(['failed to add color stop: ', e, '; tried to add: ', colorStop]);}};}Generate.Gradient = function (src, bounds) {if (bounds.width === 0 || bounds.height === 0) {return;}var canvas = document.createElement('canvas'),ctx = canvas.getContext('2d'),gradient, grad;canvas.width = bounds.width;canvas.height = bounds.height;// TODO: add support for multi defined background gradientsgradient = _html2canvas.Generate.parseGradient(src, bounds);if (gradient) {switch (gradient.type) {case 'linear':grad = ctx.createLinearGradient(gradient.x0, gradient.y0, gradient.x1, gradient.y1);gradient.colorStops.forEach(addScrollStops(grad));ctx.fillStyle = grad;ctx.fillRect(0, 0, bounds.width, bounds.height);break;case 'circle':grad = ctx.createRadialGradient(gradient.cx, gradient.cy, 0, gradient.cx, gradient.cy, gradient.rx);gradient.colorStops.forEach(addScrollStops(grad));ctx.fillStyle = grad;ctx.fillRect(0, 0, bounds.width, bounds.height);break;case 'ellipse':var canvasRadial = document.createElement('canvas'),ctxRadial = canvasRadial.getContext('2d'),ri = Math.max(gradient.rx, gradient.ry),di = ri * 2;canvasRadial.width = canvasRadial.height = di;grad = ctxRadial.createRadialGradient(gradient.rx, gradient.ry, 0, gradient.rx, gradient.ry, ri);gradient.colorStops.forEach(addScrollStops(grad));ctxRadial.fillStyle = grad;ctxRadial.fillRect(0, 0, di, di);ctx.fillStyle = gradient.colorStops[gradient.colorStops.length - 1].color;ctx.fillRect(0, 0, canvas.width, canvas.height);ctx.drawImage(canvasRadial, gradient.cx - gradient.rx, gradient.cy - gradient.ry, 2 * gradient.rx, 2 * gradient.ry);break;}}return canvas;};Generate.ListAlpha = function (number) {var tmp = "",modulus;do {modulus = number % 26;tmp = String.fromCharCode((modulus) + 64) + tmp;number = number / 26;} while ((number * 26) > 26);return tmp;};Generate.ListRoman = function (number) {var romanArray = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"],decimal = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],roman = "",v,len = romanArray.length;if (number <= 0 || number >= 4000) {return number;}for (v = 0; v < len; v += 1) {while (number >= decimal[v]) {number -= decimal[v];roman += romanArray[v];}}return roman;};})();function h2cRenderContext(width, height) {var storage = [];return {storage: storage,width: width,height: height,clip: function () {storage.push({type: "function",name: "clip",'arguments': arguments});},translate: function () {storage.push({type: "function",name: "translate",'arguments': arguments});},fill: function () {storage.push({type: "function",name: "fill",'arguments': arguments});},save: function () {storage.push({type: "function",name: "save",'arguments': arguments});},restore: function () {storage.push({type: "function",name: "restore",'arguments': arguments});},fillRect: function () {storage.push({type: "function",name: "fillRect",'arguments': arguments});},createPattern: function () {storage.push({type: "function",name: "createPattern",'arguments': arguments});},drawShape: function () {var shape = [];storage.push({type: "function",name: "drawShape",'arguments': shape});return {moveTo: function () {shape.push({name: "moveTo",'arguments': arguments});},lineTo: function () {shape.push({name: "lineTo",'arguments': arguments});},arcTo: function () {shape.push({name: "arcTo",'arguments': arguments});},bezierCurveTo: function () {shape.push({name: "bezierCurveTo",'arguments': arguments});},quadraticCurveTo: function () {shape.push({name: "quadraticCurveTo",'arguments': arguments});}};},drawImage: function () {storage.push({type: "function",name: "drawImage",'arguments': arguments});},fillText: function () {storage.push({type: "function",name: "fillText",'arguments': arguments});},setVariable: function (variable, value) {storage.push({type: "variable",name: variable,'arguments': value});return value;}};}_html2canvas.Parse = function (images, options) {window.scroll(0, 0);var element = ((options.elements === undefined) ? document.body : options.elements[0]), // select body by defaultnumDraws = 0,doc = element.ownerDocument,Util = _html2canvas.Util,support = Util.Support(options, doc),ignoreElementsRegExp = new RegExp("(" + options.ignoreElements + ")"),body = doc.body,getCSS = Util.getCSS,pseudoHide = "___html2canvas___pseudoelement",hidePseudoElements = doc.createElement('style');hidePseudoElements.innerHTML = '.' + pseudoHide + '-before:before { content: "" !important; display: none !important; }' +'.' + pseudoHide + '-after:after { content: "" !important; display: none !important; }';body.appendChild(hidePseudoElements);images = images || {};function documentWidth() {return Math.max(Math.max(doc.body.scrollWidth, doc.documentElement.scrollWidth),Math.max(doc.body.offsetWidth, doc.documentElement.offsetWidth),Math.max(doc.body.clientWidth, doc.documentElement.clientWidth));}function documentHeight() {return Math.max(Math.max(doc.body.scrollHeight, doc.documentElement.scrollHeight),Math.max(doc.body.offsetHeight, doc.documentElement.offsetHeight),Math.max(doc.body.clientHeight, doc.documentElement.clientHeight));}function getCSSInt(element, attribute) {var val = parseInt(getCSS(element, attribute), 10);return (isNaN(val)) ? 0 : val; // borders in old IE are throwing 'medium' for demo.html}function renderRect(ctx, x, y, w, h, bgcolor) {if (bgcolor !== "transparent") {ctx.setVariable("fillStyle", bgcolor);ctx.fillRect(x, y, w, h);numDraws += 1;}}function capitalize(m, p1, p2) {if (m.length > 0) {return p1 + p2.toUpperCase();}}function textTransform(text, transform) {switch (transform) {case "lowercase":return text.toLowerCase();case "capitalize":return text.replace(/(^|\s|:|-|\(|\))([a-z])/g, capitalize);case "uppercase":return text.toUpperCase();default:return text;}}function noLetterSpacing(letter_spacing) {return (/^(normal|none|0px)$/.test(letter_spacing));}function drawText(currentText, x, y, ctx) {if (currentText !== null && Util.trimText(currentText).length > 0) {ctx.fillText(currentText, x, y);numDraws += 1;}}function setTextVariables(ctx, el, text_decoration, color) {var align = false,bold = getCSS(el, "fontWeight"),family = getCSS(el, "fontFamily"),size = getCSS(el, "fontSize"),shadows = Util.parseTextShadows(getCSS(el, "textShadow"));switch (parseInt(bold, 10)) {case 401:bold = "bold";break;case 400:bold = "normal";break;}ctx.setVariable("fillStyle", color);ctx.setVariable("font", [getCSS(el, "fontStyle"), getCSS(el, "fontVariant"), bold, size, family].join(" "));ctx.setVariable("textAlign", (align) ? "right" : "left");if (shadows.length) {// TODO: support multiple text shadows// apply the first text shadowctx.setVariable("shadowColor", shadows[0].color);ctx.setVariable("shadowOffsetX", shadows[0].offsetX);ctx.setVariable("shadowOffsetY", shadows[0].offsetY);ctx.setVariable("shadowBlur", shadows[0].blur);}if (text_decoration !== "none") {return Util.Font(family, size, doc);}}function renderTextDecoration(ctx, text_decoration, bounds, metrics, color) {switch (text_decoration) {case "underline":// Draws a line at the baseline of the font// TODO As some browsers display the line as more than 1px if the font-size is big, need to take that into account both in position and sizerenderRect(ctx, bounds.left, Math.round(bounds.top + metrics.baseline + metrics.lineWidth), bounds.width, 1, color);break;case "overline":renderRect(ctx, bounds.left, Math.round(bounds.top), bounds.width, 1, color);break;case "line-through":// TODO try and find exact position for line-throughrenderRect(ctx, bounds.left, Math.ceil(bounds.top + metrics.middle + metrics.lineWidth), bounds.width, 1, color);break;}}function getTextBounds(state, text, textDecoration, isLast, transform) {var bounds;if (support.rangeBounds && !transform) {if (textDecoration !== "none" || Util.trimText(text).length !== 0) {bounds = textRangeBounds(text, state.node, state.textOffset);}state.textOffset += text.length;} else if (state.node && typeof state.node.nodeValue === "string") {var newTextNode = (isLast) ? state.node.splitText(text.length) : null;bounds = textWrapperBounds(state.node, transform);state.node = newTextNode;}return bounds;}function textRangeBounds(text, textNode, textOffset) {var range = doc.createRange();range.setStart(textNode, textOffset);range.setEnd(textNode, textOffset + text.length);return range.getBoundingClientRect();}function textWrapperBounds(oldTextNode, transform) {var parent = oldTextNode.parentNode,wrapElement = doc.createElement('wrapper'),backupText = oldTextNode.cloneNode(true);wrapElement.appendChild(oldTextNode.cloneNode(true));parent.replaceChild(wrapElement, oldTextNode);var bounds = transform ? Util.OffsetBounds(wrapElement) : Util.Bounds(wrapElement);parent.replaceChild(backupText, wrapElement);return bounds;}function renderText(el, textNode, stack) {var ctx = stack.ctx,color = getCSS(el, "color"),textDecoration = getCSS(el, "textDecoration"),textAlign = getCSS(el, "textAlign"),metrics,textList,state = {node: textNode,textOffset: 0};if (Util.trimText(textNode.nodeValue).length > 0) {textNode.nodeValue = textTransform(textNode.nodeValue, getCSS(el, "textTransform"));textAlign = textAlign.replace(["-webkit-auto"], ["auto"]);textList = (!options.letterRendering && /^(left|right|justify|auto)$/.test(textAlign) && noLetterSpacing(getCSS(el, "letterSpacing"))) ?textNode.nodeValue.split(/(\b| )/): textNode.nodeValue.split("");metrics = setTextVariables(ctx, el, textDecoration, color);if (options.chinese) {textList.forEach(function (word, index) {if (/.*[\u4E00-\u9FA5].*$/.test(word)) {word = word.split("");word.unshift(index, 1);textList.splice.apply(textList, word);}});}textList.forEach(function (text, index) {var bounds = getTextBounds(state, text, textDecoration, (index < textList.length - 1), stack.transform.matrix);if (bounds) {drawText(text, bounds.left, bounds.bottom, ctx);renderTextDecoration(ctx, textDecoration, bounds, metrics, color);}});}}function listPosition(element, val) {var boundElement = doc.createElement("boundelement"),originalType,bounds;boundElement.style.display = "inline";originalType = element.style.listStyleType;element.style.listStyleType = "none";boundElement.appendChild(doc.createTextNode(val));element.insertBefore(boundElement, element.firstChild);bounds = Util.Bounds(boundElement);element.removeChild(boundElement);element.style.listStyleType = originalType;return bounds;}function elementIndex(el) {var i = -1,count = 1,childs = el.parentNode.childNodes;if (el.parentNode) {while (childs[++i] !== el) {if (childs[i].nodeType === 1) {count++;}}return count;} else {return -1;}}function listItemText(element, type) {var currentIndex = elementIndex(element), text;switch (type) {case "decimal":text = currentIndex;break;case "decimal-leading-zero":text = (currentIndex.toString().length === 1) ? currentIndex = "0" + currentIndex.toString() : currentIndex.toString();break;case "upper-roman":text = _html2canvas.Generate.ListRoman(currentIndex);break;case "lower-roman":text = _html2canvas.Generate.ListRoman(currentIndex).toLowerCase();break;case "lower-alpha":text = _html2canvas.Generate.ListAlpha(currentIndex).toLowerCase();break;case "upper-alpha":text = _html2canvas.Generate.ListAlpha(currentIndex);break;}return text + ". ";}function renderListItem(element, stack, elBounds) {var x,text,ctx = stack.ctx,type = getCSS(element, "listStyleType"),listBounds;if (/^(decimal|decimal-leading-zero|upper-alpha|upper-latin|upper-roman|lower-alpha|lower-greek|lower-latin|lower-roman)$/i.test(type)) {text = listItemText(element, type);listBounds = listPosition(element, text);setTextVariables(ctx, element, "none", getCSS(element, "color"));if (getCSS(element, "listStylePosition") === "inside") {ctx.setVariable("textAlign", "left");x = elBounds.left;} else {return;}drawText(text, x, listBounds.bottom, ctx);}}function loadImage(src) {var img = images[src];return (img && img.succeeded === true) ? img.img : false;}function clipBounds(src, dst) {var x = Math.max(src.left, dst.left),y = Math.max(src.top, dst.top),x2 = Math.min((src.left + src.width), (dst.left + dst.width)),y2 = Math.min((src.top + src.height), (dst.top + dst.height));return {left: x,top: y,width: x2 - x,height: y2 - y};}function setZ(element, stack, parentStack) {var newContext,isPositioned = stack.cssPosition !== 'static',zIndex = isPositioned ? getCSS(element, 'zIndex') : 'auto',opacity = getCSS(element, 'opacity'),isFloated = getCSS(element, 'cssFloat') !== 'none';// https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Understanding_z_index/The_stacking_context// When a new stacking context should be created:// the root element (HTML),// positioned (absolutely or relatively) with a z-index value other than "auto",// elements with an opacity value less than 1. (See the specification for opacity),// on mobile WebKit and Chrome 22+, position: fixed always creates a new stacking context, even when z-index is "auto" (See this post)stack.zIndex = newContext = h2czContext(zIndex);newContext.isPositioned = isPositioned;newContext.isFloated = isFloated;newContext.opacity = opacity;newContext.ownStacking = (zIndex !== 'auto' || opacity < 1);if (parentStack) {parentStack.zIndex.children.push(stack);}}function renderImage(ctx, element, image, bounds, borders) {var paddingLeft = getCSSInt(element, 'paddingLeft'),paddingTop = getCSSInt(element, 'paddingTop'),paddingRight = getCSSInt(element, 'paddingRight'),paddingBottom = getCSSInt(element, 'paddingBottom');drawImage(ctx,image,0, //sx0, //syimage.width, //swimage.height, //shbounds.left + paddingLeft + borders[3].width, //dxbounds.top + paddingTop + borders[0].width, // dybounds.width - (borders[1].width + borders[3].width + paddingLeft + paddingRight), //dwbounds.height - (borders[0].width + borders[2].width + paddingTop + paddingBottom) //dh);}function getBorderData(element) {return ["Top", "Right", "Bottom", "Left"].map(function (side) {return {width: getCSSInt(element, 'border' + side + 'Width'),color: getCSS(element, 'border' + side + 'Color')};});}function getBorderRadiusData(element) {return ["TopLeft", "TopRight", "BottomRight", "BottomLeft"].map(function (side) {return getCSS(element, 'border' + side + 'Radius');});}var getCurvePoints = (function (kappa) {return function (x, y, r1, r2) {var ox = (r1) * kappa, // control point offset horizontaloy = (r2) * kappa, // control point offset verticalxm = x + r1, // x-middleym = y + r2; // y-middlereturn {topLeft: bezierCurve({x: x,y: ym}, {x: x,y: ym - oy}, {x: xm - ox,y: y}, {x: xm,y: y}),topRight: bezierCurve({x: x,y: y}, {x: x + ox,y: y}, {x: xm,y: ym - oy}, {x: xm,y: ym}),bottomRight: bezierCurve({x: xm,y: y}, {x: xm,y: y + oy}, {x: x + ox,y: ym}, {x: x,y: ym}),bottomLeft: bezierCurve({x: xm,y: ym}, {x: xm - ox,y: ym}, {x: x,y: y + oy}, {x: x,y: y})};};})(4 * ((Math.sqrt(2) - 1) / 3));function bezierCurve(start, startControl, endControl, end) {var lerp = function (a, b, t) {return {x: a.x + (b.x - a.x) * t,y: a.y + (b.y - a.y) * t};};return {start: start,startControl: startControl,endControl: endControl,end: end,subdivide: function (t) {var ab = lerp(start, startControl, t),bc = lerp(startControl, endControl, t),cd = lerp(endControl, end, t),abbc = lerp(ab, bc, t),bccd = lerp(bc, cd, t),dest = lerp(abbc, bccd, t);return [bezierCurve(start, ab, abbc, dest), bezierCurve(dest, bccd, cd, end)];},curveTo: function (borderArgs) {borderArgs.push(["bezierCurve", startControl.x, startControl.y, endControl.x, endControl.y, end.x, end.y]);},curveToReversed: function (borderArgs) {borderArgs.push(["bezierCurve", endControl.x, endControl.y, startControl.x, startControl.y, start.x, start.y]);}};}function parseCorner(borderArgs, radius1, radius2, corner1, corner2, x, y) {if (radius1[0] > 0 || radius1[1] > 0) {borderArgs.push(["line", corner1[0].start.x, corner1[0].start.y]);corner1[0].curveTo(borderArgs);corner1[1].curveTo(borderArgs);} else {borderArgs.push(["line", x, y]);}if (radius2[0] > 0 || radius2[1] > 0) {borderArgs.push(["line", corner2[0].start.x, corner2[0].start.y]);}}function drawSide(borderData, radius1, radius2, outer1, inner1, outer2, inner2) {var borderArgs = [];if (radius1[0] > 0 || radius1[1] > 0) {borderArgs.push(["line", outer1[1].start.x, outer1[1].start.y]);outer1[1].curveTo(borderArgs);} else {borderArgs.push(["line", borderData.c1[0], borderData.c1[1]]);}if (radius2[0] > 0 || radius2[1] > 0) {borderArgs.push(["line", outer2[0].start.x, outer2[0].start.y]);outer2[0].curveTo(borderArgs);borderArgs.push(["line", inner2[0].end.x, inner2[0].end.y]);inner2[0].curveToReversed(borderArgs);} else {borderArgs.push(["line", borderData.c2[0], borderData.c2[1]]);borderArgs.push(["line", borderData.c3[0], borderData.c3[1]]);}if (radius1[0] > 0 || radius1[1] > 0) {borderArgs.push(["line", inner1[1].end.x, inner1[1].end.y]);inner1[1].curveToReversed(borderArgs);} else {borderArgs.push(["line", borderData.c4[0], borderData.c4[1]]);}return borderArgs;}function calculateCurvePoints(bounds, borderRadius, borders) {var x = bounds.left,y = bounds.top,width = bounds.width,height = bounds.height,tlh = borderRadius[0][0],tlv = borderRadius[0][1],trh = borderRadius[1][0],trv = borderRadius[1][1],brh = borderRadius[2][0],brv = borderRadius[2][1],blh = borderRadius[3][0],blv = borderRadius[3][1],topWidth = width - trh,rightHeight = height - brv,bottomWidth = width - brh,leftHeight = height - blv;return {topLeftOuter: getCurvePoints(x,y,tlh,tlv).topLeft.subdivide(0.5),topLeftInner: getCurvePoints(x + borders[3].width,y + borders[0].width,Math.max(0, tlh - borders[3].width),Math.max(0, tlv - borders[0].width)).topLeft.subdivide(0.5),topRightOuter: getCurvePoints(x + topWidth,y,trh,trv).topRight.subdivide(0.5),topRightInner: getCurvePoints(x + Math.min(topWidth, width + borders[3].width),y + borders[0].width,(topWidth > width + borders[3].width) ? 0 : trh - borders[3].width,trv - borders[0].width).topRight.subdivide(0.5),bottomRightOuter: getCurvePoints(x + bottomWidth,y + rightHeight,brh,brv).bottomRight.subdivide(0.5),bottomRightInner: getCurvePoints(x + Math.min(bottomWidth, width + borders[3].width),y + Math.min(rightHeight, height + borders[0].width),Math.max(0, brh - borders[1].width),Math.max(0, brv - borders[2].width)).bottomRight.subdivide(0.5),bottomLeftOuter: getCurvePoints(x,y + leftHeight,blh,blv).bottomLeft.subdivide(0.5),bottomLeftInner: getCurvePoints(x + borders[3].width,y + leftHeight,Math.max(0, blh - borders[3].width),Math.max(0, blv - borders[2].width)).bottomLeft.subdivide(0.5)};}function getBorderClip(element, borderPoints, borders, radius, bounds) {var backgroundClip = getCSS(element, 'backgroundClip'),borderArgs = [];switch (backgroundClip) {case "content-box":case "padding-box":parseCorner(borderArgs, radius[0], radius[1], borderPoints.topLeftInner, borderPoints.topRightInner, bounds.left + borders[3].width, bounds.top + borders[0].width);parseCorner(borderArgs, radius[1], radius[2], borderPoints.topRightInner, borderPoints.bottomRightInner, bounds.left + bounds.width - borders[1].width, bounds.top + borders[0].width);parseCorner(borderArgs, radius[2], radius[3], borderPoints.bottomRightInner, borderPoints.bottomLeftInner, bounds.left + bounds.width - borders[1].width, bounds.top + bounds.height - borders[2].width);parseCorner(borderArgs, radius[3], radius[0], borderPoints.bottomLeftInner, borderPoints.topLeftInner, bounds.left + borders[3].width, bounds.top + bounds.height - borders[2].width);break;default:parseCorner(borderArgs, radius[0], radius[1], borderPoints.topLeftOuter, borderPoints.topRightOuter, bounds.left, bounds.top);parseCorner(borderArgs, radius[1], radius[2], borderPoints.topRightOuter, borderPoints.bottomRightOuter, bounds.left + bounds.width, bounds.top);parseCorner(borderArgs, radius[2], radius[3], borderPoints.bottomRightOuter, borderPoints.bottomLeftOuter, bounds.left + bounds.width, bounds.top + bounds.height);parseCorner(borderArgs, radius[3], radius[0], borderPoints.bottomLeftOuter, borderPoints.topLeftOuter, bounds.left, bounds.top + bounds.height);break;}return borderArgs;}function parseBorders(element, bounds, borders) {var x = bounds.left,y = bounds.top,width = bounds.width,height = bounds.height,borderSide,bx,by,bw,bh,borderArgs,// http://www.w3.org/TR/css3-background/#the-border-radiusborderRadius = getBorderRadiusData(element),borderPoints = calculateCurvePoints(bounds, borderRadius, borders),borderData = {clip: getBorderClip(element, borderPoints, borders, borderRadius, bounds),borders: []};for (borderSide = 0; borderSide < 4; borderSide++) {if (borders[borderSide].width > 0) {bx = x;by = y;bw = width;bh = height - (borders[2].width);switch (borderSide) {case 0:// top borderbh = borders[0].width;borderArgs = drawSide({c1: [bx, by],c2: [bx + bw, by],c3: [bx + bw - borders[1].width, by + bh],c4: [bx + borders[3].width, by + bh]}, borderRadius[0], borderRadius[1],borderPoints.topLeftOuter, borderPoints.topLeftInner, borderPoints.topRightOuter, borderPoints.topRightInner);break;case 1:// right borderbx = x + width - (borders[1].width);bw = borders[1].width;borderArgs = drawSide({c1: [bx + bw, by],c2: [bx + bw, by + bh + borders[2].width],c3: [bx, by + bh],c4: [bx, by + borders[0].width]}, borderRadius[1], borderRadius[2],borderPoints.topRightOuter, borderPoints.topRightInner, borderPoints.bottomRightOuter, borderPoints.bottomRightInner);break;case 2:// bottom borderby = (by + height) - (borders[2].width);bh = borders[2].width;borderArgs = drawSide({c1: [bx + bw, by + bh],c2: [bx, by + bh],c3: [bx + borders[3].width, by],c4: [bx + bw - borders[3].width, by]}, borderRadius[2], borderRadius[3],borderPoints.bottomRightOuter, borderPoints.bottomRightInner, borderPoints.bottomLeftOuter, borderPoints.bottomLeftInner);break;case 3:// left borderbw = borders[3].width;borderArgs = drawSide({c1: [bx, by + bh + borders[2].width],c2: [bx, by],c3: [bx + bw, by + borders[0].width],c4: [bx + bw, by + bh]}, borderRadius[3], borderRadius[0],borderPoints.bottomLeftOuter, borderPoints.bottomLeftInner, borderPoints.topLeftOuter, borderPoints.topLeftInner);break;}borderData.borders.push({args: borderArgs,color: borders[borderSide].color});}}return borderData;}function createShape(ctx, args) {var shape = ctx.drawShape();args.forEach(function (border, index) {shape[(index === 0) ? "moveTo" : border[0] + "To"].apply(null, border.slice(1));});return shape;}function renderBorders(ctx, borderArgs, color) {if (color !== "transparent") {ctx.setVariable("fillStyle", color);createShape(ctx, borderArgs);ctx.fill();numDraws += 1;}}function renderFormValue(el, bounds, stack) {var valueWrap = doc.createElement('valuewrap'),cssPropertyArray = ['lineHeight', 'textAlign', 'fontFamily', 'color', 'fontSize', 'paddingLeft', 'paddingTop', 'width', 'height', 'border', 'borderLeftWidth', 'borderTopWidth'],textValue,textNode;cssPropertyArray.forEach(function (property) {try {valueWrap.style[property] = getCSS(el, property);} catch (e) {// Older IE has issues with "border"Util.log("html2canvas: Parse: Exception caught in renderFormValue: " + e.message);}});valueWrap.style.borderColor = "black";valueWrap.style.borderStyle = "solid";valueWrap.style.display = "block";valueWrap.style.position = "absolute";if (/^(submit|reset|button|text|password)$/.test(el.type) || el.nodeName === "SELECT") {valueWrap.style.lineHeight = getCSS(el, "height");}valueWrap.style.top = bounds.top + "px";valueWrap.style.left = bounds.left + "px";textValue = (el.nodeName === "SELECT") ? (el.options[el.selectedIndex] || 0).text : el.value;if (!textValue) {textValue = el.placeholder;}textNode = doc.createTextNode(textValue);valueWrap.appendChild(textNode);body.appendChild(valueWrap);renderText(el, textNode, stack);body.removeChild(valueWrap);}function drawImage(ctx) {ctx.drawImage.apply(ctx, Array.prototype.slice.call(arguments, 1));numDraws += 1;}function getPseudoElement(el, which) {var elStyle = window.getComputedStyle(el, which);if (!elStyle || !elStyle.content || elStyle.content === "none" || elStyle.content === "-moz-alt-content" || elStyle.display === "none") {return;}var content = elStyle.content + '',first = content.substr(0, 1);//strips quotesif (first === content.substr(content.length - 1) && first.match(/'|"/)) {content = content.substr(1, content.length - 2);}var isImage = content.substr(0, 3) === 'url',elps = document.createElement(isImage ? 'img' : 'span');elps.className = pseudoHide + "-before " + pseudoHide + "-after";Object.keys(elStyle).filter(indexedProperty).forEach(function (prop) {// Prevent assigning of read only CSS Rules, ex. length, parentRuletry {elps.style[prop] = elStyle[prop];} catch (e) {Util.log(['Tried to assign readonly property ', prop, 'Error:', e]);}});if (isImage) {elps.src = Util.parseBackgroundImage(content)[0].args[0];} else {elps.innerHTML = content;}return elps;}function indexedProperty(property) {return (isNaN(window.parseInt(property, 10)));}function injectPseudoElements(el, stack) {var before = getPseudoElement(el, ':before'),after = getPseudoElement(el, ':after');if (!before && !after) {return;}if (before) {el.className += " " + pseudoHide + "-before";el.parentNode.insertBefore(before, el);parseElement(before, stack, true);el.parentNode.removeChild(before);el.className = el.className.replace(pseudoHide + "-before", "").trim();}if (after) {el.className += " " + pseudoHide + "-after";el.appendChild(after);parseElement(after, stack, true);el.removeChild(after);el.className = el.className.replace(pseudoHide + "-after", "").trim();}}function renderBackgroundRepeat(ctx, image, backgroundPosition, bounds) {var offsetX = Math.round(bounds.left + backgroundPosition.left),offsetY = Math.round(bounds.top + backgroundPosition.top);ctx.createPattern(image);ctx.translate(offsetX, offsetY);ctx.fill();ctx.translate(-offsetX, -offsetY);}function backgroundRepeatShape(ctx, image, backgroundPosition, bounds, left, top, width, height) {var args = [];args.push(["line", Math.round(left), Math.round(top)]);args.push(["line", Math.round(left + width), Math.round(top)]);args.push(["line", Math.round(left + width), Math.round(height + top)]);args.push(["line", Math.round(left), Math.round(height + top)]);createShape(ctx, args);ctx.save();ctx.clip();renderBackgroundRepeat(ctx, image, backgroundPosition, bounds);ctx.restore();}function renderBackgroundColor(ctx, backgroundBounds, bgcolor) {renderRect(ctx,backgroundBounds.left,backgroundBounds.top,backgroundBounds.width,backgroundBounds.height,bgcolor);}function renderBackgroundRepeating(el, bounds, ctx, image, imageIndex) {var backgroundSize = Util.BackgroundSize(el, bounds, image, imageIndex),backgroundPosition = Util.BackgroundPosition(el, bounds, image, imageIndex, backgroundSize),backgroundRepeat = getCSS(el, "backgroundRepeat").split(",").map(Util.trimText);image = resizeImage(image, backgroundSize);backgroundRepeat = backgroundRepeat[imageIndex] || backgroundRepeat[0];switch (backgroundRepeat) {case "repeat-x":backgroundRepeatShape(ctx, image, backgroundPosition, bounds,bounds.left, bounds.top + backgroundPosition.top, 99999, image.height);break;case "repeat-y":backgroundRepeatShape(ctx, image, backgroundPosition, bounds,bounds.left + backgroundPosition.left, bounds.top, image.width, 99999);break;case "no-repeat":backgroundRepeatShape(ctx, image, backgroundPosition, bounds,bounds.left + backgroundPosition.left, bounds.top + backgroundPosition.top, image.width, image.height);break;default:renderBackgroundRepeat(ctx, image, backgroundPosition, {top: bounds.top,left: bounds.left,width: image.width,height: image.height});break;}}function renderBackgroundImage(element, bounds, ctx) {var backgroundImage = getCSS(element, "backgroundImage"),backgroundImages = Util.parseBackgroundImage(backgroundImage),image,imageIndex = backgroundImages.length;while (imageIndex--) {backgroundImage = backgroundImages[imageIndex];if (!backgroundImage.args || backgroundImage.args.length === 0) {continue;}var key = backgroundImage.method === 'url' ?backgroundImage.args[0] :backgroundImage.value;image = loadImage(key);// TODO add support for background-originif (image) {renderBackgroundRepeating(element, bounds, ctx, image, imageIndex);} else {Util.log("html2canvas: Error loading background:", backgroundImage);}}}function resizeImage(image, bounds) {if (image.width === bounds.width && image.height === bounds.height) {return image;}var ctx, canvas = doc.createElement('canvas');canvas.width = bounds.width;canvas.height = bounds.height;ctx = canvas.getContext("2d");drawImage(ctx, image, 0, 0, image.width, image.height, 0, 0, bounds.width, bounds.height);return canvas;}function setOpacity(ctx, element, parentStack) {return ctx.setVariable("globalAlpha", getCSS(element, "opacity") * ((parentStack) ? parentStack.opacity : 1));}function removePx(str) {return str.replace("px", "");}var transformRegExp = /(matrix)\((.+)\)/;function getTransform(element, parentStack) {var transform = getCSS(element, "transform") || getCSS(element, "-webkit-transform") || getCSS(element, "-moz-transform") || getCSS(element, "-ms-transform") || getCSS(element, "-o-transform");var transformOrigin = getCSS(element, "transform-origin") || getCSS(element, "-webkit-transform-origin") || getCSS(element, "-moz-transform-origin") || getCSS(element, "-ms-transform-origin") || getCSS(element, "-o-transform-origin") || "0px 0px";transformOrigin = transformOrigin.split(" ").map(removePx).map(Util.asFloat);var matrix;if (transform && transform !== "none") {var match = transform.match(transformRegExp);if (match) {switch (match[1]) {case "matrix":matrix = match[2].split(",").map(Util.trimText).map(Util.asFloat);break;}}}return {origin: transformOrigin,matrix: matrix};}function createStack(element, parentStack, bounds, transform) {var ctx = h2cRenderContext((!parentStack) ? documentWidth() : bounds.width, (!parentStack) ? documentHeight() : bounds.height),stack = {ctx: ctx,opacity: setOpacity(ctx, element, parentStack),cssPosition: getCSS(element, "position"),borders: getBorderData(element),transform: transform,clip: (parentStack && parentStack.clip) ? Util.Extend({}, parentStack.clip) : null};setZ(element, stack, parentStack);// TODO correct overflow for absolute content residing under a static positionif (options.useOverflow === true && /(hidden|scroll|auto)/.test(getCSS(element, "overflow")) === true && /(BODY)/i.test(element.nodeName) === false) {stack.clip = (stack.clip) ? clipBounds(stack.clip, bounds) : bounds;}return stack;}function getBackgroundBounds(borders, bounds, clip) {var backgroundBounds = {left: bounds.left + borders[3].width,top: bounds.top + borders[0].width,width: bounds.width - (borders[1].width + borders[3].width),height: bounds.height - (borders[0].width + borders[2].width)};if (clip) {backgroundBounds = clipBounds(backgroundBounds, clip);}return backgroundBounds;}function getBounds(element, transform) {var bounds = (transform.matrix) ? Util.OffsetBounds(element) : Util.Bounds(element);transform.origin[0] += bounds.left;transform.origin[1] += bounds.top;return bounds;}function renderElement(element, parentStack, pseudoElement, ignoreBackground) {var transform = getTransform(element, parentStack),bounds = getBounds(element, transform),image,stack = createStack(element, parentStack, bounds, transform),borders = stack.borders,ctx = stack.ctx,backgroundBounds = getBackgroundBounds(borders, bounds, stack.clip),borderData = parseBorders(element, bounds, borders),backgroundColor = (ignoreElementsRegExp.test(element.nodeName)) ? "#efefef" : getCSS(element, "backgroundColor");createShape(ctx, borderData.clip);ctx.save();ctx.clip();if (backgroundBounds.height > 0 && backgroundBounds.width > 0 && !ignoreBackground) {renderBackgroundColor(ctx, bounds, backgroundColor);renderBackgroundImage(element, backgroundBounds, ctx);} else if (ignoreBackground) {stack.backgroundColor = backgroundColor;}ctx.restore();borderData.borders.forEach(function (border) {renderBorders(ctx, border.args, border.color);});if (!pseudoElement) {injectPseudoElements(element, stack);}switch (element.nodeName) {case "IMG":if ((image = loadImage(element.getAttribute('src')))) {renderImage(ctx, element, image, bounds, borders);} else {Util.log("html2canvas: Error loading <img>:" + element.getAttribute('src'));}break;case "INPUT":// TODO add all relevant type's, i.e. HTML5 new stuff// todo add support for placeholder attribute for browsers which support itif (/^(text|url|email|submit|button|reset)$/.test(element.type) && (element.value || element.placeholder || "").length > 0) {renderFormValue(element, bounds, stack);}break;case "TEXTAREA":if ((element.value || element.placeholder || "").length > 0) {renderFormValue(element, bounds, stack);}break;case "SELECT":if ((element.options || element.placeholder || "").length > 0) {renderFormValue(element, bounds, stack);}break;case "LI":renderListItem(element, stack, backgroundBounds);break;case "CANVAS":renderImage(ctx, element, element, bounds, borders);break;}return stack;}function isElementVisible(element) {return (getCSS(element, 'display') !== "none" && getCSS(element, 'visibility') !== "hidden" && !element.hasAttribute("data-html2canvas-ignore"));}function parseElement(element, stack, pseudoElement) {if (isElementVisible(element)) {stack = renderElement(element, stack, pseudoElement, false) || stack;if (!ignoreElementsRegExp.test(element.nodeName)) {parseChildren(element, stack, pseudoElement);}}}function parseChildren(element, stack, pseudoElement) {Util.Children(element).forEach(function (node) {if (node.nodeType === node.ELEMENT_NODE) {parseElement(node, stack, pseudoElement);} else if (node.nodeType === node.TEXT_NODE) {renderText(element, node, stack);}});}function init() {var background = getCSS(document.documentElement, "backgroundColor"),transparentBackground = (Util.isTransparent(background) && element === document.body),stack = renderElement(element, null, false, transparentBackground);parseChildren(element, stack);if (transparentBackground) {background = stack.backgroundColor;}body.removeChild(hidePseudoElements);return {backgroundColor: background,stack: stack};}return init();};function h2czContext(zindex) {return {zindex: zindex,children: []};}_html2canvas.Preload = function (options) {var images = {numLoaded: 0, // also failed are counted herenumFailed: 0,numTotal: 0,cleanupDone: false},pageOrigin,Util = _html2canvas.Util,methods,i,count = 0,element = options.elements[0] || document.body,doc = element.ownerDocument,domImages = element.getElementsByTagName('img'), // Fetch images of the present element onlyimgLen = domImages.length,link = doc.createElement("a"),supportCORS = (function (img) {return (img.crossOrigin !== undefined);})(new Image()),timeoutTimer;link.href = window.location.href;pageOrigin = link.protocol + link.host;function isSameOrigin(url) {link.href = url;link.href = link.href; // YES, BELIEVE IT OR NOT, that is required for IE9 - http://jsfiddle.net/niklasvh/2e48b/var origin = link.protocol + link.host;return (origin === pageOrigin);}function start() {Util.log("html2canvas: start: images: " + images.numLoaded + " / " + images.numTotal + " (failed: " + images.numFailed + ")");if (!images.firstRun && images.numLoaded >= images.numTotal) {Util.log("Finished loading images: # " + images.numTotal + " (failed: " + images.numFailed + ")");if (typeof options.complete === "function") {options.complete(images);}}}// TODO modify proxy to serve images with CORS enabled, where availablefunction proxyGetImage(url, img, imageObj) {var callback_name,scriptUrl = options.proxy,script;link.href = url;url = link.href; // work around for pages with base href="" set - WARNING: this may change the urlcallback_name = 'html2canvas_' + (count++);imageObj.callbackname = callback_name;if (scriptUrl.indexOf("?") > -1) {scriptUrl += "&";} else {scriptUrl += "?";}scriptUrl += 'url=' + encodeURIComponent(url) + '&callback=' + callback_name;script = doc.createElement("script");window[callback_name] = function (a) {if (a.substring(0, 6) === "error:") {imageObj.succeeded = false;images.numLoaded++;images.numFailed++;start();} else {setImageLoadHandlers(img, imageObj);img.src = a;}window[callback_name] = undefined; // to work with IE<9 // NOTE: that the undefined callback property-name still exists on the window object (for IE<9)try {delete window[callback_name]; // for all browser that support this} catch (ex) { }script.parentNode.removeChild(script);script = null;delete imageObj.script;delete imageObj.callbackname;};script.setAttribute("type", "text/javascript");script.setAttribute("src", scriptUrl);imageObj.script = script;window.document.body.appendChild(script);}function loadPseudoElement(element, type) {var style = window.getComputedStyle(element, type),content = style.content;if (content.substr(0, 3) === 'url') {methods.loadImage(_html2canvas.Util.parseBackgroundImage(content)[0].args[0]);}loadBackgroundImages(style.backgroundImage, element);}function loadPseudoElementImages(element) {loadPseudoElement(element, ":before");loadPseudoElement(element, ":after");}function loadGradientImage(backgroundImage, bounds) {var img = _html2canvas.Generate.Gradient(backgroundImage, bounds);if (img !== undefined) {images[backgroundImage] = {img: img,succeeded: true};images.numTotal++;images.numLoaded++;start();}}function invalidBackgrounds(background_image) {return (background_image && background_image.method && background_image.args && background_image.args.length > 0);}function loadBackgroundImages(background_image, el) {var bounds;_html2canvas.Util.parseBackgroundImage(background_image).filter(invalidBackgrounds).forEach(function (background_image) {if (background_image.method === 'url') {methods.loadImage(background_image.args[0]);} else if (background_image.method.match(/\-?gradient$/)) {if (bounds === undefined) {bounds = _html2canvas.Util.Bounds(el);}loadGradientImage(background_image.value, bounds);}});}function getImages(el) {var elNodeType = false;// Firefox fails with permission denied on pages with iframestry {Util.Children(el).forEach(getImages);}catch (e) { }try {elNodeType = el.nodeType;} catch (ex) {elNodeType = false;Util.log("html2canvas: failed to access some element's nodeType - Exception: " + ex.message);}if (elNodeType === 1 || elNodeType === undefined) {loadPseudoElementImages(el);try {loadBackgroundImages(Util.getCSS(el, 'backgroundImage'), el);} catch (e) {Util.log("html2canvas: failed to get background-image - Exception: " + e.message);}loadBackgroundImages(el);}}function setImageLoadHandlers(img, imageObj) {img.onload = function () {if (imageObj.timer !== undefined) {// CORS succeededwindow.clearTimeout(imageObj.timer);}images.numLoaded++;imageObj.succeeded = true;img.onerror = img.onload = null;start();};img.onerror = function () {if (img.crossOrigin === "anonymous") {// CORS failedwindow.clearTimeout(imageObj.timer);// let's try with proxy insteadif (options.proxy) {var src = img.src;img = new Image();imageObj.img = img;img.src = src;proxyGetImage(img.src, img, imageObj);return;}}images.numLoaded++;images.numFailed++;imageObj.succeeded = false;img.onerror = img.onload = null;start();};}methods = {loadImage: function (src) {var img, imageObj;if (src && images[src] === undefined) {img = new Image();if (src.match(/data:image\/.*;base64,/i)) {img.src = src.replace(/url\(['"]{0,}|['"]{0,}\)$/ig, '');imageObj = images[src] = {img: img};images.numTotal++;setImageLoadHandlers(img, imageObj);} else if (isSameOrigin(src) || options.allowTaint === true) {imageObj = images[src] = {img: img};images.numTotal++;setImageLoadHandlers(img, imageObj);img.src = src;} else if (supportCORS && !options.allowTaint && options.useCORS) {// attempt to load with CORSimg.crossOrigin = "anonymous";imageObj = images[src] = {img: img};images.numTotal++;setImageLoadHandlers(img, imageObj);img.src = src;} else if (options.proxy) {imageObj = images[src] = {img: img};images.numTotal++;proxyGetImage(src, img, imageObj);}}},cleanupDOM: function (cause) {var img, src;if (!images.cleanupDone) {if (cause && typeof cause === "string") {Util.log("html2canvas: Cleanup because: " + cause);} else {Util.log("html2canvas: Cleanup after timeout: " + options.timeout + " ms.");}for (src in images) {if (images.hasOwnProperty(src)) {img = images[src];if (typeof img === "object" && img.callbackname && img.succeeded === undefined) {// cancel proxy image requestwindow[img.callbackname] = undefined; // to work with IE<9 // NOTE: that the undefined callback property-name still exists on the window object (for IE<9)try {delete window[img.callbackname]; // for all browser that support this} catch (ex) { }if (img.script && img.script.parentNode) {img.script.setAttribute("src", "about:blank"); // try to cancel running requestimg.script.parentNode.removeChild(img.script);}images.numLoaded++;images.numFailed++;Util.log("html2canvas: Cleaned up failed img: '" + src + "' Steps: " + images.numLoaded + " / " + images.numTotal);}}}// cancel any pending requestsif (window.stop !== undefined) {window.stop();} else if (document.execCommand !== undefined) {document.execCommand("Stop", false);}if (document.close !== undefined) {document.close();}images.cleanupDone = true;if (!(cause && typeof cause === "string")) {start();}}},renderingDone: function () {if (timeoutTimer) {window.clearTimeout(timeoutTimer);}}};if (options.timeout > 0) {timeoutTimer = window.setTimeout(methods.cleanupDOM, options.timeout);}Util.log('html2canvas: Preload starts: finding background-images');images.firstRun = true;getImages(element);Util.log('html2canvas: Preload: Finding images');// load <img> imagesfor (i = 0; i < imgLen; i += 1) {methods.loadImage(domImages[i].getAttribute("src"));}images.firstRun = false;Util.log('html2canvas: Preload: Done.');if (images.numTotal === images.numLoaded) {start();}return methods;};_html2canvas.Renderer = function (parseQueue, options) {// http://www.w3.org/TR/CSS21/zindex.htmlfunction createRenderQueue(parseQueue) {var queue = [],rootContext;rootContext = (function buildStackingContext(rootNode) {var rootContext = {};function insert(context, node, specialParent) {var zi = (node.zIndex.zindex === 'auto') ? 0 : Number(node.zIndex.zindex),contextForChildren = context, // the stacking context for childrenisPositioned = node.zIndex.isPositioned,isFloated = node.zIndex.isFloated,stub = { node: node },childrenDest = specialParent; // where children without z-index should be pushed intoif (node.zIndex.ownStacking) {// '!' comes before numbers in sorted arraycontextForChildren = stub.context = { '!': [{ node: node, children: [] }] };childrenDest = undefined;} else if (isPositioned || isFloated) {childrenDest = stub.children = [];}if (zi === 0 && specialParent) {specialParent.push(stub);} else {if (!context[zi]) { context[zi] = []; }context[zi].push(stub);}node.zIndex.children.forEach(function (childNode) {insert(contextForChildren, childNode, childrenDest);});}insert(rootContext, rootNode);return rootContext;})(parseQueue);function sortZ(context) {Object.keys(context).sort().forEach(function (zi) {var nonPositioned = [],floated = [],positioned = [],list = [];// positioned after staticcontext[zi].forEach(function (v) {if (v.node.zIndex.isPositioned || v.node.zIndex.opacity < 1) {// http://www.w3.org/TR/css3-color/#transparency// non-positioned element with opactiy < 1 should be stacked as if it were a positioned element with ‘z-index: 0’ and ‘opacity: 1’.positioned.push(v);} else if (v.node.zIndex.isFloated) {floated.push(v);} else {nonPositioned.push(v);}});(function walk(arr) {arr.forEach(function (v) {list.push(v);if (v.children) { walk(v.children); }});})(nonPositioned.concat(floated, positioned));list.forEach(function (v) {if (v.context) {sortZ(v.context);} else {queue.push(v.node);}});});}sortZ(rootContext);return queue;}function getRenderer(rendererName) {var renderer;if (typeof options.renderer === "string" && _html2canvas.Renderer[rendererName] !== undefined) {renderer = _html2canvas.Renderer[rendererName](options);} else if (typeof rendererName === "function") {renderer = rendererName(options);} else {throw new Error("Unknown renderer");}if (typeof renderer !== "function") {throw new Error("Invalid renderer defined");}return renderer;}return getRenderer(options.renderer)(parseQueue, options, document, createRenderQueue(parseQueue.stack), _html2canvas);};_html2canvas.Util.Support = function (options, doc) {function supportSVGRendering() {var img = new Image(),canvas = doc.createElement("canvas"),ctx = (canvas.getContext === undefined) ? false : canvas.getContext("2d");if (ctx === false) {return false;}canvas.width = canvas.height = 10;img.src = ["data:image/svg+xml,","<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10'>","<foreignObject width='10' height='10'>","<div xmlns='http://www.w3.org/1999/xhtml' style='width:10;height:10;'>","sup","</div>","</foreignObject>","</svg>"].join("");try {ctx.drawImage(img, 0, 0);canvas.toDataURL();} catch (e) {return false;}_html2canvas.Util.log('html2canvas: Parse: SVG powered rendering available');return true;}// Test whether we can use ranges to measure bounding boxes// Opera doesn't provide valid bounds.height/bottom even though it supports the method.function supportRangeBounds() {var r, testElement, rangeBounds, rangeHeight, support = false;if (doc.createRange) {r = doc.createRange();if (r.getBoundingClientRect) {testElement = doc.createElement('boundtest');testElement.style.height = "123px";testElement.style.display = "block";doc.body.appendChild(testElement);r.selectNode(testElement);rangeBounds = r.getBoundingClientRect();rangeHeight = rangeBounds.height;if (rangeHeight === 123) {support = true;}doc.body.removeChild(testElement);}}return support;}return {rangeBounds: supportRangeBounds(),svgRendering: options.svgRendering && supportSVGRendering()};};window.html2canvas = function (elements, opts) {elements = (elements.length) ? elements : [elements];var queue,canvas,options = {// generallogging: false,elements: elements,background: "#fff",// preload optionsproxy: null,timeout: 0, // no timeoutuseCORS: false, // try to load images as CORS (where available), before falling back to proxyallowTaint: false, // whether to allow images to taint the canvas, won't need proxy if set to true// parse optionssvgRendering: false, // use svg powered rendering where available (FF11+)ignoreElements: "IFRAME|OBJECT|PARAM",useOverflow: true,letterRendering: false,chinese: false,// render optionswidth: null,height: null,taintTest: true, // do a taint test with all images before applying to canvasrenderer: "Canvas"};options = _html2canvas.Util.Extend(opts, options);_html2canvas.logging = options.logging;options.complete = function (images) {if (typeof options.onpreloaded === "function") {if (options.onpreloaded(images) === false) {return;}}queue = _html2canvas.Parse(images, options);if (typeof options.onparsed === "function") {if (options.onparsed(queue) === false) {return;}}canvas = _html2canvas.Renderer(queue, options);if (typeof options.onrendered === "function") {options.onrendered(canvas);}};// for pages without images, we still want this to be async, i.e. return methods before executingwindow.setTimeout(function () {_html2canvas.Preload(options);}, 0);return {render: function (queue, opts) {return _html2canvas.Renderer(queue, _html2canvas.Util.Extend(opts, options));},parse: function (images, opts) {return _html2canvas.Parse(images, _html2canvas.Util.Extend(opts, options));},preload: function (opts) {return _html2canvas.Preload(_html2canvas.Util.Extend(opts, options));},log: _html2canvas.Util.log};};window.html2canvas.log = _html2canvas.Util.log; // for rendererswindow.html2canvas.Renderer = {Canvas: undefined // We are assuming this will be used};_html2canvas.Renderer.Canvas = function (options) {options = options || {};var doc = document,safeImages = [],testCanvas = document.createElement("canvas"),testctx = testCanvas.getContext("2d"),Util = _html2canvas.Util,canvas = options.canvas || doc.createElement('canvas');function createShape(ctx, args) {ctx.beginPath();args.forEach(function (arg) {ctx[arg.name].apply(ctx, arg['arguments']);});ctx.closePath();}function safeImage(item) {if (safeImages.indexOf(item['arguments'][0].src) === -1) {testctx.drawImage(item['arguments'][0], 0, 0);try {testctx.getImageData(0, 0, 1, 1);} catch (e) {testCanvas = doc.createElement("canvas");testctx = testCanvas.getContext("2d");return false;}safeImages.push(item['arguments'][0].src);}return true;}function renderItem(ctx, item) {switch (item.type) {case "variable":ctx[item.name] = item['arguments'];break;case "function":switch (item.name) {case "createPattern":if (item['arguments'][0].width > 0 && item['arguments'][0].height > 0) {try {ctx.fillStyle = ctx.createPattern(item['arguments'][0], "repeat");}catch (e) {Util.log("html2canvas: Renderer: Error creating pattern", e.message);}}break;case "drawShape":createShape(ctx, item['arguments']);break;case "drawImage":if (item['arguments'][8] > 0 && item['arguments'][7] > 0) {if (!options.taintTest || (options.taintTest && safeImage(item))) {ctx.drawImage.apply(ctx, item['arguments']);}}break;default:ctx[item.name].apply(ctx, item['arguments']);}break;}}return function (parsedData, options, document, queue, _html2canvas) {var ctx = canvas.getContext("2d"),newCanvas,bounds,fstyle,zStack = parsedData.stack;canvas.width = canvas.style.width = options.width || zStack.ctx.width;canvas.height = canvas.style.height = options.height || zStack.ctx.height;fstyle = ctx.fillStyle;ctx.fillStyle = (Util.isTransparent(zStack.backgroundColor) && options.background !== undefined) ? options.background : parsedData.backgroundColor;ctx.fillRect(0, 0, canvas.width, canvas.height);ctx.fillStyle = fstyle;queue.forEach(function (storageContext) {// set common settings for canvasctx.textBaseline = "bottom";ctx.save();if (storageContext.transform.matrix) {ctx.translate(storageContext.transform.origin[0], storageContext.transform.origin[1]);ctx.transform.apply(ctx, storageContext.transform.matrix);ctx.translate(-storageContext.transform.origin[0], -storageContext.transform.origin[1]);}if (storageContext.clip) {ctx.beginPath();ctx.rect(storageContext.clip.left, storageContext.clip.top, storageContext.clip.width, storageContext.clip.height);ctx.clip();}if (storageContext.ctx.storage) {storageContext.ctx.storage.forEach(function (item) {renderItem(ctx, item);});}ctx.restore();});Util.log("html2canvas: Renderer: Canvas renderer done - returning canvas obj");if (options.elements.length === 1) {if (typeof options.elements[0] === "object" && options.elements[0].nodeName !== "BODY") {// crop image to the bounds of selected (single) elementbounds = _html2canvas.Util.Bounds(options.elements[0]);newCanvas = document.createElement('canvas');newCanvas.width = Math.ceil(bounds.width);newCanvas.height = Math.ceil(bounds.height);ctx = newCanvas.getContext("2d");ctx.drawImage(canvas, bounds.left, bounds.top, bounds.width, bounds.height, 0, 0, bounds.width, bounds.height);canvas = null;return newCanvas;}}return canvas;};}; })(window, document);



總結

以上是生活随笔為你收集整理的js html等比例放大后生成图片 html2canvas的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产疯狂伦交大片 | 精品乱码久久久久久久 | 久久亚洲a片com人成 | 扒开双腿吃奶呻吟做受视频 | 少妇无套内谢久久久久 | 亚洲性无码av中文字幕 | 免费国产黄网站在线观看 | 1000部夫妻午夜免费 | 亚洲精品一区国产 | 亚洲精品一区二区三区婷婷月 | 熟妇人妻无乱码中文字幕 | 日韩人妻无码中文字幕视频 | 亚洲日本在线电影 | 性色欲情网站iwww九文堂 | 亚洲中文字幕在线观看 | 永久免费观看美女裸体的网站 | 永久免费精品精品永久-夜色 | 亚洲综合精品香蕉久久网 | 夜先锋av资源网站 | 野狼第一精品社区 | 亚洲一区二区三区在线观看网站 | 中文无码精品a∨在线观看不卡 | 国产亚洲日韩欧美另类第八页 | 午夜嘿嘿嘿影院 | 麻豆精品国产精华精华液好用吗 | 亚洲精品久久久久avwww潮水 | 国产免费久久精品国产传媒 | 国产精品高潮呻吟av久久4虎 | 西西人体www44rt大胆高清 | 一本久道久久综合婷婷五月 | 99久久精品无码一区二区毛片 | 欧美日韩精品 | 无码人妻av免费一区二区三区 | 毛片内射-百度 | 强奷人妻日本中文字幕 | 性啪啪chinese东北女人 | 亚洲成a人片在线观看无码 | 无遮无挡爽爽免费视频 | 国产成人无码av在线影院 | 国产乱人偷精品人妻a片 | 在教室伦流澡到高潮hnp视频 | 精品人妻中文字幕有码在线 | 欧美 日韩 人妻 高清 中文 | 鲁一鲁av2019在线 | 无码毛片视频一区二区本码 | 国产精品欧美成人 | 亚洲中文字幕无码一久久区 | 欧美丰满少妇xxxx性 | 欧美怡红院免费全部视频 | 亚洲综合色区中文字幕 | 女人和拘做爰正片视频 | 免费看男女做好爽好硬视频 | 精品国精品国产自在久国产87 | 少女韩国电视剧在线观看完整 | 精品无码av一区二区三区 | 成人女人看片免费视频放人 | 欧美丰满老熟妇xxxxx性 | 好屌草这里只有精品 | 亚洲中文字幕在线无码一区二区 | 日日干夜夜干 | 国产精品办公室沙发 | 亚洲天堂2017无码中文 | 国产成人综合在线女婷五月99播放 | 亚洲精品一区二区三区在线观看 | 亚洲欧美日韩综合久久久 | 中文字幕乱码中文乱码51精品 | 中文字幕无码免费久久9一区9 | 人妻中文无码久热丝袜 | 欧美一区二区三区视频在线观看 | 午夜福利一区二区三区在线观看 | 99精品无人区乱码1区2区3区 | 久久这里只有精品视频9 | 性色欲网站人妻丰满中文久久不卡 | 在线 国产 欧美 亚洲 天堂 | 精品偷拍一区二区三区在线看 | 最新国产麻豆aⅴ精品无码 | 亚洲国产精品一区二区第一页 | 午夜福利试看120秒体验区 | 国产亚洲美女精品久久久2020 | 亚拍精品一区二区三区探花 | 兔费看少妇性l交大片免费 | 欧美人与动性行为视频 | 沈阳熟女露脸对白视频 | 国产成人精品优优av | 日本免费一区二区三区最新 | 欧美国产日韩久久mv | 精品人妻人人做人人爽夜夜爽 | 小sao货水好多真紧h无码视频 | 亚洲男人av香蕉爽爽爽爽 | 国产精品无码mv在线观看 | 国产av一区二区精品久久凹凸 | 2019nv天堂香蕉在线观看 | 亚洲精品一区二区三区婷婷月 | 国产精品免费大片 | 又黄又爽又色的视频 | 久久精品国产日本波多野结衣 | 国产精品久久久久久亚洲毛片 | 日本精品人妻无码77777 天堂一区人妻无码 | 色婷婷久久一区二区三区麻豆 | 亚洲日本va午夜在线电影 | 人妻aⅴ无码一区二区三区 | 亚洲第一无码av无码专区 | 国产成人无码av片在线观看不卡 | 亚拍精品一区二区三区探花 | 精品熟女少妇av免费观看 | 精品无码一区二区三区的天堂 | 国产无套粉嫩白浆在线 | 无码吃奶揉捏奶头高潮视频 | 熟女俱乐部五十路六十路av | 亚洲国产精品一区二区第一页 | 少妇愉情理伦片bd | 亚洲国产精品无码一区二区三区 | 亚洲日韩精品欧美一区二区 | 国产手机在线αⅴ片无码观看 | 精品一区二区三区波多野结衣 | 亚洲熟悉妇女xxx妇女av | 欧美第一黄网免费网站 | 美女毛片一区二区三区四区 | 18黄暴禁片在线观看 | 成人性做爰aaa片免费看不忠 | 清纯唯美经典一区二区 | 日韩少妇内射免费播放 | 亚洲国产精品成人久久蜜臀 | 亚洲天堂2017无码 | 骚片av蜜桃精品一区 | 国产真人无遮挡作爱免费视频 | 国产办公室秘书无码精品99 | 搡女人真爽免费视频大全 | 综合网日日天干夜夜久久 | 欧美黑人性暴力猛交喷水 | 久久精品国产精品国产精品污 | 国产精品内射视频免费 | 久久综合狠狠综合久久综合88 | 久久人妻内射无码一区三区 | aⅴ亚洲 日韩 色 图网站 播放 | 中文字幕亚洲情99在线 | 久久久久99精品国产片 | 东京热无码av男人的天堂 | 亚洲午夜福利在线观看 | 国产99久久精品一区二区 | 麻豆国产丝袜白领秘书在线观看 | 欧美国产亚洲日韩在线二区 | 免费无码av一区二区 | 亚洲人成网站色7799 | 人妻与老人中文字幕 | 天天av天天av天天透 | 亚洲日本一区二区三区在线 | 欧美三级a做爰在线观看 | 小泽玛莉亚一区二区视频在线 | 高中生自慰www网站 | 未满小14洗澡无码视频网站 | 亚洲爆乳无码专区 | 欧美日韩视频无码一区二区三 | 日本欧美一区二区三区乱码 | 国产精品自产拍在线观看 | 精品乱码久久久久久久 | 人妻中文无码久热丝袜 | 在线观看欧美一区二区三区 | 国产无套内射久久久国产 | 亚洲aⅴ无码成人网站国产app | 亚洲色偷偷男人的天堂 | 欧美精品在线观看 | 国产精品久久久久7777 | 无码午夜成人1000部免费视频 | 色综合久久久久综合一本到桃花网 | 国产熟女一区二区三区四区五区 | 蜜桃av抽搐高潮一区二区 | 精品一区二区三区波多野结衣 | 人人妻人人澡人人爽人人精品浪潮 | 国产成人无码午夜视频在线观看 | 精品国偷自产在线 | 3d动漫精品啪啪一区二区中 | 国产亚洲人成a在线v网站 | 98国产精品综合一区二区三区 | 日本精品少妇一区二区三区 | 日韩 欧美 动漫 国产 制服 | 国产亚洲美女精品久久久2020 | 国产精品亚洲综合色区韩国 | 牲欲强的熟妇农村老妇女 | 乱人伦中文视频在线观看 | 久久aⅴ免费观看 | 夜夜躁日日躁狠狠久久av | ass日本丰满熟妇pics | 亚洲 另类 在线 欧美 制服 | 欧洲美熟女乱又伦 | 国产三级精品三级男人的天堂 | 少妇人妻偷人精品无码视频 | 亚洲精品久久久久中文第一幕 | 天海翼激烈高潮到腰振不止 | 欧美成人高清在线播放 | 中文亚洲成a人片在线观看 | 国产无遮挡又黄又爽免费视频 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 中文字幕无码人妻少妇免费 | 精品一区二区三区波多野结衣 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 少妇性l交大片欧洲热妇乱xxx | 国产精品久久国产精品99 | 又大又黄又粗又爽的免费视频 | 亚洲国产精品成人久久蜜臀 | 国产手机在线αⅴ片无码观看 | 理论片87福利理论电影 | 中文亚洲成a人片在线观看 | 波多野结衣aⅴ在线 | 激情人妻另类人妻伦 | 国产人妻久久精品二区三区老狼 | 免费乱码人妻系列无码专区 | 丰满人妻被黑人猛烈进入 | 一二三四在线观看免费视频 | 亚洲综合在线一区二区三区 | 国产日产欧产精品精品app | 粗大的内捧猛烈进出视频 | 精品亚洲成av人在线观看 | 暴力强奷在线播放无码 | 国产成人无码午夜视频在线观看 | 国产免费久久久久久无码 | 成人免费视频在线观看 | 又色又爽又黄的美女裸体网站 | 国产成人人人97超碰超爽8 | 少妇厨房愉情理9仑片视频 | 麻豆av传媒蜜桃天美传媒 | 在线精品国产一区二区三区 | 狠狠综合久久久久综合网 | 99视频精品全部免费免费观看 | 国产在线精品一区二区高清不卡 | 亚洲日韩av一区二区三区中文 | 一本一道久久综合久久 | 日本一卡2卡3卡四卡精品网站 | 亚洲码国产精品高潮在线 | 女人被爽到呻吟gif动态图视看 | а天堂中文在线官网 | 国产av一区二区三区最新精品 | 国产综合色产在线精品 | 性色欲情网站iwww九文堂 | 久久久无码中文字幕久... | 亚洲色无码一区二区三区 | 99久久久无码国产aaa精品 | 亚洲欧美国产精品专区久久 | 性生交大片免费看女人按摩摩 | 国产成人精品三级麻豆 | 日韩精品无码一区二区中文字幕 | 亚洲综合色区中文字幕 | 欧美色就是色 | aⅴ在线视频男人的天堂 | 国产三级久久久精品麻豆三级 | 亚洲人成影院在线无码按摩店 | 帮老师解开蕾丝奶罩吸乳网站 | 国产人妻久久精品二区三区老狼 | 久久人人97超碰a片精品 | 女高中生第一次破苞av | 亚洲日本一区二区三区在线 | 熟妇女人妻丰满少妇中文字幕 | 男女性色大片免费网站 | 中文字幕无码av波多野吉衣 | 日韩人妻无码一区二区三区久久99 | 中文字幕乱码人妻二区三区 | 色欲久久久天天天综合网精品 | 亚洲国产欧美日韩精品一区二区三区 | 学生妹亚洲一区二区 | 正在播放东北夫妻内射 | 国产网红无码精品视频 | 国产精品18久久久久久麻辣 | 日韩av无码一区二区三区 | 国产精品va在线观看无码 | 免费人成在线视频无码 | 色综合久久久无码中文字幕 | 亚洲欧洲中文日韩av乱码 | 国产亚洲精品久久久久久大师 | 狠狠色噜噜狠狠狠狠7777米奇 | 特黄特色大片免费播放器图片 | 欧美成人午夜精品久久久 | √天堂资源地址中文在线 | 装睡被陌生人摸出水好爽 | 永久免费观看国产裸体美女 | 国产午夜手机精彩视频 | 国产精品久久久久久亚洲影视内衣 | 最近的中文字幕在线看视频 | 免费人成网站视频在线观看 | 激情五月综合色婷婷一区二区 | 在线观看免费人成视频 | 樱花草在线社区www | 人人澡人人妻人人爽人人蜜桃 | 亚洲一区二区三区无码久久 | 国产在线aaa片一区二区99 | 亚洲国产精品无码久久久久高潮 | 日韩欧美成人免费观看 | 国产后入清纯学生妹 | 亚洲色欲色欲欲www在线 | 美女扒开屁股让男人桶 | 97精品人妻一区二区三区香蕉 | 亚洲色无码一区二区三区 | 粉嫩少妇内射浓精videos | 性啪啪chinese东北女人 | 日韩成人一区二区三区在线观看 | 欧美成人午夜精品久久久 | 久久久无码中文字幕久... | 熟女俱乐部五十路六十路av | 蜜桃视频韩日免费播放 | 免费国产黄网站在线观看 | 成年美女黄网站色大免费视频 | 久久久久免费精品国产 | 国产做国产爱免费视频 | 成在人线av无码免观看麻豆 | 日日摸日日碰夜夜爽av | 性欧美videos高清精品 | 亚洲综合无码久久精品综合 | 99在线 | 亚洲 | 最近的中文字幕在线看视频 | 亚洲精品一区二区三区大桥未久 | 一本大道伊人av久久综合 | 色婷婷久久一区二区三区麻豆 | 人妻少妇精品视频专区 | 西西人体www44rt大胆高清 | 国产激情无码一区二区 | 亚洲精品一区二区三区在线 | 日本乱人伦片中文三区 | 高清国产亚洲精品自在久久 | 麻豆精品国产精华精华液好用吗 | 少妇无码一区二区二三区 | 丰满护士巨好爽好大乳 | 亚洲熟妇色xxxxx欧美老妇y | 亚洲高清偷拍一区二区三区 | 97夜夜澡人人双人人人喊 | 中文字幕亚洲情99在线 | 无码人妻精品一区二区三区不卡 | 国产欧美熟妇另类久久久 | 国产莉萝无码av在线播放 | 国产精品无码久久av | 国产精品igao视频网 | 99久久人妻精品免费二区 | 亚洲s色大片在线观看 | 久久精品国产99精品亚洲 | 欧美黑人乱大交 | 精品亚洲成av人在线观看 | 免费无码肉片在线观看 | 亚洲色欲色欲天天天www | 领导边摸边吃奶边做爽在线观看 | 久久国产精品二国产精品 | 国产精品久久国产精品99 | 少妇被黑人到高潮喷出白浆 | 2020久久香蕉国产线看观看 | 国产69精品久久久久app下载 | 老熟女重囗味hdxx69 | 99在线 | 亚洲 | 久久综合给久久狠狠97色 | 亚洲人成无码网www | 成人无码精品一区二区三区 | 丰满肥臀大屁股熟妇激情视频 | 中文字幕乱码亚洲无线三区 | 亚洲综合伊人久久大杳蕉 | 久久综合九色综合97网 | 亚洲国产av美女网站 | 欧美一区二区三区视频在线观看 | 国产两女互慰高潮视频在线观看 | 国产亚洲视频中文字幕97精品 | 亚洲区小说区激情区图片区 | 国产精品久久久久久亚洲影视内衣 | 国产成人精品久久亚洲高清不卡 | 亚洲人成网站在线播放942 | 色婷婷综合激情综在线播放 | 亚洲欧美色中文字幕在线 | 色噜噜亚洲男人的天堂 | 99re在线播放 | 国产极品美女高潮无套在线观看 | 麻豆果冻传媒2021精品传媒一区下载 | 日本丰满熟妇videos | 免费人成在线观看网站 | 成年美女黄网站色大免费全看 | 国产高潮视频在线观看 | 六月丁香婷婷色狠狠久久 | 学生妹亚洲一区二区 | 激情内射亚州一区二区三区爱妻 | 久久午夜夜伦鲁鲁片无码免费 | 国产乱人伦偷精品视频 | 扒开双腿吃奶呻吟做受视频 | 亚洲精品国产精品乱码不卡 | 中文字幕无码免费久久99 | 97资源共享在线视频 | 中文字幕亚洲情99在线 | 狠狠亚洲超碰狼人久久 | 国产亚洲精品久久久久久久久动漫 | 人妻少妇被猛烈进入中文字幕 | 亚洲理论电影在线观看 | 久久精品女人天堂av免费观看 | 麻豆精品国产精华精华液好用吗 | 成人欧美一区二区三区黑人免费 | 亚洲人成网站在线播放942 | 国产色xx群视频射精 | 扒开双腿疯狂进出爽爽爽视频 | 久久99精品久久久久久 | 内射爽无广熟女亚洲 | 秋霞成人午夜鲁丝一区二区三区 | 亚洲 高清 成人 动漫 | 欧洲精品码一区二区三区免费看 | 亚洲色欲色欲欲www在线 | 55夜色66夜色国产精品视频 | 久久www免费人成人片 | 两性色午夜视频免费播放 | 狠狠综合久久久久综合网 | 欧美精品免费观看二区 | 天堂在线观看www | 人妻无码αv中文字幕久久琪琪布 | 国产99久久精品一区二区 | 亚洲の无码国产の无码步美 | 人人妻人人藻人人爽欧美一区 | 国产av一区二区精品久久凹凸 | 日日摸天天摸爽爽狠狠97 | 亚洲a无码综合a国产av中文 | 亚洲码国产精品高潮在线 | 高中生自慰www网站 | 精品无人国产偷自产在线 | 久久99精品国产.久久久久 | 国产真实伦对白全集 | 精品无码一区二区三区爱欲 | 3d动漫精品啪啪一区二区中 | 中文字幕无码av波多野吉衣 | 亚洲一区二区三区偷拍女厕 | 久久精品国产亚洲精品 | 久久天天躁夜夜躁狠狠 | 性生交大片免费看女人按摩摩 | 高清国产亚洲精品自在久久 | 18精品久久久无码午夜福利 | 亚洲精品一区二区三区婷婷月 | 小sao货水好多真紧h无码视频 | 免费播放一区二区三区 | 蜜臀av无码人妻精品 | 大地资源中文第3页 | 自拍偷自拍亚洲精品10p | 大屁股大乳丰满人妻 | 亚洲精品成a人在线观看 | 国产亚洲日韩欧美另类第八页 | 中国女人内谢69xxxxxa片 | 欧美第一黄网免费网站 | 曰韩无码二三区中文字幕 | 日本护士xxxxhd少妇 | 久青草影院在线观看国产 | 国产精品高潮呻吟av久久 | 熟妇人妻中文av无码 | 六十路熟妇乱子伦 | 对白脏话肉麻粗话av | 国产成人精品久久亚洲高清不卡 | 国产午夜精品一区二区三区嫩草 | 小鲜肉自慰网站xnxx | 色婷婷av一区二区三区之红樱桃 | 天天av天天av天天透 | 久久熟妇人妻午夜寂寞影院 | 国产9 9在线 | 中文 | 欧美日韩亚洲国产精品 | 亚洲精品国产精品乱码不卡 | 亚洲阿v天堂在线 | 日本高清一区免费中文视频 | 精品欧美一区二区三区久久久 | 欧美日韩人成综合在线播放 | 麻豆人妻少妇精品无码专区 | 国产午夜手机精彩视频 | 日产精品99久久久久久 | 精品国产国产综合精品 | 久久综合网欧美色妞网 | 中文字幕人妻丝袜二区 | 乱码av麻豆丝袜熟女系列 | 学生妹亚洲一区二区 | 亚洲国产av精品一区二区蜜芽 | 99麻豆久久久国产精品免费 | 欧美大屁股xxxxhd黑色 | 中文字幕亚洲情99在线 | 亚洲欧美综合区丁香五月小说 | 精品久久综合1区2区3区激情 | 蜜臀aⅴ国产精品久久久国产老师 | 色老头在线一区二区三区 | 久久亚洲精品中文字幕无男同 | 中文字幕人妻无码一夲道 | v一区无码内射国产 | 国产麻豆精品精东影业av网站 | av无码久久久久不卡免费网站 | 国产精品无码一区二区桃花视频 | 中文字幕乱码人妻二区三区 | 欧美激情一区二区三区成人 | 色婷婷久久一区二区三区麻豆 | 300部国产真实乱 | 国产精品毛片一区二区 | 国产精品久久久久久久影院 | 国产莉萝无码av在线播放 | 日本饥渴人妻欲求不满 | 性做久久久久久久久 | 九九久久精品国产免费看小说 | 国产亚洲精品久久久ai换 | 精品熟女少妇av免费观看 | 永久免费观看美女裸体的网站 | 亚洲精品一区二区三区在线 | 欧美性生交xxxxx久久久 | 成人精品一区二区三区中文字幕 | 久久久久久久人妻无码中文字幕爆 | 男女超爽视频免费播放 | 国产亚洲精品久久久久久久久动漫 | 最近的中文字幕在线看视频 | 国产欧美精品一区二区三区 | ass日本丰满熟妇pics | 亚洲 日韩 欧美 成人 在线观看 | 在线а√天堂中文官网 | 色狠狠av一区二区三区 | 无套内谢的新婚少妇国语播放 | 国产精品高潮呻吟av久久4虎 | 男人的天堂av网站 | 国产性生大片免费观看性 | 亚洲精品一区三区三区在线观看 | 亚洲国产欧美日韩精品一区二区三区 | 大地资源网第二页免费观看 | 国产麻豆精品精东影业av网站 | 亚洲经典千人经典日产 | 99视频精品全部免费免费观看 | 久久久久久久久888 | 久久精品一区二区三区四区 | 精品国产一区二区三区四区在线看 | 荫蒂添的好舒服视频囗交 | 狠狠色丁香久久婷婷综合五月 | 日日夜夜撸啊撸 | 亚洲精品一区二区三区婷婷月 | 丰满人妻翻云覆雨呻吟视频 | 色综合天天综合狠狠爱 | 狂野欧美性猛xxxx乱大交 | 欧美丰满老熟妇xxxxx性 | 夜夜高潮次次欢爽av女 | 亚洲精品国产精品乱码视色 | 亚洲热妇无码av在线播放 | 大肉大捧一进一出视频出来呀 | 两性色午夜视频免费播放 | 亚洲综合伊人久久大杳蕉 | 亚洲中文字幕va福利 | 欧美一区二区三区视频在线观看 | 人人妻人人澡人人爽人人精品 | 香蕉久久久久久av成人 | 亚洲欧洲日本无在线码 | 日韩亚洲欧美中文高清在线 | 日日麻批免费40分钟无码 | 午夜精品久久久内射近拍高清 | 国产在线精品一区二区三区直播 | 国产国产精品人在线视 | 亚洲中文字幕成人无码 | 免费人成在线视频无码 | 国产精品人妻一区二区三区四 | 人人爽人人澡人人高潮 | 毛片内射-百度 | 亚洲自偷精品视频自拍 | 亚洲精品国产a久久久久久 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产精品亚洲专区无码不卡 | 日日摸日日碰夜夜爽av | 欧美黑人乱大交 | 人妻aⅴ无码一区二区三区 | 国产成人久久精品流白浆 | 亚洲欧美日韩综合久久久 | 粉嫩少妇内射浓精videos | 国产精品内射视频免费 | 奇米影视888欧美在线观看 | 一个人看的www免费视频在线观看 | 色一情一乱一伦一区二区三欧美 | 久久久婷婷五月亚洲97号色 | 欧美老妇交乱视频在线观看 | 久久国产精品_国产精品 | 久久五月精品中文字幕 | 久久久久免费精品国产 | 国产精品久久久久久久9999 | 亚洲另类伦春色综合小说 | 亚洲最大成人网站 | 欧美国产日韩亚洲中文 | 国产sm调教视频在线观看 | 午夜福利不卡在线视频 | 2020最新国产自产精品 | av小次郎收藏 | 理论片87福利理论电影 | 曰本女人与公拘交酡免费视频 | 最近的中文字幕在线看视频 | 亚洲自偷自偷在线制服 | 亚洲精品国产a久久久久久 | 蜜桃视频插满18在线观看 | 久久久精品欧美一区二区免费 | 成人免费视频在线观看 | 久久久国产一区二区三区 | 又大又硬又爽免费视频 | 熟妇女人妻丰满少妇中文字幕 | 成在人线av无码免观看麻豆 | 波多野结衣av在线观看 | 色婷婷av一区二区三区之红樱桃 | 国产精品久久久久影院嫩草 | 中文字幕 人妻熟女 | 日本大香伊一区二区三区 | 久久精品中文字幕一区 | 国产做国产爱免费视频 | 永久免费观看国产裸体美女 | 亚洲精品午夜无码电影网 | 欧洲vodafone精品性 | 啦啦啦www在线观看免费视频 | 欧美日韩一区二区综合 | 无码毛片视频一区二区本码 | 国产精品美女久久久网av | 久久午夜夜伦鲁鲁片无码免费 | 亚无码乱人伦一区二区 | 7777奇米四色成人眼影 | 亚洲精品国产a久久久久久 | 国产激情一区二区三区 | 亚洲国产av精品一区二区蜜芽 | 无码播放一区二区三区 | 天堂久久天堂av色综合 | 夜夜夜高潮夜夜爽夜夜爰爰 | 成人影院yy111111在线观看 | 国产口爆吞精在线视频 | 午夜成人1000部免费视频 | 99精品国产综合久久久久五月天 | 精品夜夜澡人妻无码av蜜桃 | 国产午夜精品一区二区三区嫩草 | 中文字幕无码人妻少妇免费 | 久久精品中文字幕大胸 | 久久精品视频在线看15 | 亚洲熟妇自偷自拍另类 | 亚洲精品午夜国产va久久成人 | 国产舌乚八伦偷品w中 | 精品久久久中文字幕人妻 | 99视频精品全部免费免费观看 | 久久亚洲精品成人无码 | 中文字幕日韩精品一区二区三区 | 久久精品国产日本波多野结衣 | 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲色在线无码国产精品不卡 | 中文精品久久久久人妻不卡 | 中国女人内谢69xxxxxa片 | 日本熟妇大屁股人妻 | 国产精品va在线观看无码 | 欧美人与禽猛交狂配 | 国产成人无码a区在线观看视频app | 亚洲精品久久久久久一区二区 | v一区无码内射国产 | 成人亚洲精品久久久久 | 亚洲国产精品久久久天堂 | 国产偷自视频区视频 | 双乳奶水饱满少妇呻吟 | 人妻插b视频一区二区三区 | 国产人妻精品一区二区三区不卡 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 国产人妻大战黑人第1集 | 香蕉久久久久久av成人 | 国产精品无码一区二区桃花视频 | 亚洲熟女一区二区三区 | 奇米影视888欧美在线观看 | 亚洲日韩av一区二区三区四区 | 97色伦图片97综合影院 | 7777奇米四色成人眼影 | 中文字幕人妻无码一区二区三区 | 无码任你躁久久久久久久 | a国产一区二区免费入口 | 久久zyz资源站无码中文动漫 | 国产色xx群视频射精 | 成人免费视频视频在线观看 免费 | 中文字幕 人妻熟女 | 97精品人妻一区二区三区香蕉 | 妺妺窝人体色www在线小说 | 精品夜夜澡人妻无码av蜜桃 | 色妞www精品免费视频 | 成人欧美一区二区三区黑人免费 | 亚洲色无码一区二区三区 | 网友自拍区视频精品 | 国内精品九九久久久精品 | 免费无码肉片在线观看 | 午夜福利不卡在线视频 | 亚洲另类伦春色综合小说 | 国产精品久久久久久久影院 | 精品无码一区二区三区爱欲 | 午夜熟女插插xx免费视频 | 国产精品-区区久久久狼 | 久久精品国产99精品亚洲 | 日日碰狠狠丁香久燥 | 国产情侣作爱视频免费观看 | 一本无码人妻在中文字幕免费 | 在教室伦流澡到高潮hnp视频 | 亚洲s码欧洲m码国产av | 中文字幕无码日韩欧毛 | 欧美人与善在线com | 亚洲爆乳无码专区 | 99在线 | 亚洲 | 日本精品少妇一区二区三区 | 亚洲色大成网站www | 欧美精品在线观看 | 久久国产精品二国产精品 | 97夜夜澡人人双人人人喊 | 国产无遮挡又黄又爽免费视频 | 国内精品久久久久久中文字幕 | 亚洲热妇无码av在线播放 | 亚洲国产精品久久人人爱 | 人妻夜夜爽天天爽三区 | 欧美第一黄网免费网站 | 一本一道久久综合久久 | 亚洲中文字幕成人无码 | 亚洲成a人片在线观看无码 | 图片区 小说区 区 亚洲五月 | 乱人伦中文视频在线观看 | 亚洲成a人片在线观看无码3d | 欧美乱妇无乱码大黄a片 | 久久精品国产99精品亚洲 | 日本熟妇人妻xxxxx人hd | 国产麻豆精品一区二区三区v视界 | 久久99精品久久久久久动态图 | 领导边摸边吃奶边做爽在线观看 | 国产精品毛多多水多 | 九九久久精品国产免费看小说 | 国精产品一品二品国精品69xx | 久久久无码中文字幕久... | 亚洲国产一区二区三区在线观看 | 国产成人无码区免费内射一片色欲 | 中文字幕亚洲情99在线 | 国产午夜亚洲精品不卡下载 | 日韩少妇内射免费播放 | 奇米影视888欧美在线观看 | 久久综合九色综合97网 | 国产做国产爱免费视频 | 午夜免费福利小电影 | 亚洲国产欧美国产综合一区 | 久久综合给合久久狠狠狠97色 | 亚洲男人av香蕉爽爽爽爽 | 亚洲成a人一区二区三区 | 国产av一区二区三区最新精品 | 东北女人啪啪对白 | 日本精品人妻无码77777 天堂一区人妻无码 | 色综合天天综合狠狠爱 | 成人精品视频一区二区三区尤物 | 乱码午夜-极国产极内射 | 久久午夜夜伦鲁鲁片无码免费 | 国产精品沙发午睡系列 | 欧美日本免费一区二区三区 | 久久久久久久久888 | 老子影院午夜伦不卡 | 日韩欧美中文字幕在线三区 | 99精品无人区乱码1区2区3区 | 国产精品a成v人在线播放 | 免费人成网站视频在线观看 | 国产精品久久久一区二区三区 | 国产一区二区三区四区五区加勒比 | 久久久久久九九精品久 | 亚洲国产精品无码久久久久高潮 | 蜜桃臀无码内射一区二区三区 | 丰满少妇熟乱xxxxx视频 | 精品一二三区久久aaa片 | 国产精品爱久久久久久久 | 亚洲精品鲁一鲁一区二区三区 | 国产办公室秘书无码精品99 | 动漫av网站免费观看 | 亚洲精品久久久久久一区二区 | 国产无遮挡又黄又爽又色 | 久久亚洲日韩精品一区二区三区 | 国产av久久久久精东av | 亚洲精品午夜国产va久久成人 | 精品一二三区久久aaa片 | 99视频精品全部免费免费观看 | 无码国产色欲xxxxx视频 | 国产午夜精品一区二区三区嫩草 | 欧美 日韩 人妻 高清 中文 | 日本xxxx色视频在线观看免费 | 国产亚洲欧美在线专区 | 亚洲综合久久一区二区 | 动漫av网站免费观看 | 亚洲中文字幕va福利 | 国产乱子伦视频在线播放 | 精品无码国产一区二区三区av | 无遮无挡爽爽免费视频 | 内射巨臀欧美在线视频 | 精品国产一区二区三区四区 | 国产精品免费大片 | 久久久婷婷五月亚洲97号色 | 好爽又高潮了毛片免费下载 | 精品成在人线av无码免费看 | 国产精品va在线观看无码 | 亚洲精品国产品国语在线观看 | 无码播放一区二区三区 | 国精品人妻无码一区二区三区蜜柚 | 国产精品久久精品三级 | 爱做久久久久久 | 国产免费久久精品国产传媒 | 中文亚洲成a人片在线观看 | 国产亚av手机在线观看 | www成人国产高清内射 | 国产精品高潮呻吟av久久4虎 | 日本又色又爽又黄的a片18禁 | 精品无码一区二区三区的天堂 | 亚洲国产精品一区二区美利坚 | 免费人成网站视频在线观看 | 日日摸天天摸爽爽狠狠97 | 国产莉萝无码av在线播放 | 2020久久超碰国产精品最新 | 三上悠亚人妻中文字幕在线 | 国产激情精品一区二区三区 | 欧美精品一区二区精品久久 | 精品亚洲韩国一区二区三区 | 风流少妇按摩来高潮 | 日本一区二区更新不卡 | 无码一区二区三区在线 | 久久久久亚洲精品男人的天堂 | 强伦人妻一区二区三区视频18 | 国产精品久久久久影院嫩草 | 4hu四虎永久在线观看 | 国内丰满熟女出轨videos | 青青久在线视频免费观看 | 色五月丁香五月综合五月 | 国产明星裸体无码xxxx视频 | 色一情一乱一伦一视频免费看 | 综合网日日天干夜夜久久 | 中文字幕人妻无码一区二区三区 | 久久精品国产99久久6动漫 | 国产精品嫩草久久久久 | 国产色精品久久人妻 | 亚洲春色在线视频 | 久久99热只有频精品8 | 一本无码人妻在中文字幕免费 | 人人爽人人澡人人高潮 | 成人免费视频视频在线观看 免费 | 香港三级日本三级妇三级 | 亚洲欧洲中文日韩av乱码 | 人妻少妇被猛烈进入中文字幕 | 精品一区二区三区波多野结衣 | 久久午夜无码鲁丝片秋霞 | 亚洲乱亚洲乱妇50p | 久久99精品久久久久婷婷 | 久久国产精品_国产精品 | 日日天日日夜日日摸 | 国产九九九九九九九a片 | 欧美 丝袜 自拍 制服 另类 | 亚洲中文字幕乱码av波多ji | 亚洲色在线无码国产精品不卡 | 牲欲强的熟妇农村老妇女视频 | 99久久人妻精品免费二区 | 四虎国产精品免费久久 | 国产精品无码永久免费888 | 久久久成人毛片无码 | 国产亚洲精品久久久久久大师 | 最近的中文字幕在线看视频 | 强辱丰满人妻hd中文字幕 | 欧美一区二区三区视频在线观看 | 狠狠色噜噜狠狠狠7777奇米 | 97久久国产亚洲精品超碰热 | 男女下面进入的视频免费午夜 | 亚洲成av人综合在线观看 | 国产成人综合美国十次 | 国产亚洲精品精品国产亚洲综合 | 国产亚洲人成a在线v网站 | 99久久精品无码一区二区毛片 | 377p欧洲日本亚洲大胆 | 国产精品久久久一区二区三区 | 亚洲国产一区二区三区在线观看 | 狠狠噜狠狠狠狠丁香五月 | 婷婷五月综合激情中文字幕 | 岛国片人妻三上悠亚 | 亚洲中文无码av永久不收费 | 亚洲另类伦春色综合小说 | 国产精品第一国产精品 | 大乳丰满人妻中文字幕日本 | 噜噜噜亚洲色成人网站 | 清纯唯美经典一区二区 | 亚洲成av人片天堂网无码】 | 娇妻被黑人粗大高潮白浆 | 国精品人妻无码一区二区三区蜜柚 | 午夜精品一区二区三区的区别 | 欧美丰满老熟妇xxxxx性 | 久久www免费人成人片 | 日韩在线不卡免费视频一区 | 成人免费视频视频在线观看 免费 | 国产精品久久久一区二区三区 | 欧美精品无码一区二区三区 | 男女作爱免费网站 | 久久久久久久女国产乱让韩 | 亚洲无人区一区二区三区 | 亚洲小说图区综合在线 | 国产色精品久久人妻 | 少妇一晚三次一区二区三区 | 色 综合 欧美 亚洲 国产 | 成人影院yy111111在线观看 | а√资源新版在线天堂 | 美女毛片一区二区三区四区 | 国产乱人无码伦av在线a | 国产综合久久久久鬼色 | 最新国产乱人伦偷精品免费网站 | 国产凸凹视频一区二区 | 久精品国产欧美亚洲色aⅴ大片 | 午夜精品久久久久久久 | 亚洲综合伊人久久大杳蕉 | 国产精品鲁鲁鲁 | 丰满少妇人妻久久久久久 | 精品国产精品久久一区免费式 | 内射老妇bbwx0c0ck | 久久视频在线观看精品 | 中文字幕无码日韩专区 | 久久精品中文字幕大胸 | 国产亚洲视频中文字幕97精品 | 久青草影院在线观看国产 | 精品无码一区二区三区的天堂 | 人人澡人人妻人人爽人人蜜桃 | 久久久精品成人免费观看 | 精品人妻人人做人人爽夜夜爽 | 国产绳艺sm调教室论坛 | 天天摸天天透天天添 | √8天堂资源地址中文在线 | 亚洲 a v无 码免 费 成 人 a v | 欧美国产日产一区二区 | 久久久久久亚洲精品a片成人 | 人妻尝试又大又粗久久 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产真人无遮挡作爱免费视频 | 熟女少妇人妻中文字幕 | 18黄暴禁片在线观看 | 成人毛片一区二区 | 精品一区二区三区波多野结衣 | 老熟女重囗味hdxx69 | 国产综合在线观看 | 亚洲国产午夜精品理论片 | 任你躁在线精品免费 | 99久久99久久免费精品蜜桃 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲国产成人av在线观看 | 无码午夜成人1000部免费视频 | 久久亚洲日韩精品一区二区三区 | 国产三级精品三级男人的天堂 | 1000部夫妻午夜免费 | 久久国语露脸国产精品电影 | 亚洲 日韩 欧美 成人 在线观看 | 狂野欧美性猛xxxx乱大交 | 强开小婷嫩苞又嫩又紧视频 | 国产三级精品三级男人的天堂 | 久久这里只有精品视频9 | 国产精品久久久久无码av色戒 | 初尝人妻少妇中文字幕 | 亚洲 a v无 码免 费 成 人 a v | 人妻中文无码久热丝袜 | 亚洲 激情 小说 另类 欧美 | 欧美人与物videos另类 | 中文字幕中文有码在线 | 小泽玛莉亚一区二区视频在线 | 欧美大屁股xxxxhd黑色 | 精品偷拍一区二区三区在线看 | 欧美人妻一区二区三区 | a片免费视频在线观看 | 中文精品久久久久人妻不卡 | 精品成人av一区二区三区 | 欧美人与物videos另类 | 久9re热视频这里只有精品 | 国产亚洲美女精品久久久2020 | 久久午夜无码鲁丝片秋霞 | 人妻人人添人妻人人爱 | 性色欲情网站iwww九文堂 | 国产尤物精品视频 | 国产一区二区不卡老阿姨 | 亚洲精品一区二区三区大桥未久 | 亚洲精品中文字幕久久久久 | 粗大的内捧猛烈进出视频 | aⅴ在线视频男人的天堂 | 99精品视频在线观看免费 | 欧美阿v高清资源不卡在线播放 | 欧美人与禽猛交狂配 | 国产精品对白交换视频 | 中文精品久久久久人妻不卡 | 日产精品高潮呻吟av久久 | 欧美精品在线观看 | 色婷婷av一区二区三区之红樱桃 | 亚洲精品国产精品乱码视色 | 亚洲第一网站男人都懂 | 国产亲子乱弄免费视频 | 精品久久久无码中文字幕 | 99久久99久久免费精品蜜桃 | 久久综合九色综合欧美狠狠 | 日产精品99久久久久久 | 国产欧美精品一区二区三区 | 乱人伦人妻中文字幕无码久久网 | 欧美zoozzooz性欧美 | 精品国产麻豆免费人成网站 | 日日天干夜夜狠狠爱 | 亚洲啪av永久无码精品放毛片 | 国产精品a成v人在线播放 | 国产两女互慰高潮视频在线观看 | a片免费视频在线观看 | 黑人玩弄人妻中文在线 | 领导边摸边吃奶边做爽在线观看 | 性史性农村dvd毛片 | 无码人妻久久一区二区三区不卡 | 亚洲成a人片在线观看无码3d | 国产精品久久久久久亚洲影视内衣 | 欧美怡红院免费全部视频 | 精品国产成人一区二区三区 | 99视频精品全部免费免费观看 | 亚洲欧美色中文字幕在线 | 日本www一道久久久免费榴莲 | 国内揄拍国内精品人妻 | 永久免费精品精品永久-夜色 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 玩弄少妇高潮ⅹxxxyw | 亚洲精品一区二区三区婷婷月 | 老太婆性杂交欧美肥老太 | 波多野结衣av一区二区全免费观看 | 国产成人精品无码播放 | 国产97人人超碰caoprom | 久久久久免费看成人影片 | 99久久99久久免费精品蜜桃 | 色综合久久久无码中文字幕 | 欧美 丝袜 自拍 制服 另类 | 麻豆国产人妻欲求不满谁演的 | 色五月五月丁香亚洲综合网 | 久久99热只有频精品8 | 日韩精品无码一本二本三本色 | 久久精品一区二区三区四区 | 暴力强奷在线播放无码 | 国精产品一品二品国精品69xx | 1000部啪啪未满十八勿入下载 | 成人免费视频视频在线观看 免费 | 最新国产乱人伦偷精品免费网站 | 高清国产亚洲精品自在久久 | 最近免费中文字幕中文高清百度 | 欧美精品无码一区二区三区 | 一本久久伊人热热精品中文字幕 | 色五月五月丁香亚洲综合网 | 亚洲综合伊人久久大杳蕉 | 人人妻人人澡人人爽人人精品浪潮 | 亚无码乱人伦一区二区 | 少妇厨房愉情理9仑片视频 | 亚洲中文字幕在线无码一区二区 | 国产办公室秘书无码精品99 | 欧美日韩精品 | 丝袜美腿亚洲一区二区 | 中文字幕av无码一区二区三区电影 | 久久久久99精品国产片 | 亚洲精品一区三区三区在线观看 | 欧美日韩在线亚洲综合国产人 | 日本精品少妇一区二区三区 | 国产无遮挡吃胸膜奶免费看 | 亚洲春色在线视频 | 男人的天堂av网站 | 色欲综合久久中文字幕网 | 国产精品无码一区二区三区不卡 | 国产无套粉嫩白浆在线 | 中文字幕乱码人妻二区三区 | 人妻少妇精品无码专区动漫 | 好男人社区资源 | 天堂а√在线中文在线 | 国产亚洲精品久久久久久 | 亚洲国产精品美女久久久久 | 欧洲精品码一区二区三区免费看 | 无码帝国www无码专区色综合 | 中文字幕无码免费久久9一区9 | 久久人人爽人人爽人人片av高清 | 成人精品视频一区二区 | 日韩精品a片一区二区三区妖精 | 精品偷自拍另类在线观看 | 久久久久se色偷偷亚洲精品av | 亚洲成a人片在线观看日本 | 天天燥日日燥 | 欧美丰满熟妇xxxx性ppx人交 | 免费观看激色视频网站 | 久久精品人人做人人综合 | 人妻天天爽夜夜爽一区二区 | 精品国产青草久久久久福利 | 偷窥村妇洗澡毛毛多 | 福利一区二区三区视频在线观看 | 欧美变态另类xxxx | 性生交大片免费看l | 性欧美大战久久久久久久 | 黑人巨大精品欧美一区二区 | 亚洲色成人中文字幕网站 | 女人被男人躁得好爽免费视频 | 四虎影视成人永久免费观看视频 | 水蜜桃亚洲一二三四在线 | 日本大香伊一区二区三区 | 乱人伦人妻中文字幕无码久久网 | 樱花草在线播放免费中文 | 久久久久久国产精品无码下载 | 国产一区二区不卡老阿姨 | 亚洲国产欧美国产综合一区 | 久久婷婷五月综合色国产香蕉 | 亚洲综合伊人久久大杳蕉 | 日本一区二区更新不卡 | 兔费看少妇性l交大片免费 | 无码成人精品区在线观看 | 中文字幕av日韩精品一区二区 | 国产美女极度色诱视频www | 色欲人妻aaaaaaa无码 | а√天堂www在线天堂小说 | 一本色道久久综合狠狠躁 | 4hu四虎永久在线观看 | 99久久99久久免费精品蜜桃 | 精品无码av一区二区三区 | 成人影院yy111111在线观看 | www国产亚洲精品久久久日本 | 久久久久久a亚洲欧洲av冫 | 亚洲s码欧洲m码国产av | 夜精品a片一区二区三区无码白浆 | 亚洲综合在线一区二区三区 | 午夜时刻免费入口 | 国产尤物精品视频 | 国产精品久久久久久无码 | 国产精品资源一区二区 | 精品人妻人人做人人爽夜夜爽 | 成人精品视频一区二区三区尤物 | 国产偷国产偷精品高清尤物 | 巨爆乳无码视频在线观看 | 亚洲人亚洲人成电影网站色 | 狠狠综合久久久久综合网 | 国产成人无码av一区二区 | 精品一区二区三区波多野结衣 | 在线а√天堂中文官网 | 性生交大片免费看女人按摩摩 | 4hu四虎永久在线观看 | 亚洲中文字幕无码中文字在线 | 中文无码伦av中文字幕 | 中文字幕av无码一区二区三区电影 | 国产精品亚洲lv粉色 | 国产成人精品视频ⅴa片软件竹菊 | 高清无码午夜福利视频 | 中文字幕无码视频专区 | 中文字幕无码热在线视频 | 日韩av无码中文无码电影 | 思思久久99热只有频精品66 | 我要看www免费看插插视频 | 九九久久精品国产免费看小说 | 在线播放无码字幕亚洲 | 国产人成高清在线视频99最全资源 | 精品无码成人片一区二区98 | 国产一区二区三区日韩精品 | 图片区 小说区 区 亚洲五月 | 人妻与老人中文字幕 | 高中生自慰www网站 | av在线亚洲欧洲日产一区二区 | 国产人妻精品一区二区三区 | 国内综合精品午夜久久资源 | 日本www一道久久久免费榴莲 | 国产成人亚洲综合无码 | 国产精品亚洲а∨无码播放麻豆 | 成人免费视频一区二区 | 人人妻人人澡人人爽欧美一区 | 内射老妇bbwx0c0ck | 无遮无挡爽爽免费视频 | 女人被男人躁得好爽免费视频 | 国产xxx69麻豆国语对白 | 欧美日韩精品 | 久精品国产欧美亚洲色aⅴ大片 | 国产一区二区三区四区五区加勒比 | 国产人妻精品一区二区三区不卡 | 精品日本一区二区三区在线观看 | 国产人成高清在线视频99最全资源 | 久久精品国产一区二区三区肥胖 | 亚洲aⅴ无码成人网站国产app | 性开放的女人aaa片 | 99久久久无码国产精品免费 | 精品久久久久香蕉网 | 亚洲成a人片在线观看无码3d | 丰满少妇弄高潮了www | 亚洲精品一区二区三区大桥未久 | 国产卡一卡二卡三 | 亚洲成av人影院在线观看 | a在线亚洲男人的天堂 | 少妇人妻偷人精品无码视频 | 国产日产欧产精品精品app | 国产av一区二区精品久久凹凸 | 久久99精品久久久久婷婷 | 亚洲综合久久一区二区 | 久久99热只有频精品8 | 国产精品人妻一区二区三区四 | 国产熟妇高潮叫床视频播放 | 亚洲色www成人永久网址 | 日韩av无码中文无码电影 | 装睡被陌生人摸出水好爽 | 久久99久久99精品中文字幕 | yw尤物av无码国产在线观看 | 九九热爱视频精品 | 亚洲 激情 小说 另类 欧美 | 国产午夜无码精品免费看 | 亚洲成a人片在线观看无码3d | 无码人妻少妇伦在线电影 | 国产一区二区三区日韩精品 | www一区二区www免费 | 在线成人www免费观看视频 | 99麻豆久久久国产精品免费 | 巨爆乳无码视频在线观看 | 亚洲人成人无码网www国产 | 久久亚洲日韩精品一区二区三区 | 中文字幕乱码人妻二区三区 | 亚洲中文无码av永久不收费 | 午夜无码人妻av大片色欲 | 色偷偷人人澡人人爽人人模 | 精品厕所偷拍各类美女tp嘘嘘 | 熟女俱乐部五十路六十路av | 国产麻豆精品精东影业av网站 | 国产成人亚洲综合无码 | 国产亚洲日韩欧美另类第八页 | 小泽玛莉亚一区二区视频在线 | 欧美日韩人成综合在线播放 | 亚洲熟女一区二区三区 | 国产高清av在线播放 | 国产精品福利视频导航 | 又紧又大又爽精品一区二区 | 波多野结衣av一区二区全免费观看 | 少妇久久久久久人妻无码 | 99久久精品国产一区二区蜜芽 | 一本色道婷婷久久欧美 | 久久久精品国产sm最大网站 | 亚洲国产精品久久久天堂 | 国产suv精品一区二区五 | 国产午夜精品一区二区三区嫩草 | 国产真实乱对白精彩久久 | 亚洲精品一区二区三区婷婷月 | 久久精品人妻少妇一区二区三区 | 亚洲精品国产精品乱码视色 | 麻豆国产人妻欲求不满 | 日本精品少妇一区二区三区 | 无套内谢的新婚少妇国语播放 | 午夜不卡av免费 一本久久a久久精品vr综合 | 97精品人妻一区二区三区香蕉 | 亚洲人成人无码网www国产 | 免费无码一区二区三区蜜桃大 | av无码不卡在线观看免费 | 国产午夜福利100集发布 | 性开放的女人aaa片 | а√天堂www在线天堂小说 | 最近的中文字幕在线看视频 | 日韩人妻无码中文字幕视频 | 久久精品国产亚洲精品 | 亚洲狠狠婷婷综合久久 | 人人妻人人澡人人爽欧美一区 | 天堂久久天堂av色综合 | 性欧美牲交xxxxx视频 | 国产精品无码永久免费888 | 天堂亚洲2017在线观看 | 亚洲七七久久桃花影院 | 少妇无码吹潮 | 午夜免费福利小电影 | 国产在线无码精品电影网 | 18黄暴禁片在线观看 | 亚洲一区二区三区偷拍女厕 | a片在线免费观看 | 久久天天躁夜夜躁狠狠 | 亚洲精品美女久久久久久久 | 又湿又紧又大又爽a视频国产 | 亚洲熟熟妇xxxx | 人妻少妇精品无码专区二区 | 自拍偷自拍亚洲精品被多人伦好爽 | 国产激情综合五月久久 | 老熟妇仑乱视频一区二区 | 美女黄网站人色视频免费国产 | 亚洲国产精品无码一区二区三区 | 国产精品毛多多水多 | 国産精品久久久久久久 | 色窝窝无码一区二区三区色欲 | 性做久久久久久久免费看 | 大乳丰满人妻中文字幕日本 | 高潮毛片无遮挡高清免费 | 中国女人内谢69xxxxxa片 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国内精品一区二区三区不卡 | 午夜肉伦伦影院 | 欧美freesex黑人又粗又大 | 日韩无码专区 | 少妇的肉体aa片免费 | 亚洲国产日韩a在线播放 | 中文字幕日产无线码一区 | 伊人色综合久久天天小片 | 精品久久久中文字幕人妻 | 熟女俱乐部五十路六十路av | 久久无码专区国产精品s | 中文亚洲成a人片在线观看 | 久久人人爽人人爽人人片av高清 | 久9re热视频这里只有精品 | 俺去俺来也在线www色官网 | 亚洲精品成人av在线 | 性色av无码免费一区二区三区 | 久久无码人妻影院 | 最新版天堂资源中文官网 | 色一情一乱一伦一区二区三欧美 | 久久久久亚洲精品男人的天堂 | 亚洲国产精品无码一区二区三区 | 偷窥日本少妇撒尿chinese | 国内精品久久毛片一区二区 | 国产真人无遮挡作爱免费视频 | 少妇高潮喷潮久久久影院 | 狠狠亚洲超碰狼人久久 | 久久99精品久久久久久动态图 | 老子影院午夜伦不卡 | 中文字幕无码av激情不卡 | 亚洲熟悉妇女xxx妇女av | 亚洲爆乳大丰满无码专区 | 欧美黑人性暴力猛交喷水 | 国产激情精品一区二区三区 | 国产成人综合在线女婷五月99播放 | 亚洲精品无码人妻无码 | 国产亲子乱弄免费视频 | 亚洲gv猛男gv无码男同 | 欧美乱妇无乱码大黄a片 | 熟妇人妻无乱码中文字幕 | 乱人伦人妻中文字幕无码 | 国产乱人偷精品人妻a片 | 中文字幕精品av一区二区五区 | 97夜夜澡人人爽人人喊中国片 | 国内精品人妻无码久久久影院 | 九九综合va免费看 | 国产偷自视频区视频 | 国产精品第一国产精品 | 亚洲国产日韩a在线播放 | 国产福利视频一区二区 | 欧美性黑人极品hd | 国产激情综合五月久久 | 午夜精品一区二区三区的区别 | 99国产欧美久久久精品 | 欧美激情内射喷水高潮 | 中文字幕精品av一区二区五区 | 国产av一区二区精品久久凹凸 | 99在线 | 亚洲 | 人人澡人摸人人添 | 亚洲区欧美区综合区自拍区 | 精品国产一区二区三区四区在线看 | 丁香啪啪综合成人亚洲 | 国精品人妻无码一区二区三区蜜柚 | 波多野结衣乳巨码无在线观看 | 性生交大片免费看女人按摩摩 | 狠狠色丁香久久婷婷综合五月 | 7777奇米四色成人眼影 | 男女作爱免费网站 | 小泽玛莉亚一区二区视频在线 | 无码av免费一区二区三区试看 | 亚洲欧洲中文日韩av乱码 | 人妻夜夜爽天天爽三区 | 98国产精品综合一区二区三区 | 天天拍夜夜添久久精品 | 国产精品无码永久免费888 | 欧美性猛交内射兽交老熟妇 | 久久国产精品偷任你爽任你 | 国产欧美精品一区二区三区 | 国产成人精品久久亚洲高清不卡 | 午夜性刺激在线视频免费 | 狠狠色欧美亚洲狠狠色www | 欧美日韩视频无码一区二区三 | 又色又爽又黄的美女裸体网站 | 国产麻豆精品一区二区三区v视界 | 曰本女人与公拘交酡免费视频 | 人妻夜夜爽天天爽三区 | 丰满人妻翻云覆雨呻吟视频 | 色欲久久久天天天综合网精品 | 少妇性l交大片 | 成人精品一区二区三区中文字幕 | 无套内射视频囯产 | 日韩亚洲欧美中文高清在线 | 精品成在人线av无码免费看 | 久9re热视频这里只有精品 | 久久精品人妻少妇一区二区三区 | 精品国产av色一区二区深夜久久 | 久久综合香蕉国产蜜臀av | 好男人社区资源 | 国产精品美女久久久久av爽李琼 | 日本va欧美va欧美va精品 | 一本久道久久综合婷婷五月 | 少妇高潮喷潮久久久影院 | 亚洲一区二区三区 | 67194成是人免费无码 | 99国产欧美久久久精品 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 四虎影视成人永久免费观看视频 | 捆绑白丝粉色jk震动捧喷白浆 | 日韩欧美中文字幕公布 | 日本熟妇大屁股人妻 | 国产黄在线观看免费观看不卡 | 精品乱码久久久久久久 | 国产精品美女久久久网av | 国产在线精品一区二区高清不卡 | 国产做国产爱免费视频 | 国产精品美女久久久网av | 人人澡人人透人人爽 | 国产精品久久久一区二区三区 | 亚洲人成影院在线观看 | 乱码午夜-极国产极内射 | 亚洲国产欧美日韩精品一区二区三区 | 久久精品一区二区三区四区 | 国产av久久久久精东av | 在线欧美精品一区二区三区 | 香蕉久久久久久av成人 | 久久人人爽人人人人片 | 国内少妇偷人精品视频免费 | 日韩视频 中文字幕 视频一区 | 一本大道伊人av久久综合 | 亚拍精品一区二区三区探花 | 高清不卡一区二区三区 | 六月丁香婷婷色狠狠久久 | 国产精品a成v人在线播放 | 夜夜躁日日躁狠狠久久av | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 日本xxxx色视频在线观看免费 | 51国偷自产一区二区三区 | 免费无码一区二区三区蜜桃大 | 国产成人无码午夜视频在线观看 | 国产精品人人爽人人做我的可爱 | 国产又爽又黄又刺激的视频 | 九月婷婷人人澡人人添人人爽 | 牲欲强的熟妇农村老妇女 | 亚洲精品欧美二区三区中文字幕 | 无码av最新清无码专区吞精 | 亚洲精品久久久久久一区二区 | 国产无遮挡又黄又爽又色 | 人妻尝试又大又粗久久 | 无码人妻出轨黑人中文字幕 | 国产成人精品视频ⅴa片软件竹菊 | 日本肉体xxxx裸交 | 一本色道久久综合狠狠躁 | 精品无码av一区二区三区 | 动漫av一区二区在线观看 | 娇妻被黑人粗大高潮白浆 | 婷婷色婷婷开心五月四房播播 | 免费观看又污又黄的网站 | 日韩av激情在线观看 | 亚洲中文字幕久久无码 | 日本丰满护士爆乳xxxx | 精品国产一区二区三区av 性色 | 免费国产黄网站在线观看 | 激情内射日本一区二区三区 | 国产成人一区二区三区别 | 在线a亚洲视频播放在线观看 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 在线播放免费人成毛片乱码 | 青青久在线视频免费观看 | 久久人人97超碰a片精品 | 少妇一晚三次一区二区三区 | 综合人妻久久一区二区精品 | 午夜精品一区二区三区的区别 | 久久综合久久自在自线精品自 | 天堂一区人妻无码 | 精品亚洲韩国一区二区三区 | 51国偷自产一区二区三区 | 精品国产精品久久一区免费式 | 一本久道久久综合狠狠爱 | 少妇人妻大乳在线视频 | 精品国产一区av天美传媒 | 77777熟女视频在线观看 а天堂中文在线官网 | av无码电影一区二区三区 | 欧洲vodafone精品性 | 久精品国产欧美亚洲色aⅴ大片 | 国产亚洲日韩欧美另类第八页 | 水蜜桃色314在线观看 | 丝袜人妻一区二区三区 | 性欧美熟妇videofreesex | 日本精品少妇一区二区三区 | 日本一卡二卡不卡视频查询 | 国精品人妻无码一区二区三区蜜柚 | 亚洲娇小与黑人巨大交 | 国产精品欧美成人 | 午夜熟女插插xx免费视频 | 国产一精品一av一免费 | 亚洲日韩av一区二区三区四区 | 欧美日韩色另类综合 | 亚洲aⅴ无码成人网站国产app | 成熟女人特级毛片www免费 | 色五月丁香五月综合五月 | 精品乱子伦一区二区三区 | 成人免费视频视频在线观看 免费 | 日韩精品无码一区二区中文字幕 | 国产亚洲精品久久久闺蜜 | 亚洲欧美日韩成人高清在线一区 | 亚洲精品一区国产 | 亚洲精品欧美二区三区中文字幕 | 宝宝好涨水快流出来免费视频 | 国产人妻精品一区二区三区不卡 | 色综合视频一区二区三区 | 亚洲午夜久久久影院 | 国产无遮挡吃胸膜奶免费看 | 夜夜高潮次次欢爽av女 | 欧美人与动性行为视频 | 亚洲人成影院在线观看 | 亚洲精品一区二区三区在线 | 国产精品第一国产精品 | 欧美色就是色 | 一本久道高清无码视频 | 日本乱偷人妻中文字幕 | 又紧又大又爽精品一区二区 | 国产精品18久久久久久麻辣 | 日本一卡2卡3卡四卡精品网站 | 欧美怡红院免费全部视频 | 无码帝国www无码专区色综合 | 色综合久久久无码网中文 | 内射后入在线观看一区 | 67194成是人免费无码 | 国产精品久久久久久亚洲毛片 | 人妻天天爽夜夜爽一区二区 | 亚洲精品中文字幕 | 亚洲国产精品久久久天堂 | 天天躁日日躁狠狠躁免费麻豆 | 在线观看免费人成视频 | 色综合天天综合狠狠爱 | 久久综合网欧美色妞网 | 少妇无码av无码专区在线观看 | 久久精品无码一区二区三区 | 久久人妻内射无码一区三区 | 日本在线高清不卡免费播放 | 人人妻人人澡人人爽人人精品浪潮 | 成人一区二区免费视频 | 巨爆乳无码视频在线观看 | 日本精品人妻无码免费大全 | 乱人伦人妻中文字幕无码久久网 | 国内老熟妇对白xxxxhd | 国产三级久久久精品麻豆三级 | 色一情一乱一伦 | 亚洲人成影院在线观看 | 麻豆国产人妻欲求不满 | 日本熟妇人妻xxxxx人hd | 最新国产麻豆aⅴ精品无码 | 好屌草这里只有精品 | 最新国产麻豆aⅴ精品无码 | 中文字幕av伊人av无码av | 中文字幕精品av一区二区五区 | 国产精品高潮呻吟av久久4虎 | 亚洲自偷自偷在线制服 | 无码乱肉视频免费大全合集 | 亚洲 日韩 欧美 成人 在线观看 | 性啪啪chinese东北女人 | 成年美女黄网站色大免费全看 | а天堂中文在线官网 | 亚洲日本va午夜在线电影 | 亚洲成av人片在线观看无码不卡 | 性史性农村dvd毛片 | 波多野结衣乳巨码无在线观看 | 免费观看又污又黄的网站 | 5858s亚洲色大成网站www | 奇米影视7777久久精品人人爽 | 国产三级久久久精品麻豆三级 | 国产性生大片免费观看性 | 久久天天躁夜夜躁狠狠 | 国产色精品久久人妻 | 97夜夜澡人人双人人人喊 | 精品久久综合1区2区3区激情 | 大胆欧美熟妇xx | 东京一本一道一二三区 | 特级做a爰片毛片免费69 | 丰腴饱满的极品熟妇 | 风流少妇按摩来高潮 | 国产午夜无码视频在线观看 | 99精品久久毛片a片 | 蜜臀aⅴ国产精品久久久国产老师 | 国产偷抇久久精品a片69 | 日本高清一区免费中文视频 | 国产精品久久国产精品99 | 男女猛烈xx00免费视频试看 | 欧美日韩一区二区三区自拍 | 性色av无码免费一区二区三区 | 日韩av激情在线观看 | 99精品无人区乱码1区2区3区 | 性开放的女人aaa片 | 久久这里只有精品视频9 | ass日本丰满熟妇pics | 暴力强奷在线播放无码 | 久久久中文久久久无码 | 国产一区二区三区影院 | 婷婷综合久久中文字幕蜜桃三电影 | 少妇无码av无码专区在线观看 | 国产人妻人伦精品1国产丝袜 | 人妻熟女一区 | 人妻熟女一区 | 国产精品久久久一区二区三区 | 国产精品久久精品三级 | 一个人看的www免费视频在线观看 | 国产极品视觉盛宴 | 亚洲男人av香蕉爽爽爽爽 | 国产成人无码av一区二区 | 亚洲日本一区二区三区在线 | 一个人看的www免费视频在线观看 | 亚洲熟熟妇xxxx | 少妇人妻大乳在线视频 | 亚洲中文无码av永久不收费 | 中文字幕无码av波多野吉衣 | 日本精品少妇一区二区三区 | 午夜时刻免费入口 | 精品无码av一区二区三区 | 自拍偷自拍亚洲精品被多人伦好爽 | 人人妻人人澡人人爽欧美一区九九 | 中文字幕乱码人妻无码久久 | 毛片内射-百度 | 女高中生第一次破苞av | 免费人成在线视频无码 | 亚洲aⅴ无码成人网站国产app | 九九热爱视频精品 | 黄网在线观看免费网站 | 无套内谢老熟女 | 国产热a欧美热a在线视频 | 色综合久久久久综合一本到桃花网 | 国产人妻精品午夜福利免费 | 久久99精品久久久久久动态图 | 亚洲欧洲日本无在线码 | а√资源新版在线天堂 | 久久精品视频在线看15 | 377p欧洲日本亚洲大胆 | 国产精品-区区久久久狼 | 久久精品中文字幕大胸 | 亚洲色大成网站www国产 | 国产高清不卡无码视频 | 永久黄网站色视频免费直播 | 亚洲中文字幕av在天堂 | 无码国内精品人妻少妇 | 中文字幕 人妻熟女 | 成年女人永久免费看片 | 国产一区二区三区四区五区加勒比 | 一区二区三区乱码在线 | 欧洲 | 伊人久久大香线蕉亚洲 | 无码人妻av免费一区二区三区 | 无码国模国产在线观看 | 人妻无码αv中文字幕久久琪琪布 | 国产香蕉尹人视频在线 | 3d动漫精品啪啪一区二区中 | 成人aaa片一区国产精品 | 精品国产成人一区二区三区 | 国内揄拍国内精品少妇国语 | 黑人大群体交免费视频 | 又湿又紧又大又爽a视频国产 | 成人av无码一区二区三区 | 国产绳艺sm调教室论坛 | 97久久精品无码一区二区 | 欧美第一黄网免费网站 | 亚洲人成人无码网www国产 | 国产精品99久久精品爆乳 | 一本加勒比波多野结衣 | 精品国产乱码久久久久乱码 | 免费播放一区二区三区 | 久久99精品国产.久久久久 | 青春草在线视频免费观看 | 一个人看的www免费视频在线观看 | 免费无码的av片在线观看 | aa片在线观看视频在线播放 | 久久久成人毛片无码 | 日本精品人妻无码77777 天堂一区人妻无码 | 国产明星裸体无码xxxx视频 | 国产成人精品久久亚洲高清不卡 | 午夜熟女插插xx免费视频 | 亚洲精品美女久久久久久久 | 理论片87福利理论电影 | 在线a亚洲视频播放在线观看 | 国产真人无遮挡作爱免费视频 | 久久久久人妻一区精品色欧美 | 国产女主播喷水视频在线观看 | 久激情内射婷内射蜜桃人妖 | 午夜精品久久久内射近拍高清 | 欧美老妇与禽交 | 在线 国产 欧美 亚洲 天堂 | 野狼第一精品社区 | 国产精品无码一区二区桃花视频 | 国产精品久久久久久亚洲毛片 | 亚洲 激情 小说 另类 欧美 | 一本久久a久久精品亚洲 | 女人被男人爽到呻吟的视频 | 日本乱人伦片中文三区 | 国産精品久久久久久久 | 欧美国产亚洲日韩在线二区 | 久久精品人妻少妇一区二区三区 | 色综合久久久久综合一本到桃花网 | 亚洲色偷偷偷综合网 | 性生交大片免费看女人按摩摩 | 色婷婷综合激情综在线播放 | 丰满少妇弄高潮了www | 亚洲精品中文字幕乱码 | 中文字幕人妻无码一区二区三区 | 国产农村妇女高潮大叫 | 丝袜 中出 制服 人妻 美腿 | 久久亚洲国产成人精品性色 | 玩弄少妇高潮ⅹxxxyw | 日本一本二本三区免费 | 国产精品18久久久久久麻辣 | 国产绳艺sm调教室论坛 | 国产真实夫妇视频 | 中文字幕av日韩精品一区二区 | 成人精品一区二区三区中文字幕 | 精品国精品国产自在久国产87 | 在线播放免费人成毛片乱码 | 国产极品美女高潮无套在线观看 | 六月丁香婷婷色狠狠久久 | 99久久人妻精品免费一区 | 国产av久久久久精东av | 久久人人爽人人人人片 | 99久久精品无码一区二区毛片 | 鲁一鲁av2019在线 | 日本丰满护士爆乳xxxx | 亚洲理论电影在线观看 | 99久久99久久免费精品蜜桃 | 六十路熟妇乱子伦 | 波多野42部无码喷潮在线 |