Traditional Culture Encyclopedia - Photography and portraiture - Hailar travel guide Hailar travel guide must-see attractions

Hailar travel guide Hailar travel guide must-see attractions

Today, Xiaobian will share with you that the temperature in Hailar is suitable in May and September, and there are no mosquitoes, but the most beautiful grassland scenery is in July and August in midsummer. At this time, the grassland is lush, the wind is low, and the cattle and sheep are beautiful.

Although Hailar is cold in winter, it is also a season of scenery in the north, and it is the best time to experience ice and snow activities and enjoy the snow scene in the grassland. Generally, it is from the middle and late period of 1 1 to the middle of February of the following year.

The small ticket is the first to push Hulunbeier grassland.

China's most complete prairie, the purest and richest grassland pasture, can enjoy the unique customs of nomadic people.

Bingler, Murray R.

Mozigele River, known as "the first meandering water in the world", is the most famous sightseeing pasture in Hulunbeier grassland, where many film and television programs, such as "Searching for the Dragon" and "Where is Dad", are filmed, and the grassland is full of twists and turns and endless spectacular scenes.

Golden tent sweat

Here is the hinterland of Hulunbeier grassland, "the sky is grey and wild, and the wind blows the grassland to see cattle and sheep." Many nomadic people have grown up here in history.

At that time, nomadic tribes ruled the world. This used to be the place where Genghis Khan, a generation of Tianjiao, camped. Now visitors can feel the strong nomadic tribal culture here.

Aoluguya Reindeer

In the depths of Daxing 'anling Mountains, there are a group of reindeer spirits, commonly known as "four elephants" or "deer". Reindeer are very docile. You can feed the reindeer and take photos with them. When you touch it, it seems that you are in a fairy tale world.

Hulun Lake

The endless Hulun Lake is beautiful, the lake area is vast, and the blue waves are like a crystal pearl embedded in the beautiful Hulunbeier grassland, which makes photographers and tourists stop.

Matters needing attention in Hulunbeier tourism

1. About the temperature difference, the tourist season of Hulunbeier grassland is 5- 1 1 month, and the midsummer in July and August is the peak season, but the temperature difference between morning and evening here is really great. Remember to bring long clothes and trousers.

2. With regard to sun protection, the weather in the grassland is unpredictable, and the weather is uncertain. Sunny days are good because good films will be made, but the sun is really good and the ultraviolet rays are very strong. All kinds of sunglasses, shawls and sun protection clothes are very necessary.

3. In terms of diet, Hulunbeier is located in the east of Inner Mongolia, geographically adjacent to Russia and Heilongjiang Province, so it is a local specialty, such as beef and mutton, hand-grabbed meat, roast leg of lamb, canned tea and so on. In the food culture; It may be salty for southerners, but it's delicious for northerners.

1。 & ampvoid 0! = = Parameter [1] & & amparguments[ 1],i=d.getInstance()。 getValue(); If (I & amp& ampI. Flags and signs; & ampi.flags.changeFclickToBeacon){! Function (t){var n, i = arguments.length & gt 1. & ampvoid 0! = = Parameter [1] & & arguments [1], r = new date (). getTime(); T & (t.rand = r+math.random ()), function (t){var e=! 1; Try t & navigator. & amp(e = navigator . send beacon(t))} catch(t){ } return e }(n =[I? v:p,g(t)]。 Add ("? ))||e(n)}(t,n); return}e([n? v:p,g(t)]。 Add ("? ))}(this.extend(this.env,{tag:"ps-js-error ",datetime:new Date()。 getTime(),message:t.message,stack:t . stack })},support:function(t,e){ if(" function " = = type of t){ e = t; try { e()} catch(t){ this . report(t)} } else { var n = t[e]; t[e]= function(){ for(var e = arguments . length,i=Array(e),r = 0; r0 } }); return}var t=window.document,e =[]; I . prototype . throttle _ time out = 100,i.prototype.POLL_INTERVAL=null,I . prototype . use _ MUTATION _ OBSERVER =! 0,I . prototype . observe = function(t){ if(! This. _ observationtargets . some(function(e){ return e . element = = t }){ if(! (t &1= = t.nodetype)) throws an error ("target must be an element"); This. _registerInstance(),this。 _ observationtargets.push ({element: t, entry:null}), this. _monitorIntersections(),this。 _checkForIntersections()}},I . prototype . unobserve = function(t){ this。 _observationTargets=this。 _observationTargets.filter (function (e){return e.element! =t}), this. _ observation targets . length | |(this。 _unmonitorIntersections(),this。 _unregisterInstance())},I . prototype . disconnect = function(){ this。 _observationTargets=[],this。 _unmonitorIntersections(),this。 _unregisterInstance()},I . prototype . takerecords = function(){ var t = this。 _ queuedentries . slice(); Return this. _queuedEntries=[],t},I . prototype . _ init thresholds = function(t){ var e = t | |[0]; return Array.isArray(e)||(e=[e]),e.sort()。 filter(function(t,e,n){if("number "! = type of t || isnan (t) || t 1) throw error ("threshold must be a number between 0 and1,including 0 and1"); Back to t! ==n[e- 1]})},I . prototype . _ parserotmargin = function(t){ var e =(t | | " 0px ")。 Split (/\s+/). map(function(t){var e=/^(-? \d*\。 ? \d+)(px|%)$/。 exec(t); If (! E) Throwing error ("rootMargin must be specified in pixels or percentage"); return { value:parse float(e[ 1]),unit:e[2]} }; Return e [1] = e [1] || e [0], e[2]=e[2]||e[0], e[3]=e[3]||e[ 1], e. This. _ monitoring interaction &&(this. _monitoringIntersections=! 0, this. Polling _ Interval? This. _ monitoring interval = setInterval(this。 _checkForIntersections,this。 POLL_INTERVAL):(r(window, "resize", this. _checkForIntersections,! 0), r(t, "scroll", this. _checkForIntersections,! 0), this. Use "Mutation Observer" in the _ Mutation _ Observer & amp& amp window. & This. _ DOM observer = new mutation observer(this。 _ checkforsections), this. _domObserver.observe(t,{attributes:! 0, sublist:! 0,characterData:! 0, subtree:! 0}))))},I . prototype . _ unmonitorIntersections = function(){ this。 _ monitoring interaction &&(this. _monitoringIntersections=! 1, clearInterval (this. _monitoringInterval), this. _monitoringInterval=null,o(window," resize ",this。 _checkForIntersections,! 0), o(t, "scroll", this. _checkForIntersections,! 0), this. _ domobserver &&(this. _domObserver.disconnect(),this。 _domObserver=null))},I . prototype . _ checkForIntersections = function(){ var t = this。 _rootIsInDom(),e=t? This. _ getroot rect():a(); This. _ observationtargets . foreach(function(I){ var r = I . element,o=s(r),a=this。 _rootContainsTarget(r), c=i.entry, u = t&&& this. _ computetargetandroot intersection(r,e),l = I . entry = new n({ time:window . performance & amp; & Performance & amp& ampperformance.now (), target:r, boundingclient: o, rootBounds:e, intersect rect: u}); c? T & A? This. _hasCrossedThreshold(c,l)& amp; & this. _ queuedentries . push(l):c & amp; & ampc.is interleaving & this. _ queueentries.push (l): this. _queuedEntries.push(l)},this),this。 _ queuedEntries.length & amp& amp this. _callback(this.takeRecords()、this)},I . prototype . _ computetargetandrootcurgence = function(e,n){if("none "! =window.getComputedStyle(e)。 display){for(var i=s(e),r=u(e),o=! 1; ! o; ){var a=null,c= 1==r.nodeType? window . getcomputedstyle(r):{ }; If("none"==c.display) returns; if(r==this.root||r==t? (o=! 0,a=n):r! = t.body & amp& ampr! = t.documentelement &&"visible"! Overflow &&(a = s (r)), a & amp& amp (i=function(t,e){var n=Math.max(t.top,e.top),i=Math.min(t.bottom,e.bottom),r=Math.max(t.left,e.left),o=Math.min(t.right,e.right),s=o-r,a = I-n; return s & gt= 0 & amp& ampa & gt= 0 & amp& amp{top:n,bottom:i,left:r,right:o,width:s,height:a}}(a,I)))break; r=u(r)}return i}},I . prototype . _ getRootRect = function(){ var e; if(this . root)e = s(this . root); else{var n=t.documentElement,I = t . body; e={top:0,left:0,right:n . client width | | I . client width,width:n . client width | | I . client width, Bottom: n.clientheight || i.clientheight, height: n.clientheight ||| i.clientheight}} returns this. _ expandrectbyrootremargin(e)},I . prototype . _ expandrectbyrootremargin = function(t){ var e = this。 _ rootmarginvalues . map(function(e,n){return"px"==e.unit? e.value:e.value*(n%2? t.width:t.height)/ 100}),n={top:t.top-e[0],right:t.right+e[ 1],bottom:t.bottom+e[2],left:t . left-e[3]}; return n.width=n.right-n.left,n.height=n.bottom-n.top,n},I . prototype . _ hasCrossedThreshold = function(t,e){ var n = t & amp; & ampt.isIntersecting? t . intersection ratio | | 0:- 1,i = e.isIntersecting? e . intersection ratio | | 0:- 1; If (n! = = I)for(var r = 0; Re-indexing of (this) & push (this)}, i. prototype. _ unregisterinstance = function () {var t = e.indexof (this); - 1! = t & amp.splice (t, 1)}, window. IntersectionObserver = i,window。 IntersectionObserverEntry = n} function n(t){this.time=t.time, this.target=t.target, this.rootBounds=t.rootBounds, this . bounding client rect = t . bounding client rect,this . intersect rect = t . intersect rect | | a(),this.isIntersecting =! ! t.intersectionRectvar e=this.boundingClientRect,n=e.width*e.height,i = this.intersectionRect,r = I . width * I . height; n? this . intersection ratio = Number((r/n))。 to fixed(4)):this . intersection ratio = this . is intersection? 1:0} function i(t, e){var n, i, r, o = e || {}; If ("function"! =typeof t) throws an error ("callback must be a function"); If (o.root & kloc-0/! =o.root.nodeType) throws an error ("root must be an element"); This. _checkForIntersections=(n=this。 _ check for intersections . bind(this),i=this。 THROTTLE_TIMEOUT, r=null, function () {r || (r = settimeout (function () {n (), r=null}, i))}, this. _callback=t, this. _observationTargets=[],this。 _queuedEntries=[], this. _rootMarginValues=this。 _ parserotmargin(o . root margin),this.thresholds=this。 _initThresholds(o.threshold),this.root=o.root||null,this.rootMargin=this。 _ root margin values . map(function(t){ return t . value+t . unit })。 join(" ")function r(t,e,n,I){ " function " = = type of t . addevent listener? t.addEventListener(e,n,i||! 1):" function " = = type of t . attach event & amp; & ampt.attachEvent("on"+e,n)}function o(t,e,n,I){ " function " = = type of t . removeeventlistener? t.removeEventListener(e,n,i||! 1):" function " = = type of t . detatchevent & amp; & ampt.detatchEvent("on"+e, n)} function s (t) {var e; try { e = t . getboundingclientrect()} catch(t){ } return e? (e.g., width and length; & height || (e = {top: e.top, right:e.right, bottom:e.bottom, left:e.left, width:e.right-e.left, height:e.bottom-e.top}), e): a (. Bottom:0, left:0, right:0, width:0, height:0}} Function c(t, e) {for (var n = e; n; ){if(n==t)return! 0; n=u(n)}return! 1} function u (t) {var e = t.parentnode; Returns e &11= = e Node Type & amp& ampe Host? Moderator: e & e.assigned slot? e . assigned slot . parent node:e } }(); Var R= "observer"; Function a () {function C(t){var e=t.container, n=t.url, I = t.paramsthis.opts = {container: e, url:n, params:void 0===i = i? {}:i},this . init()} C . prototype = { constructor:C,init:function(){var t=this,e = t . opts . container; t . observer = new intersection observer(t . observe CB . bind(t))、e & amp& amparray . prototype . slice . call(document . query selector all(e))。 forEach(function(e){ t . observer . observe(e)})},observe:function(t){ this . observer . observe(t)},observe CB:function(t){ var e = this; t . foreach(function(t){ if(t . is intersection){ var n = t . target; If (! n . getattribute(R)){ var I = e . combinedata(n); e.log(i),e.observer.unobserve(n),n.setAttribute(R, 1)}}},combineData:function(t){ var e = this . opts . params,n = { data:{ } }; for(var I in e)if(e . hasownproperty(I)){ var r = t . get attribute(e[I]); ""! = = r & amp& amp(n.data[i]=r)}return n},log:function(t){ this . n click(t)},n click:function(t){ var e = this . opts . URL; t . rand = this . addrand(); var n= " "。 concat(e,"? ).concat(this . encodesearchparams(t)); this.imgRequest(n,t)},imgRequest:function(t,e){try{var n=e.rand,i = new Imagewindow[-IMAGE "+n]= I, I . onload = I . on error = I . onabort = function(){ I . onload = I . on error = I . onabort = null,i=null,window[-IMAGE "+n]= A },i.src=t}catch(t){}},addRand:function(){ return math . random()。 toString( 16)。 slice(2,8)+Math.random()},encodeSearchParams:function(t){ var e =[]; For (var n in t) if (t.hasownproperty (n)) {var i = t [n]; " Object "= = type I & (I = JSON. Stringify (i)), e.push([n, encode component (i)]. join(" = ")} return e . join(" & amp; )}}; var x = { init:function(){ new C({ container:"[data-nvk]",url:"/udpl/exp ",params:{ exp:" data-nvk " } } }; T.PARAMS={}, t.init = function (e) {t. params = e; var n= " "+t . params . result class; _(function(){r.init(n,t.PARAMS.imTimeSign),x.init()},! 0),_(function(){O.init(),function(t,e){var n=Array.prototype.slice,I = { is listener:document . addevent listener,getOnEvent:function(t,e,n,I){ return function(r){ var r = r | | window . event; If (! 1===n.call(i||t,r,e,i))return r.preventDefault(),! 1}}}; I . addevent listener = I . is listener? Function (t, e, n, r, o){ returns e = e.replace (/on/i, ""), t.addeventlistener (e, i.getonevent (t, e, n, r),! ! O), t}: function (t, e, n, r){ return e = e.replace (/on/i, ""), t.attach event ("on"+e, i.get onevent (t, e, n, r)), t}; var r={getDom:function(t,n){ return arguments . length { { # jubao } }